aws-sdk-code-generator 0.1.0.pre → 0.2.4.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +5 -5
  2. data/lib/aws-sdk-code-generator/api.rb +150 -0
  3. data/lib/aws-sdk-code-generator/apply_docs.rb +15 -2
  4. data/lib/aws-sdk-code-generator/client_constructor.rb +39 -0
  5. data/lib/aws-sdk-code-generator/client_operation_documentation.rb +282 -0
  6. data/lib/aws-sdk-code-generator/client_operation_list.rb +148 -0
  7. data/lib/aws-sdk-code-generator/client_response_structure_example.rb +115 -0
  8. data/lib/aws-sdk-code-generator/code_builder.rb +146 -133
  9. data/lib/aws-sdk-code-generator/crosslink.rb +42 -0
  10. data/lib/aws-sdk-code-generator/docstring.rb +199 -0
  11. data/lib/aws-sdk-code-generator/error_list.rb +77 -0
  12. data/lib/aws-sdk-code-generator/errors.rb +2 -0
  13. data/lib/aws-sdk-code-generator/eventstream_example.rb +220 -0
  14. data/lib/aws-sdk-code-generator/gem_builder.rb +42 -25
  15. data/lib/aws-sdk-code-generator/hash_formatter.rb +5 -2
  16. data/lib/aws-sdk-code-generator/helper.rb +86 -119
  17. data/lib/aws-sdk-code-generator/plugin_list.rb +147 -0
  18. data/lib/aws-sdk-code-generator/resource_action.rb +69 -0
  19. data/lib/aws-sdk-code-generator/resource_action_code.rb +57 -0
  20. data/lib/aws-sdk-code-generator/resource_association.rb +37 -0
  21. data/lib/aws-sdk-code-generator/resource_attribute.rb +76 -0
  22. data/lib/aws-sdk-code-generator/resource_batch_action.rb +56 -0
  23. data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +136 -0
  24. data/lib/aws-sdk-code-generator/resource_batch_action_documentation.rb +108 -0
  25. data/lib/aws-sdk-code-generator/resource_batch_builder.rb +212 -0
  26. data/lib/aws-sdk-code-generator/resource_builder.rb +48 -0
  27. data/lib/aws-sdk-code-generator/resource_client_request.rb +62 -0
  28. data/lib/aws-sdk-code-generator/resource_client_request_documentation.rb +81 -0
  29. data/lib/aws-sdk-code-generator/resource_client_request_params.rb +86 -0
  30. data/lib/aws-sdk-code-generator/resource_data_method.rb +60 -0
  31. data/lib/aws-sdk-code-generator/resource_has_association.rb +117 -0
  32. data/lib/aws-sdk-code-generator/resource_has_many_association.rb +52 -0
  33. data/lib/aws-sdk-code-generator/resource_has_many_association_code.rb +76 -0
  34. data/lib/aws-sdk-code-generator/resource_identifier.rb +44 -0
  35. data/lib/aws-sdk-code-generator/resource_identifiers_method.rb +29 -0
  36. data/lib/aws-sdk-code-generator/resource_load_method.rb +68 -0
  37. data/lib/aws-sdk-code-generator/resource_method.rb +22 -0
  38. data/lib/aws-sdk-code-generator/resource_skip_params.rb +36 -0
  39. data/lib/aws-sdk-code-generator/resource_value_source.rb +68 -0
  40. data/lib/aws-sdk-code-generator/resource_waiter.rb +80 -0
  41. data/lib/aws-sdk-code-generator/service.rb +30 -7
  42. data/lib/aws-sdk-code-generator/shared_example.rb +131 -0
  43. data/lib/aws-sdk-code-generator/syntax_example.rb +60 -0
  44. data/lib/aws-sdk-code-generator/syntax_example_hash.rb +174 -0
  45. data/lib/aws-sdk-code-generator/underscore.rb +10 -5
  46. data/lib/aws-sdk-code-generator/view.rb +33 -0
  47. data/lib/aws-sdk-code-generator/views/apig_endpoint_class.rb +25 -0
  48. data/lib/aws-sdk-code-generator/views/apig_readme.rb +32 -0
  49. data/lib/aws-sdk-code-generator/views/async_client_class.rb +68 -0
  50. data/lib/aws-sdk-code-generator/views/authorizer_class.rb +17 -0
  51. data/lib/aws-sdk-code-generator/views/client_api_module.rb +602 -0
  52. data/lib/aws-sdk-code-generator/views/client_class.rb +93 -0
  53. data/lib/aws-sdk-code-generator/views/docstring.rb +27 -0
  54. data/lib/aws-sdk-code-generator/views/errors_module.rb +32 -0
  55. data/lib/aws-sdk-code-generator/views/event_streams_module.rb +149 -0
  56. data/lib/aws-sdk-code-generator/views/features/env.rb +9 -0
  57. data/lib/aws-sdk-code-generator/views/features/smoke.rb +52 -0
  58. data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +26 -0
  59. data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +6 -2
  60. data/lib/aws-sdk-code-generator/views/gemspec.rb +39 -5
  61. data/lib/aws-sdk-code-generator/views/resource_class.rb +122 -0
  62. data/lib/aws-sdk-code-generator/views/root_resource_class.rb +58 -0
  63. data/lib/aws-sdk-code-generator/views/service_module.rb +38 -14
  64. data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +9 -0
  65. data/lib/aws-sdk-code-generator/views/types_module.rb +329 -0
  66. data/lib/aws-sdk-code-generator/views/version.rb +2 -0
  67. data/lib/aws-sdk-code-generator/views/waiters_module.rb +37 -0
  68. data/lib/aws-sdk-code-generator/views.rb +2 -0
  69. data/lib/aws-sdk-code-generator/waiter.rb +95 -0
  70. data/lib/aws-sdk-code-generator/yard_option_tag.rb +43 -0
  71. data/lib/aws-sdk-code-generator.rb +68 -75
  72. data/templates/apig_endpoint_class.mustache +16 -0
  73. data/templates/apig_readme.mustache +62 -0
  74. data/templates/async_client_class.mustache +125 -0
  75. data/templates/authorizer_class.mustache +37 -0
  76. data/templates/client_api_module.mustache +106 -0
  77. data/templates/client_class.mustache +295 -0
  78. data/templates/code.mustache +4 -0
  79. data/templates/documentation.mustache +4 -0
  80. data/templates/errors_module.mustache +70 -0
  81. data/templates/event_streams_module.mustache +76 -0
  82. data/templates/features/env.mustache +15 -0
  83. data/templates/features/smoke.mustache +22 -0
  84. data/templates/features/smoke_step_definitions.mustache +31 -0
  85. data/templates/features/step_definitions.mustache +13 -0
  86. data/templates/gemspec.mustache +31 -0
  87. data/templates/license.txt +202 -0
  88. data/templates/method.mustache +7 -0
  89. data/templates/resource_class.mustache +304 -0
  90. data/templates/root_resource_class.mustache +51 -0
  91. data/templates/service_module.mustache +58 -0
  92. data/templates/spec/spec_helper.mustache +15 -0
  93. data/templates/types_module.mustache +53 -0
  94. data/templates/version.mustache +1 -0
  95. data/templates/waiters_module.mustache +112 -0
  96. metadata +115 -70
  97. data/lib/aws-sdk-code-generator/dsl/access_control_statement.rb +0 -23
  98. data/lib/aws-sdk-code-generator/dsl/attribute_accessor.rb +0 -43
  99. data/lib/aws-sdk-code-generator/dsl/attribute_reader.rb +0 -11
  100. data/lib/aws-sdk-code-generator/dsl/attribute_writer.rb +0 -11
  101. data/lib/aws-sdk-code-generator/dsl/autoload_statement.rb +0 -15
  102. data/lib/aws-sdk-code-generator/dsl/block_param.rb +0 -11
  103. data/lib/aws-sdk-code-generator/dsl/class.rb +0 -27
  104. data/lib/aws-sdk-code-generator/dsl/code_literal.rb +0 -66
  105. data/lib/aws-sdk-code-generator/dsl/code_object.rb +0 -33
  106. data/lib/aws-sdk-code-generator/dsl/docstring.rb +0 -36
  107. data/lib/aws-sdk-code-generator/dsl/eigenclass.rb +0 -15
  108. data/lib/aws-sdk-code-generator/dsl/extend_statement.rb +0 -12
  109. data/lib/aws-sdk-code-generator/dsl/formatter.rb +0 -25
  110. data/lib/aws-sdk-code-generator/dsl/include_statement.rb +0 -17
  111. data/lib/aws-sdk-code-generator/dsl/main.rb +0 -105
  112. data/lib/aws-sdk-code-generator/dsl/method.rb +0 -108
  113. data/lib/aws-sdk-code-generator/dsl/module.rb +0 -167
  114. data/lib/aws-sdk-code-generator/dsl/option_tag.rb +0 -36
  115. data/lib/aws-sdk-code-generator/dsl/param.rb +0 -43
  116. data/lib/aws-sdk-code-generator/dsl/param_list.rb +0 -38
  117. data/lib/aws-sdk-code-generator/dsl/return_tag.rb +0 -19
  118. data/lib/aws-sdk-code-generator/dsl/tag_default.rb +0 -20
  119. data/lib/aws-sdk-code-generator/dsl/tag_docstring.rb +0 -27
  120. data/lib/aws-sdk-code-generator/dsl/tag_type.rb +0 -18
  121. data/lib/aws-sdk-code-generator/generators/client_api_module.rb +0 -334
  122. data/lib/aws-sdk-code-generator/generators/client_class.rb +0 -389
  123. data/lib/aws-sdk-code-generator/generators/client_operation_documentation.rb +0 -166
  124. data/lib/aws-sdk-code-generator/generators/errors_module.rb +0 -25
  125. data/lib/aws-sdk-code-generator/generators/resource/action.rb +0 -88
  126. data/lib/aws-sdk-code-generator/generators/resource/batch_builder.rb +0 -211
  127. data/lib/aws-sdk-code-generator/generators/resource/builder.rb +0 -50
  128. data/lib/aws-sdk-code-generator/generators/resource/client_getter.rb +0 -15
  129. data/lib/aws-sdk-code-generator/generators/resource/client_request.rb +0 -49
  130. data/lib/aws-sdk-code-generator/generators/resource/client_request_docs.rb +0 -97
  131. data/lib/aws-sdk-code-generator/generators/resource/client_request_params.rb +0 -88
  132. data/lib/aws-sdk-code-generator/generators/resource/collection_class.rb +0 -180
  133. data/lib/aws-sdk-code-generator/generators/resource/data_attribute_getter.rb +0 -24
  134. data/lib/aws-sdk-code-generator/generators/resource/data_loaded_method.rb +0 -18
  135. data/lib/aws-sdk-code-generator/generators/resource/data_method.rb +0 -49
  136. data/lib/aws-sdk-code-generator/generators/resource/exists_method.rb +0 -29
  137. data/lib/aws-sdk-code-generator/generators/resource/extract_identifier_method.rb +0 -32
  138. data/lib/aws-sdk-code-generator/generators/resource/has_association.rb +0 -101
  139. data/lib/aws-sdk-code-generator/generators/resource/has_many_association.rb +0 -108
  140. data/lib/aws-sdk-code-generator/generators/resource/identifier_getter.rb +0 -26
  141. data/lib/aws-sdk-code-generator/generators/resource/identifiers_method.rb +0 -28
  142. data/lib/aws-sdk-code-generator/generators/resource/initialize_method.rb +0 -67
  143. data/lib/aws-sdk-code-generator/generators/resource/load_method.rb +0 -65
  144. data/lib/aws-sdk-code-generator/generators/resource/value_source.rb +0 -68
  145. data/lib/aws-sdk-code-generator/generators/resource/waiter_method.rb +0 -61
  146. data/lib/aws-sdk-code-generator/generators/resource_class.rb +0 -325
  147. data/lib/aws-sdk-code-generator/generators/response_structure_example.rb +0 -83
  148. data/lib/aws-sdk-code-generator/generators/root_resource_class.rb +0 -42
  149. data/lib/aws-sdk-code-generator/generators/service_documentation.rb +0 -64
  150. data/lib/aws-sdk-code-generator/generators/shared_example.rb +0 -132
  151. data/lib/aws-sdk-code-generator/generators/structure_type_class.rb +0 -95
  152. data/lib/aws-sdk-code-generator/generators/syntax_example.rb +0 -169
  153. data/lib/aws-sdk-code-generator/generators/types_module.rb +0 -52
  154. data/lib/aws-sdk-code-generator/generators/waiter_class.rb +0 -62
  155. data/lib/aws-sdk-code-generator/generators/waiters_module.rb +0 -20
