class Aws::EndpointProvider
@api private
def add_rule(options = {})
(**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)
-
: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)
-
(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