aws-sdk-code-generator 0.4.0.pre → 0.5.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aws-sdk-code-generator/client_constructor.rb +2 -1
  3. data/lib/aws-sdk-code-generator/code_builder.rb +52 -0
  4. data/lib/aws-sdk-code-generator/eventstream_example.rb +34 -34
  5. data/lib/aws-sdk-code-generator/gem_builder.rb +3 -5
  6. data/lib/aws-sdk-code-generator/plugin_list.rb +2 -1
  7. data/lib/aws-sdk-code-generator/rbs/error_list.rb +38 -0
  8. data/lib/aws-sdk-code-generator/rbs/keyword_argument_builder.rb +159 -0
  9. data/lib/aws-sdk-code-generator/rbs/method_signature.rb +11 -0
  10. data/lib/aws-sdk-code-generator/rbs/resource_action.rb +39 -0
  11. data/lib/aws-sdk-code-generator/rbs/resource_association.rb +50 -0
  12. data/lib/aws-sdk-code-generator/rbs/resource_batch_action.rb +59 -0
  13. data/lib/aws-sdk-code-generator/rbs/resource_client_request.rb +40 -0
  14. data/lib/aws-sdk-code-generator/rbs/waiter.rb +53 -0
  15. data/lib/aws-sdk-code-generator/rbs.rb +40 -0
  16. data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +3 -1
  17. data/lib/aws-sdk-code-generator/resource_client_request.rb +3 -1
  18. data/lib/aws-sdk-code-generator/resource_waiter.rb +6 -5
  19. data/lib/aws-sdk-code-generator/service.rb +21 -0
  20. data/lib/aws-sdk-code-generator/views/async_client_class.rb +5 -1
  21. data/lib/aws-sdk-code-generator/views/client_api_module.rb +29 -4
  22. data/lib/aws-sdk-code-generator/views/client_class.rb +5 -1
  23. data/lib/aws-sdk-code-generator/views/event_streams_module.rb +7 -1
  24. data/lib/aws-sdk-code-generator/views/features/smoke.rb +99 -23
  25. data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +1 -4
  26. data/lib/aws-sdk-code-generator/views/gemspec.rb +13 -3
  27. data/lib/aws-sdk-code-generator/views/rbs/client_class.rb +172 -0
  28. data/lib/aws-sdk-code-generator/views/rbs/errors_module.rb +28 -0
  29. data/lib/aws-sdk-code-generator/views/rbs/resource_class.rb +95 -0
  30. data/lib/aws-sdk-code-generator/views/rbs/root_resource_class.rb +30 -0
  31. data/lib/aws-sdk-code-generator/views/rbs/types_module.rb +257 -0
  32. data/lib/aws-sdk-code-generator/views/rbs/waiters_module.rb +22 -0
  33. data/lib/aws-sdk-code-generator/views/spec/endpoint_provider_spec_class.rb +5 -1
  34. data/lib/aws-sdk-code-generator/views/types_module.rb +8 -9
  35. data/lib/aws-sdk-code-generator.rb +17 -1
  36. data/templates/client_api_module.mustache +7 -0
  37. data/templates/client_class.mustache +0 -45
  38. data/templates/endpoints_module.mustache +1 -0
  39. data/templates/endpoints_plugin.mustache +4 -2
  40. data/templates/features/smoke.mustache +11 -15
  41. data/templates/features/step_definitions.mustache +0 -5
  42. data/templates/gemspec.mustache +5 -2
  43. data/templates/rbs/client_class.mustache +39 -0
  44. data/templates/rbs/errors_module.mustache +17 -0
  45. data/templates/rbs/resource_class.mustache +71 -0
  46. data/templates/rbs/root_resource_class.mustache +26 -0
  47. data/templates/rbs/types_module.mustache +37 -0
  48. data/templates/rbs/waiters_module.mustache +17 -0
  49. data/templates/resource_class.mustache +3 -1
  50. data/templates/spec/endpoint_provider_spec_class.mustache +10 -0
  51. metadata +24 -5
  52. data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +0 -26
  53. data/templates/features/smoke_step_definitions.mustache +0 -31
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsSdkCodeGenerator
4
+ module RBS
5
+ class ResourceClientRequest
6
+ include Helper
7
+
8
+ attr_reader :method_name
9
+ attr_reader :arguments
10
+ attr_reader :returns
11
+ attr_reader :include_required
12
+
13
+ def initialize(method_name:, api:, request:, returns:, skip: [])
14
+ @method_name = method_name
15
+ @returns = returns
16
+ @include_required = false
17
+
18
+ operation = api["operations"][request["operation"]]
19
+ shape_ref = operation["input"]
20
+ input_shape = AwsSdkCodeGenerator::Api.shape(shape_ref, api)
21
+ skip = Set.new(skip + AwsSdkCodeGenerator::ResourceSkipParams.compute(input_shape, request))
22
+ @arguments = if input_shape
23
+ shape = deep_copy(input_shape)
24
+ shape["members"].select! { |member_name, _| !skip.include?(member_name) }
25
+ KeywordArgumentBuilder.new(api: api, shape: shape, newline: true).format(indent: ' ' * (12 + method_name.length))
26
+ end
27
+ end
28
+
29
+ def build_method_signature
30
+ MethodSignature.new(
31
+ method_name: method_name,
32
+ overloads: [
33
+ "(#{arguments}) -> #{returns}",
34
+ "(#{@include_required ? "" : "?"}Hash[Symbol, untyped]) -> #{returns}"
35
+ ]
36
+ )
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsSdkCodeGenerator
4
+ module RBS
5
+ class Waiter < Struct.new(
6
+ :name,
7
+ :class_name,
8
+ :client_overload_keyword_argument,
9
+ :client_overload_positional_argument,
10
+ :waiter_overload_keyword_argument,
11
+ :waiter_overload_positional_argument,
12
+ keyword_init: true
13
+ )
14
+ class << self
15
+ def build_list(api:, waiters:)
16
+ operations = api.fetch("operations")
17
+ waiters =
18
+ if waiters&.first
19
+ waiters["waiters"]
20
+ else
21
+ {}
22
+ end
23
+ waiters.map do |waiter_name, waiter|
24
+ operation = waiter.fetch("operation")
25
+ operation_ref = operations[operation]
26
+ input_shape = operation_ref.dig("input", "shape")
27
+ include_required = api["shapes"][input_shape]&.[]("required")&.empty?&.!
28
+
29
+ name = ":#{Underscore.underscore(waiter_name)}"
30
+ shapes = api.fetch("shapes")
31
+ input_shape_ref = shapes[input_shape]
32
+ params = AwsSdkCodeGenerator::RBS::KeywordArgumentBuilder.new(
33
+ api: api,
34
+ shape: input_shape_ref,
35
+ newline: true,
36
+ ).format(indent: ' ' * 18)
37
+ returns = operation_ref.dig("output", "shape") ? "Client::_#{operation}ResponseSuccess" : "::Seahorse::Client::_ResponseSuccess[::Aws::EmptyStructure]"
38
+ prefix = include_required ? "" : "?"
39
+
40
+ new.tap do |w|
41
+ w.name = name
42
+ w.class_name = waiter_name
43
+ w.client_overload_keyword_argument = "(#{name} waiter_name, #{params}) -> #{returns}"
44
+ w.client_overload_positional_argument = "(#{name} waiter_name, #{prefix}Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> #{returns}"
45
+ w.waiter_overload_keyword_argument = "(#{params}) -> #{returns}"
46
+ w.waiter_overload_positional_argument = "(#{prefix}Hash[Symbol, untyped]) -> #{returns}"
47
+ end
48
+ end.sort_by(&:name)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsSdkCodeGenerator
4
+ module RBS
5
+ class << self
6
+ def to_type(shape_ref, api)
7
+ _, shape = Api.resolve(shape_ref, api)
8
+ case shape['type']
9
+ when 'blob' then Api.streaming?(shape_ref, api) ? '::IO' : '::String'
10
+ when 'boolean' then 'bool'
11
+ when 'byte' then '::Integer'
12
+ when 'character' then '::String'
13
+ when 'double' then '::Float'
14
+ when 'float' then '::Float'
15
+ when 'integer' then '::Integer'
16
+ when 'list' then "::Array[#{to_type(shape['member'], api)}]"
17
+ when 'long' then '::Integer'
18
+ when 'map' then "::Hash[#{to_type(shape['key'], api)}, #{to_type(shape['value'], api)}]"
19
+ when 'string'
20
+ if shape['enum']
21
+ "(#{shape['enum'].map { |e| "\"#{e}\"" }.join(" | ")})"
22
+ elsif Api.streaming?(shape_ref, api)
23
+ '::IO'
24
+ else
25
+ '::String'
26
+ end
27
+ when 'structure'
28
+ if shape['document']
29
+ 'untyped'
30
+ else
31
+ "Types::#{shape_ref['shape']}"
32
+ end
33
+ when 'timestamp' then '::Time'
34
+ else
35
+ raise "unhandled type #{shape['type'].inspect}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -15,7 +15,9 @@ module AwsSdkCodeGenerator
15
15
  parts << 'batch_enum.each do |batch|'
