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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +5 -5
  2. data/lib/aws-sdk-code-generator.rb +68 -75
  3. data/lib/aws-sdk-code-generator/api.rb +130 -0
  4. data/lib/aws-sdk-code-generator/apply_docs.rb +15 -2
  5. data/lib/aws-sdk-code-generator/client_constructor.rb +39 -0
  6. data/lib/aws-sdk-code-generator/client_operation_documentation.rb +268 -0
  7. data/lib/aws-sdk-code-generator/client_operation_list.rb +148 -0
  8. data/lib/aws-sdk-code-generator/client_response_structure_example.rb +108 -0
  9. data/lib/aws-sdk-code-generator/code_builder.rb +146 -133
  10. data/lib/aws-sdk-code-generator/crosslink.rb +42 -0
  11. data/lib/aws-sdk-code-generator/docstring.rb +199 -0
  12. data/lib/aws-sdk-code-generator/error_list.rb +77 -0
  13. data/lib/aws-sdk-code-generator/errors.rb +2 -0
  14. data/lib/aws-sdk-code-generator/eventstream_example.rb +220 -0
  15. data/lib/aws-sdk-code-generator/gem_builder.rb +19 -25
  16. data/lib/aws-sdk-code-generator/hash_formatter.rb +5 -2
  17. data/lib/aws-sdk-code-generator/helper.rb +77 -61
  18. data/lib/aws-sdk-code-generator/plugin_list.rb +146 -0
  19. data/lib/aws-sdk-code-generator/resource_action.rb +69 -0
  20. data/lib/aws-sdk-code-generator/resource_action_code.rb +57 -0
  21. data/lib/aws-sdk-code-generator/resource_association.rb +37 -0
  22. data/lib/aws-sdk-code-generator/resource_attribute.rb +76 -0
  23. data/lib/aws-sdk-code-generator/resource_batch_action.rb +56 -0
  24. data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +136 -0
  25. data/lib/aws-sdk-code-generator/resource_batch_action_documentation.rb +108 -0
  26. data/lib/aws-sdk-code-generator/resource_batch_builder.rb +212 -0
  27. data/lib/aws-sdk-code-generator/resource_builder.rb +48 -0
  28. data/lib/aws-sdk-code-generator/resource_client_request.rb +62 -0
  29. data/lib/aws-sdk-code-generator/resource_client_request_documentation.rb +81 -0
  30. data/lib/aws-sdk-code-generator/resource_client_request_params.rb +86 -0
  31. data/lib/aws-sdk-code-generator/resource_data_method.rb +60 -0
  32. data/lib/aws-sdk-code-generator/resource_has_association.rb +117 -0
  33. data/lib/aws-sdk-code-generator/resource_has_many_association.rb +52 -0
  34. data/lib/aws-sdk-code-generator/resource_has_many_association_code.rb +76 -0
  35. data/lib/aws-sdk-code-generator/resource_identifier.rb +44 -0
  36. data/lib/aws-sdk-code-generator/resource_identifiers_method.rb +29 -0
  37. data/lib/aws-sdk-code-generator/resource_load_method.rb +68 -0
  38. data/lib/aws-sdk-code-generator/resource_method.rb +22 -0
  39. data/lib/aws-sdk-code-generator/resource_skip_params.rb +36 -0
  40. data/lib/aws-sdk-code-generator/resource_value_source.rb +68 -0
  41. data/lib/aws-sdk-code-generator/resource_waiter.rb +80 -0
  42. data/lib/aws-sdk-code-generator/service.rb +30 -7
  43. data/lib/aws-sdk-code-generator/shared_example.rb +131 -0
  44. data/lib/aws-sdk-code-generator/syntax_example.rb +60 -0
  45. data/lib/aws-sdk-code-generator/syntax_example_hash.rb +174 -0
  46. data/lib/aws-sdk-code-generator/underscore.rb +10 -5
  47. data/lib/aws-sdk-code-generator/view.rb +33 -0
  48. data/lib/aws-sdk-code-generator/views.rb +2 -0
  49. data/lib/aws-sdk-code-generator/views/apig_endpoint_class.rb +25 -0
  50. data/lib/aws-sdk-code-generator/views/apig_readme.rb +32 -0
  51. data/lib/aws-sdk-code-generator/views/async_client_class.rb +68 -0
  52. data/lib/aws-sdk-code-generator/views/authorizer_class.rb +17 -0
  53. data/lib/aws-sdk-code-generator/views/client_api_module.rb +583 -0
  54. data/lib/aws-sdk-code-generator/views/client_class.rb +93 -0
  55. data/lib/aws-sdk-code-generator/views/docstring.rb +27 -0
  56. data/lib/aws-sdk-code-generator/views/errors_module.rb +32 -0
  57. data/lib/aws-sdk-code-generator/views/event_streams_module.rb +149 -0
  58. data/lib/aws-sdk-code-generator/views/features/env.rb +9 -0
  59. data/lib/aws-sdk-code-generator/views/features/smoke.rb +51 -0
  60. data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +26 -0
  61. data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +2 -0
  62. data/lib/aws-sdk-code-generator/views/gemspec.rb +39 -5
  63. data/lib/aws-sdk-code-generator/views/resource_class.rb +122 -0
  64. data/lib/aws-sdk-code-generator/views/root_resource_class.rb +58 -0
  65. data/lib/aws-sdk-code-generator/views/service_module.rb +30 -14
  66. data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +9 -0
  67. data/lib/aws-sdk-code-generator/views/types_module.rb +294 -0
  68. data/lib/aws-sdk-code-generator/views/version.rb +2 -0
  69. data/lib/aws-sdk-code-generator/views/waiters_module.rb +37 -0
  70. data/lib/aws-sdk-code-generator/waiter.rb +95 -0
  71. data/lib/aws-sdk-code-generator/yard_option_tag.rb +43 -0
  72. metadata +61 -68
  73. data/lib/aws-sdk-code-generator/dsl/access_control_statement.rb +0 -23
  74. data/lib/aws-sdk-code-generator/dsl/attribute_accessor.rb +0 -43
  75. data/lib/aws-sdk-code-generator/dsl/attribute_reader.rb +0 -11
  76. data/lib/aws-sdk-code-generator/dsl/attribute_writer.rb +0 -11
  77. data/lib/aws-sdk-code-generator/dsl/autoload_statement.rb +0 -15
  78. data/lib/aws-sdk-code-generator/dsl/block_param.rb +0 -11
  79. data/lib/aws-sdk-code-generator/dsl/class.rb +0 -27
  80. data/lib/aws-sdk-code-generator/dsl/code_literal.rb +0 -66
  81. data/lib/aws-sdk-code-generator/dsl/code_object.rb +0 -33
  82. data/lib/aws-sdk-code-generator/dsl/docstring.rb +0 -36
  83. data/lib/aws-sdk-code-generator/dsl/eigenclass.rb +0 -15
  84. data/lib/aws-sdk-code-generator/dsl/extend_statement.rb +0 -12
  85. data/lib/aws-sdk-code-generator/dsl/formatter.rb +0 -25
  86. data/lib/aws-sdk-code-generator/dsl/include_statement.rb +0 -17
  87. data/lib/aws-sdk-code-generator/dsl/main.rb +0 -105
  88. data/lib/aws-sdk-code-generator/dsl/method.rb +0 -108
  89. data/lib/aws-sdk-code-generator/dsl/module.rb +0 -167
  90. data/lib/aws-sdk-code-generator/dsl/option_tag.rb +0 -36
  91. data/lib/aws-sdk-code-generator/dsl/param.rb +0 -43
  92. data/lib/aws-sdk-code-generator/dsl/param_list.rb +0 -38
  93. data/lib/aws-sdk-code-generator/dsl/return_tag.rb +0 -19
  94. data/lib/aws-sdk-code-generator/dsl/tag_default.rb +0 -20
  95. data/lib/aws-sdk-code-generator/dsl/tag_docstring.rb +0 -27
  96. data/lib/aws-sdk-code-generator/dsl/tag_type.rb +0 -18
  97. data/lib/aws-sdk-code-generator/generators/client_api_module.rb +0 -334
  98. data/lib/aws-sdk-code-generator/generators/client_class.rb +0 -389
  99. data/lib/aws-sdk-code-generator/generators/client_operation_documentation.rb +0 -166
  100. data/lib/aws-sdk-code-generator/generators/errors_module.rb +0 -25
  101. data/lib/aws-sdk-code-generator/generators/resource/action.rb +0 -88
  102. data/lib/aws-sdk-code-generator/generators/resource/batch_builder.rb +0 -211
  103. data/lib/aws-sdk-code-generator/generators/resource/builder.rb +0 -50
  104. data/lib/aws-sdk-code-generator/generators/resource/client_getter.rb +0 -15
  105. data/lib/aws-sdk-code-generator/generators/resource/client_request.rb +0 -49
  106. data/lib/aws-sdk-code-generator/generators/resource/client_request_docs.rb +0 -97
  107. data/lib/aws-sdk-code-generator/generators/resource/client_request_params.rb +0 -88
  108. data/lib/aws-sdk-code-generator/generators/resource/collection_class.rb +0 -180
  109. data/lib/aws-sdk-code-generator/generators/resource/data_attribute_getter.rb +0 -24
  110. data/lib/aws-sdk-code-generator/generators/resource/data_loaded_method.rb +0 -18
  111. data/lib/aws-sdk-code-generator/generators/resource/data_method.rb +0 -49
  112. data/lib/aws-sdk-code-generator/generators/resource/exists_method.rb +0 -29
  113. data/lib/aws-sdk-code-generator/generators/resource/extract_identifier_method.rb +0 -32
  114. data/lib/aws-sdk-code-generator/generators/resource/has_association.rb +0 -101
  115. data/lib/aws-sdk-code-generator/generators/resource/has_many_association.rb +0 -108
  116. data/lib/aws-sdk-code-generator/generators/resource/identifier_getter.rb +0 -26
  117. data/lib/aws-sdk-code-generator/generators/resource/identifiers_method.rb +0 -28
  118. data/lib/aws-sdk-code-generator/generators/resource/initialize_method.rb +0 -67
  119. data/lib/aws-sdk-code-generator/generators/resource/load_method.rb +0 -65
  120. data/lib/aws-sdk-code-generator/generators/resource/value_source.rb +0 -68
  121. data/lib/aws-sdk-code-generator/generators/resource/waiter_method.rb +0 -61
  122. data/lib/aws-sdk-code-generator/generators/resource_class.rb +0 -325
  123. data/lib/aws-sdk-code-generator/generators/response_structure_example.rb +0 -83
  124. data/lib/aws-sdk-code-generator/generators/root_resource_class.rb +0 -42
  125. data/lib/aws-sdk-code-generator/generators/service_documentation.rb +0 -64
  126. data/lib/aws-sdk-code-generator/generators/shared_example.rb +0 -132
  127. data/lib/aws-sdk-code-generator/generators/structure_type_class.rb +0 -95
  128. data/lib/aws-sdk-code-generator/generators/syntax_example.rb +0 -169
  129. data/lib/aws-sdk-code-generator/generators/types_module.rb +0 -52
  130. data/lib/aws-sdk-code-generator/generators/waiter_class.rb +0 -62
  131. data/lib/aws-sdk-code-generator/generators/waiters_module.rb +0 -20
