def add_service name, ruby_name, default_endpoint
add_option "#{ruby_name}_endpoint""#{ruby_name}_endpoint", default_endpoint
add_option("#{ruby_name}_port""#{ruby_name}_port") do |config,value|
value || (config.use_ssl? ? 443 : 80)
end
add_option("#{ruby_name}_region""#{ruby_name}_region") do |config,value|
value || begin
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
'us-east-1'
end
end
end
needs = [
:signer,
:http_handler,
"#{ruby_name}_endpoint""#{ruby_name}_endpoint",
"#{ruby_name}_port""#{ruby_name}_port",
:max_retries,
:stub_requests?,
:proxy_uri,
:use_ssl?,
:ssl_verify_peer?,
:ssl_ca_file,
:user_agent_prefix,
:logger,
:log_formatter,
:log_level,
]
create_block = lambda do |config|
AWS.const_get(name)::Client.new(:config => config)
end
add_option_with_needs "#{ruby_name}_client""#{ruby_name}_client", needs, &create_block
end