16
16
  parts << initialize_params
17
17
  parts << apply_params_per_batch
18
- parts << " batch[0].client.#{client_method}(params)"
18
+ parts << " Aws::Plugins::UserAgent.feature('resource') do"
19
+ parts << " batch[0].client.#{client_method}(params)"
20
+ parts << ' end'
19
21
  parts << 'end'
20
22
  parts << 'nil'
21
23
  parts.join("\n").rstrip
@@ -15,9 +15,11 @@ module AwsSdkCodeGenerator
15
15
  parts = []
16
16
  parts << request_options(params) if merge
17
17
  parts << assignment(options)
18
- parts << "@client."
18
+ parts << "Aws::Plugins::UserAgent.feature('resource') do\n"
19
+ parts << " @client."
19
20
  parts << operation_name(request)
20
21
  parts << arguments(merge, params, streaming)
22
+ parts << "\nend"
21
23
  parts.join
22
24
  end
23
25
 
@@ -52,11 +52,12 @@ module AwsSdkCodeGenerator
52
52
  args = ResourceClientRequestParams.new(
53
53
  params: waiter['params']
54
54
  ).to_s.strip
55
- if waiter['path']
56
- "resp = waiter.wait(params.merge(#{args}))"
57
- else
58
- "waiter.wait(params.merge(#{args}))"
59
- end
55
+ parts = []
56
+ parts << 'resp = ' if waiter['path']
57
+ parts << "Aws::Plugins::UserAgent.feature('resource') do\n"
58
+ parts << " waiter.wait(params.merge(#{args}))"
59
+ parts << "\nend"
60
+ parts.join
60
61
  end
