def add_service name, ruby_name, endpoint_prefix
svc = SERVICES[name]
svc_opt = svc.method_name
ruby_name = svc.old_name
add_option(svc_opt, {})
add_option "#{ruby_name}_endpoint""#{ruby_name}_endpoint" do |config,value|
region = config.endpoint_region(svc)
endpoint = value
endpoint ||= config.send(svc_opt)[:endpoint]
endpoint ||= Endpoints.hostname(region, endpoint_prefix)
endpoint ||= "#{endpoint_prefix}.#{region}.amazonaws.com"
endpoint
end
add_option("#{ruby_name}_port""#{ruby_name}_port") do |config,value|
if value
value
elsif port = config.send(svc_opt)[:port]
port
else
config.use_ssl? ? 443 : 80
end
end
add_option("#{ruby_name}_region""#{ruby_name}_region") do |config,value|
if value
value
elsif region = config.send(svc_opt)[:region]
region
else
endpoint = config.send("#{ruby_name}_endpoint")
if endpoint =~ /us-gov/
if matches = endpoint.match(/(us-gov-west-\d+)/)
matches[1]
else
'us-gov-west-1'
end
elsif matches = endpoint.match(/^.+?[.-](.+)\.amazonaws.com/)
matches[1]
else
AWS.const_get(name).global_endpoint? ? 'us-east-1' : config.region
end
end
end
needs = [
"#{svc_opt}""#{svc_opt}",
"#{ruby_name}_endpoint""#{ruby_name}_endpoint",
"#{ruby_name}_port""#{ruby_name}_port",
"#{ruby_name}_region""#{ruby_name}_region",
:credential_provider,
:http_handler,
:http_read_timeout,
:http_continue_timeout,
:http_continue_threshold,
:log_formatter,
:log_level,
:logger,
:proxy_uri,
:max_retries,
:stub_requests?,
:ssl_verify_peer?,
:ssl_ca_file,
:ssl_ca_path,
:use_ssl?,
:user_agent_prefix,
]
create_block = lambda do |config,client_options|
options = client_options["#{svc_opt}""#{svc_opt}"]
AWS.const_get(name)::Client.new(options.merge(:config => config))
end
add_option_with_needs "#{ruby_name}_client""#{ruby_name}_client", needs, &create_block
end