generate_service

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