61
62
 
62
63
  def constructor_args(resource, waiter)
@@ -20,6 +20,7 @@ module AwsSdkCodeGenerator
20
20
  # @option options [Hash<gem,version>] :gem_dependencies ({})
21
21
  # @option options [Hash] :add_plugins ({})
22
22
  # @option options [Hash] :remove_plugins ([])
23
+ # @option options [Boolean] :deprecated (false)
23
24
  def initialize(options)
24
25
  @name = options.fetch(:name)
25
26
  @identifier = name.downcase
@@ -57,6 +58,7 @@ module AwsSdkCodeGenerator
57
58
  @require_endpoint_discovery = api.fetch('operations', []).any? do |_, o|
58
59
  o['endpointdiscovery'] && o['endpointdiscovery']['required']
59
60
  end
61
+ @deprecated = options[:deprecated] || false
60
62
  end
61
63
 
62
64
  # @return [String] The service name, e.g. "S3"
@@ -146,6 +148,25 @@ module AwsSdkCodeGenerator
146
148
  # @return [Boolean] true if any operation requires endpoint_discovery
147
149
  attr_reader :require_endpoint_discovery
148
150
 
151
+ # @return [String] the service_id
152
+ def service_id
153
+ metadata = @api['metadata']
154
+ return metadata['serviceId'] if metadata['serviceId']
155
+
156
+ name = metadata['serviceAbbreviation'] || metadata['serviceFullName']
157
+ name = name.gsub(/AWS/, '').gsub(/Amazon/, '')
158
+ name = name.gsub(/[^a-zA-Z0-9 ]+/, '')
159
+ name = name.gsub(/^[0-9]+/, '')
160
+ name = name.strip
161
+
162
+ name
163
+ end
164
+
165
+ # @return [Boolean] true if the service is deprecated
166
+ def deprecated?
167
+ @deprecated
168
+ end
169
+
149
170
  # @api private
