aws-sdk-code-generator 0.1.0.pre → 0.2.0.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 (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