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.
- checksums.yaml +5 -5
- data/lib/aws-sdk-code-generator.rb +68 -75
- data/lib/aws-sdk-code-generator/api.rb +130 -0
- data/lib/aws-sdk-code-generator/apply_docs.rb +15 -2
- data/lib/aws-sdk-code-generator/client_constructor.rb +39 -0
- data/lib/aws-sdk-code-generator/client_operation_documentation.rb +268 -0
- data/lib/aws-sdk-code-generator/client_operation_list.rb +148 -0
- data/lib/aws-sdk-code-generator/client_response_structure_example.rb +108 -0
- data/lib/aws-sdk-code-generator/code_builder.rb +146 -133
- data/lib/aws-sdk-code-generator/crosslink.rb +42 -0
- data/lib/aws-sdk-code-generator/docstring.rb +199 -0
- data/lib/aws-sdk-code-generator/error_list.rb +77 -0
- data/lib/aws-sdk-code-generator/errors.rb +2 -0
- data/lib/aws-sdk-code-generator/eventstream_example.rb +220 -0
- data/lib/aws-sdk-code-generator/gem_builder.rb +19 -25
- data/lib/aws-sdk-code-generator/hash_formatter.rb +5 -2
- data/lib/aws-sdk-code-generator/helper.rb +77 -61
- data/lib/aws-sdk-code-generator/plugin_list.rb +146 -0
- data/lib/aws-sdk-code-generator/resource_action.rb +69 -0
- data/lib/aws-sdk-code-generator/resource_action_code.rb +57 -0
- data/lib/aws-sdk-code-generator/resource_association.rb +37 -0
- data/lib/aws-sdk-code-generator/resource_attribute.rb +76 -0
- data/lib/aws-sdk-code-generator/resource_batch_action.rb +56 -0
- data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +136 -0
- data/lib/aws-sdk-code-generator/resource_batch_action_documentation.rb +108 -0
- data/lib/aws-sdk-code-generator/resource_batch_builder.rb +212 -0
- data/lib/aws-sdk-code-generator/resource_builder.rb +48 -0
- data/lib/aws-sdk-code-generator/resource_client_request.rb +62 -0
- data/lib/aws-sdk-code-generator/resource_client_request_documentation.rb +81 -0
- data/lib/aws-sdk-code-generator/resource_client_request_params.rb +86 -0
- data/lib/aws-sdk-code-generator/resource_data_method.rb +60 -0
- data/lib/aws-sdk-code-generator/resource_has_association.rb +117 -0
- data/lib/aws-sdk-code-generator/resource_has_many_association.rb +52 -0
- data/lib/aws-sdk-code-generator/resource_has_many_association_code.rb +76 -0
- data/lib/aws-sdk-code-generator/resource_identifier.rb +44 -0
- data/lib/aws-sdk-code-generator/resource_identifiers_method.rb +29 -0
- data/lib/aws-sdk-code-generator/resource_load_method.rb +68 -0
- data/lib/aws-sdk-code-generator/resource_method.rb +22 -0
- data/lib/aws-sdk-code-generator/resource_skip_params.rb +36 -0
- data/lib/aws-sdk-code-generator/resource_value_source.rb +68 -0
- data/lib/aws-sdk-code-generator/resource_waiter.rb +80 -0
- data/lib/aws-sdk-code-generator/service.rb +30 -7
- data/lib/aws-sdk-code-generator/shared_example.rb +131 -0
- data/lib/aws-sdk-code-generator/syntax_example.rb +60 -0
- data/lib/aws-sdk-code-generator/syntax_example_hash.rb +174 -0
- data/lib/aws-sdk-code-generator/underscore.rb +10 -5
- data/lib/aws-sdk-code-generator/view.rb +33 -0
- data/lib/aws-sdk-code-generator/views.rb +2 -0
- data/lib/aws-sdk-code-generator/views/apig_endpoint_class.rb +25 -0
- data/lib/aws-sdk-code-generator/views/apig_readme.rb +32 -0
- data/lib/aws-sdk-code-generator/views/async_client_class.rb +68 -0
- data/lib/aws-sdk-code-generator/views/authorizer_class.rb +17 -0
- data/lib/aws-sdk-code-generator/views/client_api_module.rb +583 -0
- data/lib/aws-sdk-code-generator/views/client_class.rb +93 -0
- data/lib/aws-sdk-code-generator/views/docstring.rb +27 -0
- data/lib/aws-sdk-code-generator/views/errors_module.rb +32 -0
- data/lib/aws-sdk-code-generator/views/event_streams_module.rb +149 -0
- data/lib/aws-sdk-code-generator/views/features/env.rb +9 -0
- data/lib/aws-sdk-code-generator/views/features/smoke.rb +51 -0
- data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +26 -0
- data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +2 -0
- data/lib/aws-sdk-code-generator/views/gemspec.rb +39 -5
- data/lib/aws-sdk-code-generator/views/resource_class.rb +122 -0
- data/lib/aws-sdk-code-generator/views/root_resource_class.rb +58 -0
- data/lib/aws-sdk-code-generator/views/service_module.rb +30 -14
- data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +9 -0
- data/lib/aws-sdk-code-generator/views/types_module.rb +294 -0
- data/lib/aws-sdk-code-generator/views/version.rb +2 -0
- data/lib/aws-sdk-code-generator/views/waiters_module.rb +37 -0
- data/lib/aws-sdk-code-generator/waiter.rb +95 -0
- data/lib/aws-sdk-code-generator/yard_option_tag.rb +43 -0
- metadata +61 -68
- data/lib/aws-sdk-code-generator/dsl/access_control_statement.rb +0 -23
- data/lib/aws-sdk-code-generator/dsl/attribute_accessor.rb +0 -43
- data/lib/aws-sdk-code-generator/dsl/attribute_reader.rb +0 -11
- data/lib/aws-sdk-code-generator/dsl/attribute_writer.rb +0 -11
- data/lib/aws-sdk-code-generator/dsl/autoload_statement.rb +0 -15
- data/lib/aws-sdk-code-generator/dsl/block_param.rb +0 -11
- data/lib/aws-sdk-code-generator/dsl/class.rb +0 -27
- data/lib/aws-sdk-code-generator/dsl/code_literal.rb +0 -66
- data/lib/aws-sdk-code-generator/dsl/code_object.rb +0 -33
- data/lib/aws-sdk-code-generator/dsl/docstring.rb +0 -36
- data/lib/aws-sdk-code-generator/dsl/eigenclass.rb +0 -15
- data/lib/aws-sdk-code-generator/dsl/extend_statement.rb +0 -12
- data/lib/aws-sdk-code-generator/dsl/formatter.rb +0 -25
- data/lib/aws-sdk-code-generator/dsl/include_statement.rb +0 -17
- data/lib/aws-sdk-code-generator/dsl/main.rb +0 -105
- data/lib/aws-sdk-code-generator/dsl/method.rb +0 -108
- data/lib/aws-sdk-code-generator/dsl/module.rb +0 -167
- data/lib/aws-sdk-code-generator/dsl/option_tag.rb +0 -36
- data/lib/aws-sdk-code-generator/dsl/param.rb +0 -43
- data/lib/aws-sdk-code-generator/dsl/param_list.rb +0 -38
- data/lib/aws-sdk-code-generator/dsl/return_tag.rb +0 -19
- data/lib/aws-sdk-code-generator/dsl/tag_default.rb +0 -20
- data/lib/aws-sdk-code-generator/dsl/tag_docstring.rb +0 -27
- data/lib/aws-sdk-code-generator/dsl/tag_type.rb +0 -18
- data/lib/aws-sdk-code-generator/generators/client_api_module.rb +0 -334
- data/lib/aws-sdk-code-generator/generators/client_class.rb +0 -389
- data/lib/aws-sdk-code-generator/generators/client_operation_documentation.rb +0 -166
- data/lib/aws-sdk-code-generator/generators/errors_module.rb +0 -25
- data/lib/aws-sdk-code-generator/generators/resource/action.rb +0 -88
- data/lib/aws-sdk-code-generator/generators/resource/batch_builder.rb +0 -211
- data/lib/aws-sdk-code-generator/generators/resource/builder.rb +0 -50
- data/lib/aws-sdk-code-generator/generators/resource/client_getter.rb +0 -15
- data/lib/aws-sdk-code-generator/generators/resource/client_request.rb +0 -49
- data/lib/aws-sdk-code-generator/generators/resource/client_request_docs.rb +0 -97
- data/lib/aws-sdk-code-generator/generators/resource/client_request_params.rb +0 -88
- data/lib/aws-sdk-code-generator/generators/resource/collection_class.rb +0 -180
- data/lib/aws-sdk-code-generator/generators/resource/data_attribute_getter.rb +0 -24
- data/lib/aws-sdk-code-generator/generators/resource/data_loaded_method.rb +0 -18
- data/lib/aws-sdk-code-generator/generators/resource/data_method.rb +0 -49
- data/lib/aws-sdk-code-generator/generators/resource/exists_method.rb +0 -29
- data/lib/aws-sdk-code-generator/generators/resource/extract_identifier_method.rb +0 -32
- data/lib/aws-sdk-code-generator/generators/resource/has_association.rb +0 -101
- data/lib/aws-sdk-code-generator/generators/resource/has_many_association.rb +0 -108
- data/lib/aws-sdk-code-generator/generators/resource/identifier_getter.rb +0 -26
- data/lib/aws-sdk-code-generator/generators/resource/identifiers_method.rb +0 -28
- data/lib/aws-sdk-code-generator/generators/resource/initialize_method.rb +0 -67
- data/lib/aws-sdk-code-generator/generators/resource/load_method.rb +0 -65
- data/lib/aws-sdk-code-generator/generators/resource/value_source.rb +0 -68
- data/lib/aws-sdk-code-generator/generators/resource/waiter_method.rb +0 -61
- data/lib/aws-sdk-code-generator/generators/resource_class.rb +0 -325
- data/lib/aws-sdk-code-generator/generators/response_structure_example.rb +0 -83
- data/lib/aws-sdk-code-generator/generators/root_resource_class.rb +0 -42
- data/lib/aws-sdk-code-generator/generators/service_documentation.rb +0 -64
- data/lib/aws-sdk-code-generator/generators/shared_example.rb +0 -132
- data/lib/aws-sdk-code-generator/generators/structure_type_class.rb +0 -95
- data/lib/aws-sdk-code-generator/generators/syntax_example.rb +0 -169
- data/lib/aws-sdk-code-generator/generators/types_module.rb +0 -52
- data/lib/aws-sdk-code-generator/generators/waiter_class.rb +0 -62
- 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,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
|