150
171
  def inspect
151
172
  "#<#{self.class.name}>"
@@ -24,10 +24,14 @@ module AwsSdkCodeGenerator
24
24
  @gem_version = options.fetch(:gem_version)
25
25
  @plugins = PluginList.new(options)
26
26
  @codegenerated_plugins = options.fetch(:codegenerated_plugins, [])
27
+ @default_plugins = Seahorse::Client::AsyncBase.plugins.map do |plugin|
28
+ PluginList::Plugin.new(class_name: plugin.name, options: plugin.options, path: '')
29
+ end
27
30
  @client_constructor = ClientConstructor.new(
28
31
  options.merge(
29
32
  plugins: @plugins,
30
- codegenerated_plugins: @codegenerated_plugins))
33
+ codegenerated_plugins: @codegenerated_plugins,
34
+ default_plugins: @default_plugins))
31
35
  @operations = ClientOperationList.new(options).to_a
32
36
  end
33
37
 
@@ -34,6 +34,8 @@ module AwsSdkCodeGenerator
34
34
  'union' => false, # should remain false
35
35
  'document' => true,
36
36
  'jsonvalue' => true,
37
+ 'error' => true, # parsing customized error code in query protocol
38
+ 'locationName' => true, # to recognize xmlName defined on shape
37
39
  # event stream modeling
38
40
  'event' => false,
39
41
  'eventstream' => false,
@@ -43,7 +45,7 @@ module AwsSdkCodeGenerator
43
45
  'synthetic' => false,
44
46
  'box' => false,
45
47
  'fault' => false,
46
- 'error' => false,
48
+ 'exception_event' => false, # internal, exceptions cannot be events
47
49
  'deprecated' => false,
48
50
  'deprecatedMessage' => false,
49
51
  'type' => false,
@@ -51,7 +53,6 @@ module AwsSdkCodeGenerator
51
53
  'members' => false,
52
54
  'member' => false,
53
55
  'key' => false,
54
- 'locationName' => false,
55
56
  'value' => false,
56
57
  'required' => false,
57
58
  'enum' => false,
@@ -70,9 +71,11 @@ module AwsSdkCodeGenerator
70
71
  # keep all
71
72
  'endpointPrefix' => true,
72
73
  'signatureVersion' => true,
74
+ 'auth' => true,
73
75
  'signingName' => true,
74
76
  'serviceFullName' => true,
75
77
  'protocol' => true,
78
+ 'protocols' => true,
76
79
  'targetPrefix' => true,
77
80
  'jsonVersion' => true,
78
81
  'errorPrefix' => true,
@@ -98,6 +101,7 @@ module AwsSdkCodeGenerator
98
101
  # @return [String|nil]
99
102
  def generated_src_warning
100
103
  return if @service.protocol == 'api-gateway'
104
+
101
105
  GENERATED_SRC_WARNING
102
106
  end
103
107
 
@@ -204,12 +208,18 @@ module AwsSdkCodeGenerator
204
208
  if operation.key?('httpChecksum')
205
209
  operation['httpChecksum']['requestAlgorithmMember'] = underscore(operation['httpChecksum']['requestAlgorithmMember']) if operation['httpChecksum']['requestAlgorithmMember']
206
210
  operation['httpChecksum']['requestValidationModeMember'] = underscore(operation['httpChecksum']['requestValidationModeMember']) if operation['httpChecksum']['requestValidationModeMember']
