# File lib/aws/core/configuration.rb, line 384
        def add_service name, ruby_name, endpoint_pattern = nil, &endpoint_builder

          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|
            if value
              value
            elsif endpoint = config.send(svc_opt)[:endpoint]
              endpoint
            elsif endpoint_pattern
              endpoint_pattern % config.region
            else
              endpoint_builder.call(config.region)
            end
          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

          # users only need to specify service regions when they use
          # a test endpoint with a sigv4 service
          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' # e.g. iam.us-gov.amazonaws.com
                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 = [
            "#{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|
            AWS.const_get(name)::Client.new(:config => config)
          end

          add_option_with_needs "#{ruby_name}_client""#{ruby_name}_client", needs, &create_block

        end