in build_tools/aws-sdk-code-generator/spec/spec_helper.rb [61:130]
def generate_service(module_names, options = {})
svc_path = module_names.map do |name|
AwsSdkCodeGenerator::Underscore.underscore(name)
end.join('/')
api_dir = File.join([
File.dirname(__FILE__),
'fixtures',
'interfaces',
svc_path,
])
svc_name = module_names.last
gem_name = module_names.last.downcase
shared_opts = {
gem_version: '1.0.0',
name: svc_name,
gem_name: gem_name,
module_name: module_names.join('::'),
}
service_opts = shared_opts.merge({
api: model_path(:api, api_dir),
paginators: model_path(:paginators, api_dir),
resources: model_path(:resources, api_dir),
waiters: model_path(:waiters, api_dir),
examples: model_path(:examples, api_dir),
endpoint_rules: model_path('endpoint-rule-set'.to_sym, api_dir)
})
apig_opts = shared_opts.merge({
api: model_path(:service, api_dir),
default_endpoint: "https://foobar.us-west-2.amazonaws.com/test",
remove_plugins: ['Aws::Plugins::UserAgent']
})
svc_opts = options[:custom] ? apig_opts : service_opts
generator = AwsSdkCodeGenerator::CodeBuilder.new(
aws_sdk_core_lib_path: File.expand_path('../../../../gems/aws-sdk-core/lib/', __FILE__),
service: AwsSdkCodeGenerator::Service.new(svc_opts)
)
if options.fetch(:multiple_files, true)
tmpdir = Dir.mktmpdir
generator.source_files.each do |path, code|
path = File.join(tmpdir, path)
FileUtils.mkdir_p(File.dirname(path))
File.open(path, 'wb') do |file|
file.write(code)
end
end
$LOAD_PATH << tmpdir
require "#{tmpdir}/#{svc_path}"
tmpdir
else
code = generator.source
begin
Object.module_eval(code)
rescue => error
$stderr.puts("\nCODE:\n#{code}\n")
raise error
end
end
end