207
-
208
211
  o.http_checksum = operation['httpChecksum'].inject([]) do |a, (k, v)|
209
212
  a << { key: k.inspect, value: v.inspect }
210
213
  a
211
214
  end
212
215
  end
216
+
217
+ if operation.key?('requestcompression')
218
+ o.request_compression = operation['requestcompression'].each_with_object([]) do |(k, v), arr|
219
+ arr << { key: k.inspect, value: v.inspect }
220
+ end
221
+ end
222
+
213
223
  %w(input output).each do |key|
214
224
  if operation[key]
215
225
  o.shape_references << "o.#{key} = #{operation_ref(operation[key])}"
@@ -250,6 +260,7 @@ module AwsSdkCodeGenerator
250
260
 
251
261
  def apig_authorizer
252
262
  return nil unless @service.api.key? 'authorizers'
263
+
253
264
  @service.api['authorizers'].map do |name, authorizer|
254
265
  Authorizer.new.tap do |a|
255
266
  a.name = name
@@ -298,6 +309,9 @@ module AwsSdkCodeGenerator
298
309
  args << "name: '#{shape_name}'"
299
310
  shape.each_pair do |key, value|
300
311
  if SHAPE_KEYS[key]
312
+ # only query protocols have custom error code
313
+ next if @service.protocol != 'query' && key == 'error'
314
+
301
315
  args << "#{key}: #{value.inspect}"
302
316
  elsif SHAPE_KEYS[key].nil?
303
317
  raise "unhandled shape key #{key.inspect}"
@@ -491,8 +505,16 @@ module AwsSdkCodeGenerator
491
505
  options = {}
492
506
  metadata.each_pair do |key, value|
493
507
  next if key == 'resultWrapper'
508
+
494
509
  if key == 'locationName'
495
- options[:location_name] = value.inspect
510
+ options[:location_name] =
511
+ # use the xmlName on shape if defined
512
+ if (@service.protocol == 'rest-xml') &&
513
+ (shape_location_name = @service.api['shapes'][shape_name]['locationName'])
514
+ shape_location_name.inspect
515
+ else
516
+ value.inspect
517
+ end
496
518
  else
497
519
  options[:metadata] ||= {}
498
520
  options[:metadata][key] = value.inspect
@@ -551,6 +573,9 @@ module AwsSdkCodeGenerator
551
573
  # @return [Hash]
552
574
  attr_accessor :http_checksum
553
575
 
576
+ # @return [Hash]
577
+ attr_accessor :request_compression
578
+
554
579
  # @return [Array<String>]
555
580
  attr_accessor :shape_references
556
581
 
@@ -27,10 +27,14 @@ module AwsSdkCodeGenerator
27
27
  @gem_version = options.fetch(:gem_version)
28
28
  @plugins = PluginList.new(options)
29
29
  @codegenerated_plugins = options.fetch(:codegenerated_plugins, [])
30
+ @default_plugins = Seahorse::Client::Base.plugins.map do |plugin|
31
+ PluginList::Plugin.new(class_name: plugin.name, options: plugin.options, path: '')
32
+ end
30
33
  @client_constructor = ClientConstructor.new(
31
34
  options.merge(
32
35
  plugins: @plugins,
33
- codegenerated_plugins: @codegenerated_plugins))
36
+ codegenerated_plugins: @codegenerated_plugins,
37
+ default_plugins: @default_plugins))
34
38
  @operations = ClientOperationList.new(options).to_a
35
39
  @waiters = Waiter.build_list(options[:waiters])
36
40
  @custom = options.fetch(:custom)
@@ -99,9 +99,15 @@ module AwsSdkCodeGenerator
99
99
  ).to_s
100
100
  end
101
101
  param_hash_str = Docstring.join_docstrings([option_tags], block_comment: false)
