class Aws::EndpointProvider

@api private

def add_rule(options = {})

Options Hash: (**options)
  • :services (Array) -- A list of services this rule
  • :region_prefix (String) -- Causes regions with this
  • :priority (Integer) -- A number from 0 to 999.
  • :pattern (required, String) -- The endpoint pattern with
def add_rule(options = {})
  @rules = (@rules + [new_rule(options)]).sort_by { |r| r['priority'] }
end

def default_provider

def default_provider
  @default_provider ||= EndpointProvider.new(rules: default_rules)
end

def default_rules

def default_rules
  path = File.join(File.dirname(__FILE__), '..', '..', 'endpoints.json')
  MultiJson.load(File.read(path))
end

def expand_endpoint(pattern, options)

def expand_endpoint(pattern, options)
  pattern.gsub(/{\w+}/) { |match| options[match[1..-2].to_sym] }
end

def initialize(options = {})

Options Hash: (**options)
  • :rules (Array) -- An array of grouped rules.
def initialize(options = {})
  @rules = options[:rules] || []
end

def new_rule(options)

def new_rule(options)
  rule = {}
  rule['services'] = options[:services] if options[:services]
  rule['config'] = {}
  rule['config']['endpoint'] = options[:pattern]
  {
    'priority' => options[:priority] || 100,
    'regionPrefix' => options[:region_prefix] || '',
    'rules' => [rule]
  }
end

def region_matches?(rule_group, options)

def region_matches?(rule_group, options)
  options[:region] && options[:region].match(/^#{rule_group['regionPrefix']}/)
end

def resolve(options)

Returns:
  • (String, nil) -

Options Hash: (**options)
  • :scheme (required, String) --
  • :region (required, String) --
  • :service (required, String) --
def resolve(options)
  @rules.each do |rule_group|
    if region_matches?(rule_group, options)
      rule_group['rules'].each do |rule|
        if service_matches?(rule, options)
          return expand_endpoint(rule['config']['endpoint'], options)
        end
      end
    end
  end
  nil
end

def service_matches?(rule, options)

def service_matches?(rule, options)
  rule['services'].nil? || rule['services'].include?(options[:service])
end