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.
- 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
|