102
+ param_hash =
103
+ if param_hash_str.nil?
104
+ '# This event has no members'
105
+ else
106
+ Docstring.indent(param_hash_str, ' ')
107
+ end
102
108
  m << EventEntry.new(
103
109
  name: underscore(n),
104
- param_hash: Docstring.indent(param_hash_str, ' ')
110
+ param_hash: param_hash
105
111
  )
106
112
  m
107
113
  end
@@ -10,35 +10,25 @@ module AwsSdkCodeGenerator
10
10
  def initialize(options)
11
11
  service = options.fetch(:service)
12
12
  @custom = service.protocol == 'api-gateway'
13
- @service = service.name
13
+ @service_name = service.name
14
+ @service_module = service.module_name
14
15
 
15
16
  # This will only be called if this is defined
16
17
  smoke_json = service.smoke_tests
17
- @client_region = smoke_json["defaultRegion"]
18
- @client_endpoint = smoke_json["defaultEndpoint"]
19
- @smoke_tests = smoke_json["testCases"].map do |test|
20
- h = {
21
- operation: underscore(test["operationName"]),
22
- smoke_test_tags: "@#{service.identifier} @smoke",
23
- }
24
- if test["errorExpectedFromService"]
25
- h[:error_expectation] = "I expect an error was raised"
26
- h[:scenario_string] = "Call Aws::#{service.module_name}::Client##{h[:operation]} and expect it to fail"
27
- else
28
- h[:error_expectation] = "I expect an error was not raised"
29
- h[:scenario_string] = "Call #{service.module_name}::Client##{h[:operation]} and expect it to succeed"
30
- end
31
- h[:param_hash] = test["input"].inject({}) do |acc, kv|
32
- raw_key, value = kv
33
- key = underscore(raw_key)
34
- acc[key] = value
35
- acc
36
- end.to_json
37
- h
18
+ @smoke_tests = smoke_json['testCases'].map do |test|
19
+ SmokeTest.new(
20
+ service: service,
21
+ id: test['id'],
22
+ operation_name: test['operationName'],
23
+ input: test['input'],
24
+ expectation: test['expectation'],
25
+ config: test['config'],
26
+ tags: test['tags']
27
+ )
38
28
  end
39
29
  end
40
30
 
41
- attr_reader :service, :client_region, :client_endpoint, :smoke_tests
31
+ attr_reader :service_name, :smoke_tests, :service_module
42
32
 
43
33
  # @return [String|nil]
44
34
  def generated_src_warning
@@ -46,6 +36,92 @@ module AwsSdkCodeGenerator
46
36
  GENERATED_SRC_WARNING
47
37
  end
48
38
 
