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,389 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
require 'pp'
|
3
|
-
require 'seahorse/client/plugin'
|
4
|
-
|
5
|
-
module AwsSdkCodeGenerator
|
6
|
-
module Generators
|
7
|
-
class ClientClass < Dsl::Class
|
8
|
-
|
9
|
-
include Helper
|
10
|
-
|
11
|
-
# @option options [required, Main, Module] :parent
|
12
|
-
# @option options [required, String] :identifier
|
13
|
-
# @option options [required, Hash] :api
|
14
|
-
# @option options [required, Hash, nil] :waiters
|
15
|
-
# @option options [required, Hash, nil] :examples
|
16
|
-
# @option options [Hash] :add_plugins ({})
|
17
|
-
# @option options [Array<String>] :remove_plugins ([])
|
18
|
-
def initialize(options)
|
19
|
-
@identifier = options.fetch(:identifier)
|
20
|
-
@api = options.fetch(:api)
|
21
|
-
@waiters = options.fetch(:waiters)
|
22
|
-
@examples = options.fetch(:examples)
|
23
|
-
@add_plugins = options.fetch(:add_plugins, {})
|
24
|
-
@remove_plugins = options.fetch(:remove_plugins, [])
|
25
|
-
@gem_name = options.fetch(:gem_name, nil)
|
26
|
-
@gem_version = options.fetch(:gem_version, nil)
|
27
|
-
super('Client', extends: 'Seahorse::Client::Base', parent: options.fetch(:parent))
|
28
|
-
apply_modules(self)
|
29
|
-
apply_identifier(self)
|
30
|
-
apply_api(self)
|
31
|
-
apply_plugins(self)
|
32
|
-
apply_initialize_method(self)
|
33
|
-
top("\nAws::Plugins::GlobalConfiguration.add_identifier(:#{@identifier})")
|
34
|
-
apply_operations(self)
|
35
|
-
apply_waiter_methods(self)
|
36
|
-
eigenclass do |eigenclass|
|
37
|
-
eigenclass.attr_reader('identifier', api_private: true)
|
38
|
-
eigenclass.method('errors_module', api_private: true) do |m|
|
39
|
-
m.code('Errors')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def client_plugins
|
47
|
-
@client_plugins ||= begin
|
48
|
-
plugins = {}
|
49
|
-
plugins.update(default_plugins)
|
50
|
-
plugins.update(signature_plugins)
|
51
|
-
plugins.update(protocol_plugins(@api['metadata']['protocol']))
|
52
|
-
plugins.update(@add_plugins)
|
53
|
-
@remove_plugins.each do |plugin_name|
|
54
|
-
plugins.delete(plugin_name)
|
55
|
-
end
|
56
|
-
plugins.map do |class_name, path|
|
57
|
-
path = "./#{path}" unless path[0] == '/'
|
58
|
-
Kernel.require(path)
|
59
|
-
ClientPlugin.new(
|
60
|
-
class_name: class_name,
|
61
|
-
options: const_get(class_name).options,
|
62
|
-
path: path)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def const_get(class_name)
|
68
|
-
const_names = class_name.split('::')
|
69
|
-
const_names.inject(Kernel) do |const, const_name|
|
70
|
-
const.const_get(const_name)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def documented_plugin_options
|
75
|
-
client_plugins.map(&:options).flatten.select(&:documented?).sort_by do |opt|
|
76
|
-
[opt.required ? 'a' : 'b', opt.name]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def apply_modules(klass)
|
81
|
-
klass.include('Aws::ClientStubs')
|
82
|
-
end
|
83
|
-
|
84
|
-
def apply_identifier(klass)
|
85
|
-
klass.code do |c|
|
86
|
-
c << "@identifier = :#{@identifier}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def apply_api(klass)
|
91
|
-
klass.code("set_api(ClientApi::API)")
|
92
|
-
end
|
93
|
-
|
94
|
-
def apply_plugins(klass)
|
95
|
-
klass.code do |c|
|
96
|
-
client_plugins.each do |plugin|
|
97
|
-
klass.top("require '#{plugin.require_path}'")
|
98
|
-
c << "add_plugin(#{plugin.class_name})"
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def apply_initialize_method(klass)
|
104
|
-
klass.method(:initialize) do |m|
|
105
|
-
documented_plugin_options.each do |option|
|
106
|
-
m.option(
|
107
|
-
name: option.name,
|
108
|
-
type: option.doc_type,
|
109
|
-
required: option.required,
|
110
|
-
default: option.doc_default,
|
111
|
-
docstring: option.docstring
|
112
|
-
)
|
113
|
-
end
|
114
|
-
m.param('*args')
|
115
|
-
m.code('super')
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def apply_operations(klass)
|
120
|
-
code('# @!group API Operations')
|
121
|
-
(@api['operations'] || {}).each do |operation_name, operation|
|
122
|
-
method_name = underscore(operation_name)
|
123
|
-
klass.method(method_name) do |m|
|
124
|
-
ClientOperationDocumentation.apply(
|
125
|
-
api: @api,
|
126
|
-
service_identifier: @identifier,
|
127
|
-
operation_name: operation_name,
|
128
|
-
operation: operation,
|
129
|
-
examples: @examples,
|
130
|
-
method: m
|
131
|
-
)
|
132
|
-
m.param('params', type: Hash, default: {})
|
133
|
-
m.param('options', type: Hash, default: {}, documented: false)
|
134
|
-
m.code do |c|
|
135
|
-
c << "req = build_request(:#{method_name}, params)"
|
136
|
-
c << "req.send_request(options)"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
code('# @!endgroup')
|
141
|
-
|
142
|
-
|
143
|
-
if @gem_name && @gem_version
|
144
|
-
gem_version = "\ncontext[:gem_name] = '#{@gem_name}'"
|
145
|
-
gem_version += "\ncontext[:gem_version] = '#{@gem_version}'"
|
146
|
-
end
|
147
|
-
klass.method(:build_request, api_private: true) do |m|
|
148
|
-
m.param(:operation_name)
|
149
|
-
m.param(:params, default: {})
|
150
|
-
m.code(<<-CODE)
|
151
|
-
handlers = @handlers.for(operation_name)
|
152
|
-
context = Seahorse::Client::RequestContext.new(
|
153
|
-
operation_name: operation_name,
|
154
|
-
operation: config.api.operation(operation_name),
|
155
|
-
client: self,
|
156
|
-
params: params,
|
157
|
-
config: config)#{gem_version}
|
158
|
-
Seahorse::Client::Request.new(handlers, context)
|
159
|
-
CODE
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def apply_waiter_methods(klass)
|
164
|
-
|
165
|
-
# wait_until(waiter_name, params = {}, options = {}, &block)
|
166
|
-
if @waiters
|
167
|
-
klass.add(Dsl::Method.new('wait_until') do |m|
|
168
|
-
m.param('waiter_name', type: Symbol)
|
169
|
-
m.param('params', type: Hash, default: {})
|
170
|
-
m.param('options', type: Hash, default: {})
|
171
|
-
m.option(name: 'max_attempts', type: Integer)
|
172
|
-
m.option(name: 'delay', type: Integer)
|
173
|
-
m.option(name: 'before_attempt', type: Proc)
|
174
|
-
m.option(name: 'before_wait', type: Proc)
|
175
|
-
m.docstring(<<-DOCS)
|
176
|
-
Polls an API operation until a resource enters a desired state.
|
177
|
-
|
178
|
-
## Basic Usage
|
179
|
-
|
180
|
-
A waiter will call an API operation until:
|
181
|
-
|
182
|
-
* It is successful
|
183
|
-
* It enters a terminal state
|
184
|
-
* It makes the maximum number of attempts
|
185
|
-
|
186
|
-
In between attempts, the waiter will sleep.
|
187
|
-
|
188
|
-
# polls in a loop, sleeping between attempts
|
189
|
-
client.waiter_until(waiter_name, params)
|
190
|
-
|
191
|
-
## Configuration
|
192
|
-
|
193
|
-
You can configure the maximum number of polling attempts, and the
|
194
|
-
delay (in seconds) between each polling attempt. You can pass
|
195
|
-
configuration as the final arguments hash.
|
196
|
-
|
197
|
-
# poll for ~25 seconds
|
198
|
-
client.wait_until(waiter_name, params, {
|
199
|
-
max_attempts: 5,
|
200
|
-
delay: 5,
|
201
|
-
})
|
202
|
-
|
203
|
-
## Callbacks
|
204
|
-
|
205
|
-
You can be notified before each polling attempt and before each
|
206
|
-
delay. If you throw `:success` or `:failure` from these callbacks,
|
207
|
-
it will terminate the waiter.
|
208
|
-
|
209
|
-
started_at = Time.now
|
210
|
-
client.wait_until(waiter_name, params, {
|
211
|
-
|
212
|
-
# disable max attempts
|
213
|
-
max_attempts: nil,
|
214
|
-
|
215
|
-
# poll for 1 hour, instead of a number of attempts
|
216
|
-
before_wait: -> (attempts, response) do
|
217
|
-
throw :failure if Time.now - started_at > 3600
|
218
|
-
end
|
219
|
-
})
|
220
|
-
|
221
|
-
## Handling Errors
|
222
|
-
|
223
|
-
When a waiter is unsuccessful, it will raise an error.
|
224
|
-
All of the failure errors extend from
|
225
|
-
{Aws::Waiters::Errors::WaiterFailed}.
|
226
|
-
|
227
|
-
begin
|
228
|
-
client.wait_until(...)
|
229
|
-
rescue Aws::Waiters::Errors::WaiterFailed
|
230
|
-
# resource did not enter the desired state in time
|
231
|
-
end
|
232
|
-
|
233
|
-
## Valid Waiters
|
234
|
-
|
235
|
-
The following table lists the valid waiter names, the operations they call,
|
236
|
-
and the default `:delay` and `:max_attempts` values.
|
237
|
-
|
238
|
-
#{waiter_table}
|
239
|
-
|
240
|
-
@raise [Errors::FailureStateError] Raised when the waiter terminates
|
241
|
-
because the waiter has entered a state that it will not transition
|
242
|
-
out of, preventing success.
|
243
|
-
|
244
|
-
@raise [Errors::TooManyAttemptsError] Raised when the configured
|
245
|
-
maximum number of attempts have been made, and the waiter is not
|
246
|
-
yet successful.
|
247
|
-
|
248
|
-
@raise [Errors::UnexpectedError] Raised when an error is encounted
|
249
|
-
while polling for a resource that is not expected.
|
250
|
-
|
251
|
-
@raise [Errors::NoSuchWaiterError] Raised when you request to wait
|
252
|
-
for an unknown state.
|
253
|
-
|
254
|
-
@return [Boolean] Returns `true` if the waiter was successful.
|
255
|
-
DOCS
|
256
|
-
m.code(<<-CODE)
|
257
|
-
w = waiter(waiter_name, options)
|
258
|
-
yield(w.waiter) if block_given? # deprecated
|
259
|
-
w.wait(params)
|
260
|
-
CODE
|
261
|
-
end)
|
262
|
-
end
|
263
|
-
|
264
|
-
# waiter_names
|
265
|
-
klass.add(Dsl::Method.new('waiter_names') do |m|
|
266
|
-
m.docstring("@api private")
|
267
|
-
m.docstring("@deprecated")
|
268
|
-
if @waiters
|
269
|
-
m.code("waiters.keys")
|
270
|
-
else
|
271
|
-
m.code('[]')
|
272
|
-
end
|
273
|
-
end)
|
274
|
-
|
275
|
-
# private: waiter(waiter_name)
|
276
|
-
klass.add(Dsl::Method.new('waiter', access: :private) do |m|
|
277
|
-
m.param('waiter_name', type: Symbol)
|
278
|
-
m.param('options', type: Hash, default: {})
|
279
|
-
m.code(<<-CODE)
|
280
|
-
waiter_class = waiters[waiter_name]
|
281
|
-
if waiter_class
|
282
|
-
waiter_class.new(options.merge(client: self))
|
283
|
-
else
|
284
|
-
raise Aws::Waiters::Errors::NoSuchWaiterError.new(waiter_name, waiters.keys)
|
285
|
-
end
|
286
|
-
CODE
|
287
|
-
end) if @waiters
|
288
|
-
|
289
|
-
# private: waiters
|
290
|
-
klass.add(Dsl::Method.new('waiters', access: :private) do |m|
|
291
|
-
waiters = {}
|
292
|
-
((@waiters || {})['waiters'] || {}).each_pair do |name, definition|
|
293
|
-
class_name = "Waiters::#{name}"
|
294
|
-
waiters[underscore(name).to_sym] = class_name
|
295
|
-
end
|
296
|
-
m.code(HashFormatter.new.format(waiters))
|
297
|
-
end) if @waiters
|
298
|
-
|
299
|
-
end
|
300
|
-
|
301
|
-
def core_lib
|
302
|
-
# TODO : may need to register the default plugins directory rather
|
303
|
-
# than have the hard-coded here as a relative path
|
304
|
-
File.expand_path('../../../../../../gems/aws-sdk-core/lib', __FILE__)
|
305
|
-
end
|
306
|
-
|
307
|
-
def core_plugins
|
308
|
-
"#{core_lib}/aws-sdk-core/plugins"
|
309
|
-
end
|
310
|
-
|
311
|
-
def seahorse_plugins
|
312
|
-
"#{core_lib}/seahorse/client/plugins"
|
313
|
-
end
|
314
|
-
|
315
|
-
def default_plugins
|
316
|
-
{
|
317
|
-
'Seahorse::Client::Plugins::ContentLength' => "#{seahorse_plugins}/content_length.rb",
|
318
|
-
'Aws::Plugins::CredentialsConfiguration' => "#{core_plugins}/credentials_configuration.rb",
|
319
|
-
'Aws::Plugins::Logging' => "#{core_plugins}/logging.rb",
|
320
|
-
'Aws::Plugins::ParamConverter' => "#{core_plugins}/param_converter.rb",
|
321
|
-
'Aws::Plugins::ParamValidator' => "#{core_plugins}/param_validator.rb",
|
322
|
-
'Aws::Plugins::UserAgent' => "#{core_plugins}/user_agent.rb",
|
323
|
-
'Aws::Plugins::HelpfulSocketErrors' => "#{core_plugins}/helpful_socket_errors.rb",
|
324
|
-
'Aws::Plugins::RetryErrors' => "#{core_plugins}/retry_errors.rb",
|
325
|
-
'Aws::Plugins::GlobalConfiguration' => "#{core_plugins}/global_configuration.rb",
|
326
|
-
'Aws::Plugins::RegionalEndpoint' => "#{core_plugins}/regional_endpoint.rb",
|
327
|
-
'Aws::Plugins::ResponsePaging' => "#{core_plugins}/response_paging.rb",
|
328
|
-
'Aws::Plugins::StubResponses' => "#{core_plugins}/stub_responses.rb",
|
329
|
-
'Aws::Plugins::IdempotencyToken' => "#{core_plugins}/idempotency_token.rb",
|
330
|
-
}
|
331
|
-
end
|
332
|
-
|
333
|
-
def protocol_plugins(protocol)
|
334
|
-
{
|
335
|
-
'json' => { 'Aws::Plugins::Protocols::JsonRpc' => "#{core_plugins}/protocols/json_rpc.rb" },
|
336
|
-
'rest-json' => { 'Aws::Plugins::Protocols::RestJson' => "#{core_plugins}/protocols/rest_json.rb" },
|
337
|
-
'rest-xml' => { 'Aws::Plugins::Protocols::RestXml' => "#{core_plugins}/protocols/rest_xml.rb" },
|
338
|
-
'query' => { 'Aws::Plugins::Protocols::Query' => "#{core_plugins}/protocols/query.rb" },
|
339
|
-
'ec2' => { 'Aws::Plugins::Protocols::EC2' => "#{core_plugins}/protocols/ec2.rb" },
|
340
|
-
nil => {}
|
341
|
-
}[protocol]
|
342
|
-
end
|
343
|
-
|
344
|
-
def signature_plugins
|
345
|
-
case @api['metadata']['signatureVersion']
|
346
|
-
when 'v4'
|
347
|
-
{ 'Aws::Plugins::SignatureV4' => "#{core_plugins}/signature_v4.rb" }
|
348
|
-
when 'v2'
|
349
|
-
{ 'Aws::Plugins::SignatureV2' => "#{core_plugins}/signature_v2.rb" }
|
350
|
-
else
|
351
|
-
{}
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
def waiter_table
|
356
|
-
# insert one row for each supported service
|
357
|
-
table = []
|
358
|
-
@waiters['waiters'].each_pair do |name, waiter|
|
359
|
-
table << [underscore(name), "{##{underscore(waiter['operation'])}}", waiter['delay'], waiter['maxAttempts']]
|
360
|
-
end
|
361
|
-
table = table.sort_by(&:first)
|
362
|
-
|
363
|
-
# header row
|
364
|
-
table.unshift(['waiter_name', 'params', ':delay', ':max_attempts'])
|
365
|
-
markdown_table(table)
|
366
|
-
end
|
367
|
-
|
368
|
-
# @api private
|
369
|
-
class ClientPlugin
|
370
|
-
|
371
|
-
def initialize(options)
|
372
|
-
@class_name = options.fetch(:class_name)
|
373
|
-
@options = options.fetch(:options)
|
374
|
-
@require_path = options.fetch(:path).split('/lib/').last
|
375
|
-
end
|
376
|
-
|
377
|
-
# @return [String]
|
378
|
-
attr_reader :class_name
|
379
|
-
|
380
|
-
# @return [Array<Seahorse::Client::Plugin::PluginOption>]
|
381
|
-
attr_reader :options
|
382
|
-
|
383
|
-
# @return [String]
|
384
|
-
attr_reader :require_path
|
385
|
-
|
386
|
-
end
|
387
|
-
end
|
388
|
-
end
|
389
|
-
end
|
@@ -1,166 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
class ClientOperationDocumentation
|
4
|
-
|
5
|
-
include Helper
|
6
|
-
|
7
|
-
def self.apply(options)
|
8
|
-
new(options).apply(options)
|
9
|
-
end
|
10
|
-
|
11
|
-
# @option options [required, Hash] :api
|
12
|
-
# @option options [required, String] :service_identifier
|
13
|
-
# @option options [required, String] :operation_name
|
14
|
-
# @option options [required, Hash] :operation
|
15
|
-
# @option options [Hash] :examples
|
16
|
-
def initialize(options)
|
17
|
-
@api = options.fetch(:api)
|
18
|
-
@service_id = options.fetch(:service_identifier)
|
19
|
-
@operation_name = options.fetch(:operation_name)
|
20
|
-
@method_name = underscore(@operation_name)
|
21
|
-
@operation = options.fetch(:operation)
|
22
|
-
@examples = options.fetch(:examples, nil) || { 'examples' => {} }
|
23
|
-
end
|
24
|
-
|
25
|
-
def apply(options)
|
26
|
-
method = options.fetch(:method)
|
27
|
-
method.docstring do |docstring|
|
28
|
-
apply_operation_docs(docstring)
|
29
|
-
apply_option_tags(docstring)
|
30
|
-
apply_return_tags(docstring)
|
31
|
-
apply_shared_examples(docstring)
|
32
|
-
apply_examples_from_disk(docstring)
|
33
|
-
apply_request_syntax_example(docstring)
|
34
|
-
apply_response_struture_example(docstring)
|
35
|
-
apply_overload_tag(docstring)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def apply_operation_docs(docstring)
|
42
|
-
docstring.append(markdown(@operation['documentation']))
|
43
|
-
end
|
44
|
-
|
45
|
-
def apply_option_tags(docstring)
|
46
|
-
# document the `:response_target` option if the response is streaming
|
47
|
-
if output = shape(@operation['output'])
|
48
|
-
if output['payload'] && output['members'][output['payload']]['streaming']
|
49
|
-
docstring.lines.concat(Dsl::OptionTag.new(
|
50
|
-
name: 'response_target',
|
51
|
-
type: 'String, IO',
|
52
|
-
param: 'params',
|
53
|
-
required: false,
|
54
|
-
docstring: 'Where to write response data, file path, or IO object.'
|
55
|
-
).lines)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
if input_shape = shape(@operation['input'])
|
60
|
-
required = input_shape['required'] || []
|
61
|
-
input_shape['members'].each_pair do |member_name, member_ref|
|
62
|
-
docstring.lines.concat(Dsl::OptionTag.new(
|
63
|
-
name: underscore(member_name),
|
64
|
-
type: ruby_input_type(member_ref),
|
65
|
-
param: 'params',
|
66
|
-
required: required.include?(member_name),
|
67
|
-
docstring: documentation(member_ref),
|
68
|
-
).lines)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def apply_return_tags(docstring)
|
74
|
-
output_shape = shape(@operation['output'])
|
75
|
-
resp = '{Seahorse::Client::Response response}'
|
76
|
-
if output_shape && output_shape['members'].size > 0
|
77
|
-
type = ruby_type(@operation['output'])
|
78
|
-
returns = "@return [#{type}] Returns a #{resp} object which responds to "
|
79
|
-
returns << "the following methods:\n\n"
|
80
|
-
output_shape['members'].each_pair do |mname, mref|
|
81
|
-
mtype = ruby_type(mref).gsub(/</, '<').gsub(/>/, '>')
|
82
|
-
returns << " * {#{type}##{underscore(mname)} ##{mname}} => #{mtype}\n"
|
83
|
-
end
|
84
|
-
docstring.append(returns)
|
85
|
-
else
|
86
|
-
docstring.append("@return [Struct] Returns an empty #{resp}.")
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def apply_shared_examples(docstring)
|
91
|
-
(@examples[@operation_name] || []).size.times do |n|
|
92
|
-
begin
|
93
|
-
# TODO : known issue with an ec2 shared example that
|
94
|
-
# attempts to document a member that is not
|
95
|
-
# present in the model any longer (intentionally
|
96
|
-
# removed in customizations) - raises runtime
|
97
|
-
# error. This should be cleaned up.
|
98
|
-
docstring.append(
|
99
|
-
SharedExample.new(
|
100
|
-
operation_name: @operation_name,
|
101
|
-
api: @api,
|
102
|
-
examples: @examples,
|
103
|
-
example: n
|
104
|
-
).to_s
|
105
|
-
)
|
106
|
-
rescue
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def apply_shared_example(docstring, example)
|
112
|
-
return
|
113
|
-
|
114
|
-
input_comments = json_ex['comments']['input']
|
115
|
-
input = SharedExample.new(json_ex['input'], method_name, operation, input_comments).to_str_input
|
116
|
-
parts = []
|
117
|
-
parts << "@example Example: #{json_ex['title']}\n\n"
|
118
|
-
parts << " # #{json_ex['description']}\n\n"
|
119
|
-
parts += input.lines.map { |line| " " + line }
|
120
|
-
if json_ex['output']
|
121
|
-
output_comments = json_ex['comments']['output']
|
122
|
-
output = SharedExample.new(json_ex['output'], method_name, operation, output_comments).to_str_output
|
123
|
-
parts << "\n\n # resp.to_h outputs the following:\n"
|
124
|
-
parts += output.lines.map { |line| " " + line }
|
125
|
-
end
|
126
|
-
tag(parts.join)
|
127
|
-
end
|
128
|
-
|
129
|
-
def apply_examples_from_disk(docstring)
|
130
|
-
examples = File.expand_path('../../../../../../doc-src/examples', __FILE__)
|
131
|
-
glob = "#{examples}/#{@service_id}/client/#{@method_name}/*.rb"
|
132
|
-
Dir.glob(glob).map do |path|
|
133
|
-
title = File.basename(path).split(/\./).first
|
134
|
-
title = title.sub(/^\d+_/, '').gsub(/_/, ' ')
|
135
|
-
title = title[0].upcase + title[1..-1]
|
136
|
-
docstring.append("\n@example #{title}")
|
137
|
-
docstring.append(" " + File.read(path).lines.join(' '))
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def apply_request_syntax_example(docstring)
|
142
|
-
if @operation['input']
|
143
|
-
syntax = SyntaxExample.new(
|
144
|
-
struct_shape: shape(@operation['input']),
|
145
|
-
api: @api,
|
146
|
-
indent: ' '
|
147
|
-
).format.strip
|
148
|
-
docstring.append("\n@example Request syntax with placeholder values")
|
149
|
-
docstring.append(" resp = client.#{@method_name}(#{syntax})")
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def apply_response_struture_example(docstring)
|
154
|
-
output = @operation['output']
|
155
|
-
if output && shape(output)['members'].size > 0
|
156
|
-
docstring.append(ResponseStructureExample.new(shape_ref:output, api:@api).to_s)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def apply_overload_tag(docstring)
|
161
|
-
docstring.append("@overload #{@method_name}(params = {})")
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|