@@ -1,25 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- class ErrorsModule < Dsl::Module
4
-
5
- include Helper
6
-
7
- def initialize(options)
8
- @api = options.fetch(:api)
9
- super('Errors')
10
- self.extend('Aws::Errors::DynamicErrors')
11
- self.class('ResourceNotLoadable', extends: 'RuntimeError') do |c|
12
- c.docstring(<<-DOCSTRING)
13
- Raised when calling #load or #data on a resource class that can not be
14
- loaded. This can happen when:
15
-
16
- * A resource class has identifiers, but no data attributes.
17
- * Resource data is only available when making an API call that
18
- enumerates all resources of that type.
19
- DOCSTRING
20
- end
21
- end
22
-
23
- end
24
- end
25
- end
@@ -1,88 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class Action < Dsl::Method
5
-
6
- include Helper
7
-
8
- # @option options [required, String] :name
9
- # @option options [required, Hash] :action
10
- # @option options [required, Hash] :api
11
- # @option options [String] :var_name ('')
12
- def initialize(options = {})
13
- @api = options.fetch(:api)
14
- @request = options.fetch(:action).fetch('request')
15
- @resource = options.fetch(:action).fetch('resource', nil)
16
- @var_name = options.fetch(:var_name, '')
17
- super(underscore(options.fetch(:name)))
18
- param('options', type:Hash, default:{})
19
- apply_client_request_docs
20
- apply_response
21
- apply_return_tag
22
- end
23
-
24
- private
25
-
26
- def apply_client_request_docs
27
- ClientRequestDocs.new(
28
- request: @request,
29
- api: @api,
30
- var_name: @var_name,
31
- returns: @resource ? @resource['type'].downcase : nil
32
- ).apply(self)
33
- end
34
-
35
- def apply_response
36
- if @resource && batch?(@resource)
37
- code('batch = []')
38
- add(client_request)
39
- code(BatchBuilder.new(resource: @resource))
40
- code("#{resource_type}::Collection.new([batch], size: batch.size)")
41
- elsif @resource
42
- add(client_request)
43
- code(Builder.new(resource: @resource, request_made: true))
44
- else
45
- add(client_request)
46
- code('resp.data')
47
- end
48
- end
49
-
50
- def client_request
51
- ClientRequest.new(
52
- request: @request,
53
- resp: true
54
- )
55
- end
56
-
57
- def apply_return_tag
58
- if @resource && batch?(@resource)
59
- returns("#{resource_type}::Collection")
60
- elsif @resource
61
- returns(resource_type)
62
- else
63
- returns(request_return_type)
64
- end
65
- end
66
-
67
- def resource_type
68
- @resource['type']
69
- end
70
-
71
- def request_return_type
72
- operation = @api['operations'][@request['operation']]
73
- if operation['output']
74
- "Types::#{operation['output']['shape']}"
75
- else
76
- 'EmptyStructure'
77
- end
78
- end
79
-
80
- def batch?(resource)
81
- paths = (@resource['identifiers'] || []).map {|i| i['path'] }
82
- paths << @resource['path']
83
- paths.compact.any? { |path| path.match(/\[/) }
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,211 +0,0 @@
1
- require 'set'
2
-
3
- module AwsSdkCodeGenerator
4
- module Generators
5
- module Resource
6
- class BatchBuilder < Dsl::CodeLiteral
7
-
8
- include Helper
9
-
10
- # @option options [required, Hash] :resource
11
- # @option options [String] :resp_var_name ('resp')
12
- def initialize(options)
13
- @resource = options.fetch(:resource)
14
- @resp_var_name = options.fetch(:resp_var_name, 'resp')
15
- verify_resource!
16
- @context = loop_context
17
- super()
18
-
19
- # create nested blocks from each loop expression
20
- stack = [self]
21
- loops.each do |loop_expression|
22
- stack.last.append(loop_expression)
23
- stack << stack.last.indent
24
- end
25
-
26
- # add resource to the batch
27
- stack.last.append("batch << #{resource_class}.new(#{constructor_args})")
28
-
29
- # add closing end tags
30
- stack.pop
31
- stack.each { |c| c.append('end') }
32
- end
33
-
34
- private
35
-
36
- def resource_class
37
- @resource['type']
38
- end
39
-
40
- def constructor_args
41
- hash = {}
42
- hash.update(identifiers)
43
- hash[:data] = data_path if @resource['path']
44
- hash[:client] = "@client"
45
- HashFormatter.new(wrap:false, inline:true).format(hash)
46
- end
47
-
48
- def identifiers
49
- (@resource['identifiers'] || []).inject({}) do |hash, identifier|
50
- value = relative_identifier_path(identifier)
51
- hash[underscore(identifier['target']).to_sym] = value
52
- hash
53
- end
54
- end
55
-
56
- def data_path
57
- relative_identifier_path({
58
- 'source' => 'data',
59
- 'path' => @resource['path'],
60
- })
61
- end
62
-
63
- def relative_identifier_path(identifier)
64
- path = identifier['path']
65
- if path && path.include?('[]')
66
- prefix = loops.last.match(/\|(.+)\|/)[1]
67
- suffix = underscore(path[common_prefix.length..-1])
68
- if @context == :options
69
- suffix = suffix.gsub(/\.\w+/) { |word| "[:#{word[1..-1]}]" }
70
- end
71
- suffix.length == 0 ? prefix : prefix + suffix
72
- else
73
- ValueSource.new(identifier).to_s
74
- end
75
- end
76
-
77
- def common_prefix
78
- paths = plural_paths
79
- if paths.empty?
80
- ''
81
- elsif paths.size == 1
82
- # grab everything upto and including the final []
83
- paths.first.match(/(.+\[\]).*?$/)[1]
84
- else
85
- prefix = find_prefix(paths)
86
- prefix = prefix.sub(/\[\].+?$/, '[]')
87
- if prefix[-2..-1] != '[]'
88
- msg = 'response paths must have a common prefix ending in [], got :'
89
- msg << paths.inspect
90
- raise ArgumentError, msg
91
- else
92
- prefix
93
- end
94
- end
95
- end
96
-
97
- def find_prefix(paths)
98
- prefix = ''
99
- loop.with_index do |_, n|
100
- return prefix if paths.empty?
101
- letter = paths[0][n]
102
- paths.each do |path|
103
- return prefix if path[n].nil?
104
- return prefix if path[n] != letter
105
- end
106
- prefix += letter
107
- end
108
- end
109
-
110
- def loops
111
- loop_var =
112
- case @context
113
- when :data then 'data.'
114
- when :options then 'options'
115
- when :response then "#{@resp_var_name}.data."
116
- end
117
-
118
- used_vars = Set.new
119
- used_vars << loop_var
120
-
121
- parts = common_prefix.split('[]')
122
- parts = parts.map.with_index do |part,n|
123
- part = underscore(part)
124
- if @context == :options
125
- part = part.gsub(/\w+/) { |word| "[:#{word}]" }
126
- part = part.gsub(/\./, '')
127
- end
128
- part = "#{loop_var}#{part}"
129
- loop_var = loop_letter(part, used_vars)
130
- part = part + ".each do |#{loop_var}|"
131
- part
132
- end
133
- parts
134
- end
135
-
136
- def loop_letter(str, used_vars)
137
- letter = if @context == :options
138
- str.scan(/:\w/).last[1]
139
- else
140
- str.split('.').last[0]
141
- end
142
- n = 1
143
- var = letter
144
- while used_vars.include?(var)
145
- n += 1
146
- var = "#{letter}#{n}"
147
- end
148
- used_vars << var
149
- var
150
- end
151
-
152
- def all_plural_paths
153
- paths = {}
154
- @resource['identifiers'].each do |i|
155
- if i['path'] && i['path'].include?('[]')
156
- paths[i['source']] ||= []
157
- paths[i['source']] << i['path']
158
- end
159
- end
160
- #if @resource['path'] && @resource['path'].include?('[]')
161
- # type = @context == :data ? 'data' : 'response'
162
- # paths[type] ||= []
163
- # paths[type] << @resource['path']
164
- #end
165
- paths
166
- end
167
-
168
- def plural_paths
169
- all_plural_paths.values.first
170
- end
171
-
172
- def verify_resource!
173
- verify_plural_paths!
174
- end
175
-
176
- def verify_plural_paths!
177
- paths = all_plural_paths
178
- case paths.size
179
- when 0
180
- msg = 'expected at least one plural identifier path, got none'
181
- raise ArgumentError, msg
182
- when 1
183
- case paths.keys.first
184
- when 'requestParameter'
185
- when 'response'
186
- when 'data'
187
- else
188
- msg = "unsupported identifier source #{paths.keys.first.inspect}"
189
- raise ArgumentError, msg
190
- end
191
- else
192
- msg = 'mixing plural source types is not supported'
193
- raise ArgumentError, msg
194
- end
195
- end
196
-
197
- def loop_context
198
- case all_plural_paths.keys
199
- when ['response'] then :response
200
- when ['data'] then :data
201
- when ['requestParameter'] then :options
202
- else
203
- msg = "unable to determine loop context: #{@resource.inspect}"
204
- raise msg
205
- end
206
- end
207
-
208
- end
209
- end
210
- end
211
- end
@@ -1,50 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class Builder < Dsl::CodeLiteral
5
-
6
- include Helper
7
-
8
- # @option options [required, Hash] :resource
9
- # @option options [required, Boolean] :request_made
10
- def initialize(options = {})
11
- super()
12
- @resource = options.fetch(:resource)
13
- @request_made = options.fetch(:request_made)
14
- append("#{resource_class}.new(#{constructor_options})")
15
- end
16
-
17
- private
18
-
19
- def resource_class
20
- @resource['type']
21
- end
22
-
23
- def constructor_options
24
- options = {}
25
- options.update(identifiers)
26
- options[:data] = data_path if @resource['path']
27
- options[:client] = "@client"
28
- HashFormatter.new(wrap:false, inline:true).format(options)
29
- end
30
-
31
- def identifiers
32
- (@resource['identifiers'] || []).inject({}) do |hash, identifier|
33
- value = ValueSource.new(identifier).to_s
34
- hash[underscore(identifier['target']).to_sym] = value
35
- hash
36
- end
37
- end
38
-
39
- def data_path
40
- if @request_made
41
- ValueSource.new('source' => 'response', 'path' => @resource['path'])
42
- else
43
- ValueSource.new('source' => 'data', 'path' => @resource['path'])
44
- end
45
- end
46
-
47
- end
48
- end
49
- end
50
- end
@@ -1,15 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class ClientGetter < Dsl::Method
5
-
6
- def initialize
7
- super('client')
8
- returns('Client')
9
- code('@client')
10
- end
11
-
12
- end
13
- end
14
- end
15
- end
@@ -1,49 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class ClientRequest < Dsl::CodeLiteral
5
-
6
- include Helper
7
-
8
- # @option options [required, Hash] :request
9
- # @option options [Boolean] :resp (false)
10
- # @option options [Boolean] :merge (true)
11
- def initialize(options = {})
12
- @request = options.fetch(:request)
13
- @params = ClientRequestParams.new(params: @request['params'])
14
- @resp = options.fetch(:resp, false)
15
- if options.fetch(:merge, true)
16
- super("#{request_options}#{assignement}@client.#{operation_name}(options)")
17
- else
18
- super("#{assignement}@client.#{operation_name}#{params}")
19
- end
20
- end
21
-
22
- private
23
-
24
- def request_options
25
- if @params.empty?
26
- ''
27
- elsif @params.simple?
28
- "options = options.merge(#{@params})\n"
29
- else
30
- "options = Aws::Util.deep_merge(options, #{@params})\n"
31
- end
32
- end
33
-
34
- def params
35
- @params.empty? ? @params : "(#{@params})"
36
- end
37
-
38
- def assignement
39
- "resp = " if @resp
40
- end
41
-
42
- def operation_name
43
- underscore(@request['operation'])
44
- end
45
-
46
- end
47
- end
48
- end
49
- end
@@ -1,97 +0,0 @@
1
- require 'set'
2
-
3
- module AwsSdkCodeGenerator
4
- module Generators
5
- module Resource
6
- class ClientRequestDocs
7
-
8
- include Helper
9
-
10
- # @option options [required, Hash] :api
11
- # @option options [required, Hash] :request
12
- # @option options [Array<String>] :skip ([])
13
- # @option options [required, String] :var_name
14
- # @option options [required, String] :returns
15
- def initialize(options)
16
- @api = options.fetch(:api)
17
- @request = options.fetch(:request)
18
- @skip = Set.new(options.fetch(:skip, []))
19
- @var_name = options.fetch(:var_name)
20
- @returns = options.fetch(:returns)
21
- end
22
-
23
- # @param [Dsl::Method] method
24
- def apply(method)
25
- apply_request_syntax_example(method)
26
- apply_option_tags(method)
27
- end
28
-
29
- private
30
-
31
- def apply_option_tags(method)
32
- input_members.each do |member_name, member_ref, required|
33
- method.option(
34
- name: underscore(member_name),
35
- type: ruby_input_type(member_ref),
36
- required: required,
37
- docstring: documentation(member_ref)
38
- )
39
- end
40
- end
41
-
42
- def apply_request_syntax_example(method)
43
- if input_shape
44
- syntax = SyntaxExample.new(
45
- struct_shape: input_shape,
46
- api: @api,
47
- indent: ' '
48
- ).format.strip
49
- method.docstring.append("@example Request syntax with placeholder values")
50
- if @returns
51
- method.docstring.append("\n #{@returns} = #{@var_name}.#{method.name}(#{syntax})")
52
- else
53
- method.docstring.append("\n #{@var_name}.#{method.name}(#{syntax})")
54
- end
55
- end
56
- end
57
-
58
- def input_members
59
- if input_shape
60
- Enumerator.new do |y|
61
- input_shape['members'].each_pair do |member_name, member_ref|
62
- required = (input_shape['required'] || []).include?(member_name)
63
- y.yield(member_name, member_ref, required)
64
- end
65
- end
66
- else
67
- []
68
- end
69
- end
70
-
71
- def operation
72
- @api['operations'][@request['operation']]
73
- end
74
-
75
- def input_shape
76
- struct = shape(operation['input'])
77
- if struct
78
- struct = deep_copy(struct)
79
- struct['members'].keys.each do |member_name|
80
- struct['members'].delete(member_name) if request_param?(member_name)
81
- struct['members'].delete(member_name) if @skip.include?(member_name)
82
- end
83
- end
84
- struct
85
- end
86
-
87
- def request_param?(member_name)
88
- params = @request['params'] || []
89
- params.any? do |param|
90
- param['target'].match(/^#{member_name}\b/) && !(param['target'].include?('[') && param['target'].include?('.'))
91
- end
92
- end
93
-
94
- end
95
- end
96
- end
97
- end