39
+ class SmokeTest < View
40
+ def initialize(options)
41
+ @service = options.fetch(:service)
42
+ @id = options.fetch(:id)
43
+ @operation_name = underscore(options.fetch(:operation_name))
44
+ @input = options.fetch(:input)
45
+ @expectation = expectation_str(options.fetch(:expectation))
46
+ @config = options.fetch(:config)
47
+
48
+ tags = options.fetch(:tags) || []
49
+ tags = tags.map { |t| "@#{t}" }.join(' ')
50
+ @tags = "@#{@service.identifier} @smoke #{tags}".strip
51
+ end
52
+
53
+ attr_reader :id, :operation_name, :expectation, :tags
54
+
55
+ def param_hash
56
+ deep_underscore(@input).to_json
57
+ end
58
+
59
+ def config_hash
60
+ @config.each_with_object({}) do |(raw_key, raw_value), acc|
61
+ key, value = config_map(raw_key, raw_value)
62
+ acc[key] = value unless key.nil?
63
+ end.to_json
64
+ end
65
+
66
+ private
67
+
68
+ def deep_underscore(input)
69
+ case input
70
+ when Hash
71
+ input.each_with_object({}) do |(key, value), acc|
72
+ acc[underscore(key)] = deep_underscore(value)
73
+ end
74
+ when Array
75
+ input.map { |value| deep_underscore(value) }
76
+ else
77
+ input
78
+ end
79
+ end
80
+
81
+ def config_map(raw_key, raw_value)
82
+ case raw_key
83
+ # generic
84
+ when 'region' then ['region', raw_value]
85
+ when 'sigv4aRegionSet' then nil # TODO
86
+ when 'uri' then ['endpoint', raw_value]
87
+ when 'useFips' then ['use_fips_endpoint', raw_value]
88
+ when 'useDualStack' then ['use_dualstack_endpoint', raw_value]
89
+ # service specific
90
+ when 'useGlobalEndpoint'
91
+ value = raw_value == 'true' ? 'legacy' : 'regional'
92
+ if @service.name == 'S3'
93
+ ['s3_us_east_1_regional_endpoint', value]
94
+ elsif @service.name == 'STS'
95
+ ['sts_regional_endpoints', value]
96
+ end
97
+ # s3 specific
98
+ when 'useAccelerate' then ['use_accelerate_endpoint', raw_value]
99
+ when 'useArnRegion' then ['s3_use_arn_region', raw_value]
100
+ when 'useMultiRegionAccessPoints'
101
+ value = raw_value == 'true' ? 'false' : 'true'
102
+ ['s3_disable_multiregion_access_points', value]
103
+ when 'forcePathStyle' then ['force_path_style', raw_value]
104
+ when 'useAccountIdRouting' then nil # TODO
105
+ else
106
+ # catch all, possible code generated config options
107
+ [downcase(raw_key), raw_value]
108
+ end
109
+ end
110
+
111
+ def expectation_str(expectation)
112
+ if expectation.key?('success')
113
+ 'I expect an error was not raised'
114
+ elsif expectation.key?('failure')
115
+ if (error_id = expectation['failure']['errorId'])
116
+ error_class = "#{@service.module_name}::Errors::#{error_id}"
117
+ "I expect a '#{error_class}' was raised"
118
+ else
119
+ 'I expect an error was raised'
120
+ end
121
+ end
122
+ end
123
+ end
124
+
49
125
  end
50
126
  end
51
127
  end
@@ -11,12 +11,9 @@ module AwsSdkCodeGenerator
11
11
  service = options.fetch(:service)
12
12
  @var_name = service.identifier
13
13
  @module_name = service.module_name
14
- if service.smoke_tests
15
- @client_endpoint = service.smoke_tests['defaultEndpoint']
16
- end
17
14
  end
18
15
 
19
- attr_reader :var_name, :module_name, :client_endpoint
16
+ attr_reader :var_name, :module_name
20
17
 
21
18
  end
22
19
  end
@@ -43,7 +43,7 @@ module AwsSdkCodeGenerator
43
43
  end
44
44
 
45
45
  def files
46
- ['LICENSE.txt', 'CHANGELOG.md', 'VERSION', 'lib/**/*.rb']
46
+ ['LICENSE.txt', 'CHANGELOG.md', 'VERSION', 'lib/**/*.rb', 'sig/**/*.rbs']
47
47
  end
48
48
 
49
49
  # @return [String]
@@ -54,7 +54,9 @@ module AwsSdkCodeGenerator
54
54
  if @service.short_name != @service.full_name
55
55
  abbreviation = " (#{@service.short_name})"
56
56
  end
57
- desc = "Official AWS Ruby gem for #{@service.full_name}#{abbreviation}. "
57
+ desc = ''
58
+ desc += '[DEPRECATED] ' if @service.deprecated?
59
+ desc += "Official AWS Ruby gem for #{@service.full_name}#{abbreviation}. "
58
60
  desc += 'This gem is part of the AWS SDK for Ruby.'
59
61
  end
60
62
  desc
@@ -72,7 +74,15 @@ module AwsSdkCodeGenerator
72
74
  end
73
75
  end
74
76
 
75
- Dependency = Struct.new(:gem, :version)
77
+ def deprecated?
78
+ @service.deprecated?
79
+ end
80
+
81
+ Dependency = Struct.new(:gem, :version) do
82
+ def gem_version
83
+ [gem, version].compact.map { |s| "'#{s}'"}.join(', ')
84
+ end
85
+ end
76
86
 
77
87
  end
78
88
  end