@@ -1,325 +0,0 @@
1
- require 'set'
2
-
3
- module AwsSdkCodeGenerator
4
- module Generators
5
- class ResourceClass < Dsl::Class
6
-
7
- extend Helper
8
-
9
- # @option options [required, String] :name
10
- # @option options [required, Hash] :resource
11
- # @option options [required, Hash] :api
12
- # @option options [Hash] :paginators
13
- # @option options [Hash] :waiters
14
- # @option options [String] :var_name (underscore(name))
15
- def initialize(options)
16
- @api = options.fetch(:api)
17
- @name = options.fetch(:name)
18
- @resource = options.fetch(:resource)
19
- @paginators = options.fetch(:paginators, nil)
20
- @waiters = options.fetch(:waiters, nil)
21
- @var_name = options.fetch(:var_name, underscore(@name))
22
- super(@name)
23
- build
24
- check_for_method_name_conflicts!
25
- end
26
-
27
- private
28
-
29
- def build
30
- extend_module('Aws::Deprecations')
31
- add(initialize_method)
32
- code('# @!group Read-Only Attributes')
33
- add(*identifier_getters)
34
- add(*data_attribute_getters)
35
- code('# @!endgroup')
36
- add(client_getter)
37
- add(load_method)
38
- add(data_method)
39
- add(data_loaded_method)
40
- add(exists_method)
41
- add(*waiters)
42
- apply_actions
43
- apply_associations
44
- add(identifiers_method)
45
- add(*private_methods)
46
- add(batch_action)
47
- end
48
-
49
- def initialize_method
50
- Generators::Resource::InitializeMethod.new(resource: @resource)
51
- end
52
-
53
- def identifier_getters
54
- identifiers.map do |i|
55
- Generators::Resource::IdentifierGetter.new(identifier: i)
56
- end
57
- end
58
-
59
- def data_attribute_getters
60
- data_attribute_names.map do |member_name, member_ref|
61
- Generators::Resource::DataAttributeGetter.new(
62
- api: @api,
63
- member_name: member_name,
64
- member_ref: member_ref
65
- )
66
- end
67
- end
68
-
69
- def client_getter
70
- Generators::Resource::ClientGetter.new
71
- end
72
-
73
- def load_method
74
- Generators::Resource::LoadMethod.new(
75
- resource_name: @name,
76
- definition: @resource['load']
77
- )
78
- end
79
-
80
- def data_method
81
- Generators::Resource::DataMethod.new(
82
- resource_name: @name,
83
- resource: @resource
84
- )
85
- end
86
-
87
- def data_loaded_method
88
- Generators::Resource::DataLoadedMethod.new
89
- end
90
-
91
- def exists_method
92
- if @resource['waiters'] && @resource['waiters']['Exists']
93
- Generators::Resource::ExistsMethod.new(
94
- resource_name: @name,
95
- resource: @resource,
96
- waiters: @waiters,
97
- )
98
- end
99
- end
100
-
101
- def waiters
102
- (@resource['waiters'] || {}).map do |waiter_name, waiter|
103
- Generators::Resource::WaiterMethod.new(
104
- resource_name: @name,
105
- resource: @resource,
106
- resource_waiter_name: waiter_name,
107
- resource_waiter: waiter,
108
- waiter: @waiters['waiters'][waiter['waiterName']]
109
- )
110
- end
111
- end
112
-
113
- def apply_actions
114
- actions = @resource['actions'] || {}
115
- return if actions.empty?
116
- code('# @!group Actions')
117
- actions.each do |name, action|
118
- add(Resource::Action.new(
119
- api: @api,
120
- name: name,
121
- action: action,
122
- var_name: @var_name,
123
- ))
124
- end
125
- end
126
-
127
- def apply_associations
128
- associations = []
129
- associations += has_associations
130
- associations += has_many_associations
131
-
132
- return if associations.empty?
133
-
134
- code('# @!group Associations')
135
- associations.sort_by(&:name).each do |association_method|
136
- add(association_method)
137
- end
138
- end
139
-
140
- def has_associations
141
- (@resource['has'] || {}).map do |name, has|
142
- Resource::HasAssociation.new(
143
- api: @api,
144
- name: name,
145
- has: has
146
- )
147
- end
148
- end
149
-
150
- def has_many_associations
151
- (@resource['hasMany'] || {}).map do |name, has_many|
152
- Resource::HasManyAssociation.new(
153
- name: name,
154
- has_many: has_many,
155
- api: @api,
156
- paginators: @paginators,
157
- var_name: @var_name,
158
- )
159
- end
160
- end
161
-
162
- def batch_action
163
- Generators::Resource::CollectionClass.new(
164
- resource_name: @name,
165
- resource: @resource,
166
- api: @api,
167
- )
168
- end
169
-
170
- def identifiers_method
171
- Generators::Resource::IdentifiersMethod.new(
172
- identifiers: identifiers
173
- )
174
- end
175
-
176
- def private_methods
177
- methods = []
178
- methods.concat(extract_identifier_methods)
179
- methods << yield_waiter_and_warn_method
180
- methods << separate_params_and_options
181
- methods.compact
182
- end
183
-
184
- def extract_identifier_methods
185
- identifiers.map.with_index do |identifier, n|
186
- Generators::Resource::ExtractIdentifierMethod.new(
187
- identifier: identifier,
188
- index: n
189
- )
190
- end
191
- end
192
-
193
- def identifiers
194
- @resource['identifiers'] || []
195
- end
196
-
197
- def data_attribute_names
198
-
199
- skip = Set.new
200
-
201
- # do no duplicate identifiers
202
- identifiers.each do |i|
203
- skip << i['name']
204
- skip << i['memberName'] if i.key?('memberName')
205
- end
206
-
207
- # do no duplicate action names
208
- (@resource['actions'] || {}).keys.each do |action_name|
209
- skip << action_name
210
- end
211
-
212
- # do no duplicate has association names
213
- (@resource['has'] || {}).keys.each do |association_name|
214
- skip << association_name
215
- end
216
-
217
- # do no duplicate hasMany association names
218
- (@resource['hasMany'] || {}).keys.each do |association_name|
219
- skip << association_name
220
- end
221
-
222
- shape = (@api['shapes'] || {})[@resource['shape']] || {}
223
- members = shape['members'] || {}
224
- Enumerator.new do |y|
225
- members.each do |member_name, member_ref|
226
- unless skip.include?(member_name)
227
- y.yield(member_name, member_ref)
228
- end
229
- end
230
- end
231
- end
232
-
233
- def check_for_method_name_conflicts!
234
-
235
- names = Set.new
236
-
237
- # Ensure the resource does not have duplicate names. This
238
- # includes comparing identifier names, action names, association
239
- # names, e.g. anything that is exposed as a method.
240
- @code_objects.each do |code_obj|
241
- if Dsl::Method === code_obj || Dsl::AttributeAccessor === code_obj
242
- check_for_duplicate_method!(code_obj.name, names)
243
- end
244
- end
245
-
246
- # It is possible for Dsl::Method#aliases to collide with
247
- # code object names. Remove aliases that collide.
248
- @code_objects.each do |code_obj|
249
- if Dsl::Method === code_obj
250
- code_obj.aliases.each do |alias_name|
251
- if names.include?(alias_name.to_s)
252
- code_obj.aliases.delete(alias_name.to_s)
253
- end
254
- end
255
- end
256
- end
257
-
258
- # Compare all resource methods against methods defined
259
- # on Ruby's Object class as an instance method. We need to
260
- # ensure we do not clobber built in Ruby functionality.
261
- Object.instance_methods.each do |obj_method_name|
262
- if names.include?(obj_method_name.to_s)
263
- raise Errors::ResourceMethodConflict.new(
264
- resource_name: @name,
265
- method_name: obj_method_name
266
- )
267
- end
268
- end
269
- end
270
-
271
- def check_for_duplicate_method!(method_name, names)
272
- method_name = method_name.to_s
273
- if names.include?(method_name)
274
- raise Errors::ResourceMethodConflict.new(
275
- resource_name: @name,
276
- method_name: method_name
277
- )
278
- else
279
- names << method_name
280
- end
281
- end
282
-
283
- def yield_waiter_and_warn_method
284
- if @resource['waiters'] && @resource['waiters'].size > 0
285
- Dsl::Method.new(:yield_waiter_and_warn, access: :private) do |m|
286
- m.param(:waiter)
287
- m.block_param
288
- m.code(<<-CODE)
289
- if !@waiter_block_warned
290
- msg = "pass options to configure the waiter; "
291
- msg << "yielding the waiter is deprecated"
292
- warn(msg)
293
- @waiter_block_warned = true
294
- end
295
- yield(waiter.waiter)
296
- CODE
297
- end
298
- end
299
- end
300
-
301
- def separate_params_and_options
302
- if @resource['waiters'] && @resource['waiters'].size > 0
303
- Dsl::Method.new(:separate_params_and_options, access: :private) do |m|
304
- m.param(:options)
305
- m.code(<<-CODE)
306
- opts = Set.new([:client, :max_attempts, :delay, :before_attempt, :before_wait])
307
- waiter_opts = {}
308
- waiter_params = {}
309
- options.each_pair do |key, value|
310
- if opts.include?(key)
311
- waiter_opts[key] = value
312
- else
313
- waiter_params[key] = value
314
- end
315
- end
316
- waiter_opts[:client] ||= @client
317
- [waiter_opts, waiter_params]
318
- CODE
319
- end
320
- end
321
- end
322
-
323
- end
324
- end
325
- end
@@ -1,83 +0,0 @@
1
- require 'set'
2
-
3
- module AwsSdkCodeGenerator
4
- module Generators
5
- class ResponseStructureExample
6
-
7
- include Helper
8
-
9
- # @option options [required, Hash] :shape_ref
10
- # @option options [required, Hash] :api
11
- def initialize(options = {})
12
- @shape_ref = options.fetch(:shape_ref)
13
- @api = options.fetch(:api)
14
- end
15
-
16
- def to_str
17
- "\n@example Response structure\n #{entry(@shape_ref, "resp", Set.new).join("\n ")}"
18
- end
19
- alias to_s to_str
20
-
21
- private
22
-
23
- def structure(ref, context, visited)
24
- lines = []
25
- shape(ref)['members'].each_pair do |member_name, member_ref|
26
- lines += entry(member_ref, "#{context}.#{underscore(member_name)}", visited)
27
- end
28
- lines
29
- end
30
-
31
- def list(ref, context, visited)
32
- lines = []
33
- lines << "#{context} #=> Array"
34
- lines += entry(shape(ref)['member'], "#{context}[0]", visited)
35
- lines
36
- end
37
-
38
- def map(ref, context, visited)
39
- lines = []
40
- lines << "#{context} #=> Hash"
41
- lines += entry(shape(ref)['value'], "#{context}[#{map_key(ref)}]", visited)
42
- lines
43
- end
44
-
45
- def map_key(ref)
46
- shape(ref)['key']['shape'].inspect
47
- end
48
-
49
- def entry(ref, context, visited)
50
- if ref['shape'] == 'AttributeValue'
51
- return ["#{context} #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>"]
52
- elsif visited.include?(ref['shape'])
53
- return ["#{context} #=> Types::#{ref['shape']}"]
54
- else
55
- visited = visited + [ref['shape']]
56
- end
57
- case shape(ref)['type']
58
- when 'structure' then structure(ref, context, visited)
59
- when 'list' then list(ref, context, visited)
60
- when 'map' then map(ref, context, visited)
61
- else ["#{context} #=> #{type(ref)}"]
62
- end
63
- end
64
-
65
- def type(ref)
66
- if shape(ref)['type'] == 'string'
67
- string(ref)
68
- else
69
- ruby_type(ref)
70
- end
71
- end
72
-
73
- def string(ref)
74
- if shape(ref)['enum']
75
- "String, one of #{shape(ref)['enum'].map(&:inspect).join(', ')}"
76
- else
77
- 'String'
78
- end
79
- end
80
-
81
- end
82
- end
83
- end
@@ -1,42 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- class RootResourceClass < ResourceClass
4
-
5
- include Helper
6
-
7
- # @option options [required, Hash] :api
8
- # @option options [required, String] :var_name
9
- # @option options [Hash] :resources
10
- # @option options [Hash] :paginators
11
- def initialize(options)
12
- resources = options.fetch(:resources) || {}
13
- super(
14
- api: options.fetch(:api),
15
- name: 'Resource',
16
- resource: resources.fetch('service', {}),
17
- paginators: options.fetch(:paginators, nil) || {},
18
- waiters:nil,
19
- var_name: options.fetch(:var_name)
20
- )
21
- end
22
-
23
- private
24
-
25
- def build
26
- add(initialize_method)
27
- add(client_getter)
28
- apply_actions
29
- apply_associations
30
- end
31
-
32
- def initialize_method
33
- Dsl::Method.new('initialize') do |m|
34
- m.param('options', default:{})
35
- m.option(name:'client', type:'Client')
36
- m.code('@client = options[:client] || Client.new(options)')
37
- end
38
- end
39
-
40
- end
41
- end
42
- end
@@ -1,64 +0,0 @@
1
- require 'erb'
2
-
3
- module AwsSdkCodeGenerator
4
- module Generators
5
- class ServiceDocumentation
6
-
7
- include Helper
8
-
9
- # @option options [required, Hash] :api
10
- # @option options [required, Hash] :product_name
11
- # @option options [required, Hash] :namespace
12
- def initialize(options = {})
13
- @api = options.fetch(:api)
14
- @product_name = options.fetch(:product_name)
15
- @namespace = options.fetch(:namespace)
16
- @var_name = @namespace.split('::').last.downcase
17
- end
18
-
19
- def docstring
20
- <<-MARKDOWN
21
- @service
22
- This module provides support for #{@product_name}, which shipped in `aws-sdk-#{@var_name}` gem.
23
-
24
- # #{@namespace}::Client
25
-
26
- The {#{@namespace}::Client} class provides one method for each API
27
- operation. Operation methods each accept a hash of request parameters
28
- and return a response object.#{example_operation}
29
-
30
- See {Client} for more information.
31
-
32
- # #{@namespace}::Errors
33
-
34
- Errors returned from #{@product_name} all
35
- extend {Errors::ServiceError}.
36
-
37
- begin
38
- # do stuff
39
- rescue #{@namespace}::Errors::ServiceError
40
- # rescues all service API errors
41
- end
42
-
43
- See {Errors} for more information.
44
- MARKDOWN
45
- end
46
-
47
- def example_operation
48
- if @api['operations'] && @api['operations'].first
49
- <<-EXAMPLE
50
-
51
-
52
- #{@var_name} = #{@namespace}::Client.new
53
- resp = #{@var_name}.#{example_operation_name}(params)
54
- EXAMPLE
55
- end
56
- end
57
-
58
- def example_operation_name
59
- underscore(@api['operations'].keys.first)
60
- end
61
-
62
- end
63
- end
64
- end
@@ -1,132 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- class SharedExample
4
-
5
- include Helper
6
-
7
- # @option options [required, String] :operation_name
8
- # @option options [required, Hash] api
9
- # @option options [required, Hash] examples
10
- # @option options [required, Integer] example
11
- def initialize(options = {})
12
- @operation_name = options.fetch(:operation_name)
13
- @operation = options.fetch(:api)['operations'][@operation_name]
14
- @example = options.fetch(:examples)['examples'][@operation_name][options.fetch(:example)]
15
- @api = options.fetch(:api)
16
- @method_name = underscore(@operation_name)
17
- end
18
-
19
- def to_s
20
- lines = []
21
- lines << ""
22
- lines << "@example Example: #{@example['description']}"
23
- lines << ""
24
- apply_input_example(lines)
25
- apply_output_example(lines)
26
- lines.join("\n")
27
- end
28
-
29
- private
30
-
31
- def apply_input_example(lines)
32
- lines << " resp = client.#{@method_name}(#{input_params})"
33
- end
34
-
35
- def input_params
36
- if @example['input'] && @operation['input']
37
- entry(
38
- @example['input'],
39
- @operation['input'],
40
- indent = ' ',
41
- path = [],
42
- @example['comments']['input']
43
- ).join("\n")
44
- else
45
- ''
46
- end
47
- end
48
-
49
- def apply_output_example(lines)
50
- if @example['output'] && @operation['output']
51
- lines << ""
52
- lines << " # resp.to_h outputs the following:"
53
- lines << " " + entry(
54
- @example['output'],
55
- @operation['output'],
56
- indent = ' ',
57
- path = [],
58
- @example['comments']['output']
59
- ).join("\n")
60
- end
61
- end
62
-
63
- def entry(json, ref, indent, path, comments)
64
- case shape(ref)['type']
65
- when 'structure' then structure(json, ref, indent, path, comments)
66
- when 'map' then map(json, ref, indent, path, comments)
67
- when 'list' then list(json, ref, indent, path, comments)
68
- when 'timestamp' then "Time.parse(#{json.inspect})"
69
- when 'string', 'blob', 'integer', 'long', 'float', 'double', 'boolean'
70
- json.inspect
71
- else
72
- raise ArgumentError, "unhandled type #{shape(ref)['type'].inspect}"
73
- end
74
- end
75
-
76
- def structure(json, ref, indent, path, comments)
77
- lines = ["{"]
78
- json.each_pair do |key, val|
79
- path << ".#{key}"
80
- shape_val = entry(val, shape(ref)['members'][key], "#{indent} ", path, comments)
81
- if shape_val.is_a?(Array)
82
- shape_val = shape_val.join("\n")
83
- end
84
- lines << "#{indent} #{underscore(key)}: #{shape_val},#{comments_for(path, comments)}"
85
- path.pop
86
- end
87
- lines << "#{indent}}"
88
- lines
89
- end
90
-
91
- def map(json, ref, indent, path, comments)
92
- lines = ["{"]
93
- json.each do |key, val|
94
- path << ".#{key}"
95
- shape_val = entry(val, shape(ref)['value'], "#{indent} ", path, comments)
96
- if shape_val.is_a?(Array)
97
- shape_val = shape_val.join("\n")
98
- end
99
- lines << "#{indent} \"#{key}\" => #{shape_val},#{comments_for(path, comments)}"
100
- path.pop
101
- end
102
- lines << "#{indent}}"
103
- lines
104
- end
105
-
106
- def list(json, ref, indent, path, comments)
107
- lines = ["["]
108
- json.each_with_index do |value, index|
109
- path << "[#{index}]"
110
- shape_val = entry(value, shape(ref)['member'], "#{indent} ", path, comments)
111
- if shape_val.is_a?(Array)
112
- shape_val = shape_val.join("\n")
113
- end
114
- lines << "#{indent} #{shape_val},#{comments_for(path, comments)}"
115
- path.pop
116
- end
117
- lines << "#{indent}]"
118
- lines
119
- end
120
-
121
- def comments_for(path, comments)
122
- path = path.join().sub(/^\./, '')
123
- if comments.key?(path)
124
- " # #{comments[path]}"
125
- else
126
- ""
127
- end
128
- end
129
-
130
- end
131
- end
132
- end