aws-sdk-code-generator 0.2.4.pre → 0.3.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/aws-sdk-code-generator/client_constructor.rb +4 -1
- data/lib/aws-sdk-code-generator/client_operation_documentation.rb +10 -4
- data/lib/aws-sdk-code-generator/code_builder.rb +78 -9
- data/lib/aws-sdk-code-generator/codegenerated_plugin.rb +34 -0
- data/lib/aws-sdk-code-generator/gem_builder.rb +4 -5
- data/lib/aws-sdk-code-generator/plugin_list.rb +29 -9
- data/lib/aws-sdk-code-generator/service.rb +22 -0
- data/lib/aws-sdk-code-generator/views/async_client_class.rb +6 -2
- data/lib/aws-sdk-code-generator/views/client_api_module.rb +18 -2
- data/lib/aws-sdk-code-generator/views/client_class.rb +7 -2
- data/lib/aws-sdk-code-generator/views/endpoint_parameters_class.rb +80 -0
- data/lib/aws-sdk-code-generator/views/endpoint_provider_class.rb +34 -0
- data/lib/aws-sdk-code-generator/views/endpoints_module.rb +177 -0
- data/lib/aws-sdk-code-generator/views/endpoints_plugin.rb +85 -0
- data/lib/aws-sdk-code-generator/views/gemspec.rb +4 -0
- data/lib/aws-sdk-code-generator/views/service_module.rb +15 -1
- data/lib/aws-sdk-code-generator/views/spec/endpoint_provider_spec_class.rb +198 -0
- data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +9 -4
- data/lib/aws-sdk-code-generator/views/types_module.rb +8 -7
- data/lib/aws-sdk-code-generator.rb +6 -0
- data/templates/async_client_class.mustache +2 -2
- data/templates/client_api_module.mustache +7 -0
- data/templates/client_class.mustache +4 -1
- data/templates/endpoint_parameters_class.mustache +50 -0
- data/templates/endpoint_provider_class.mustache +30 -0
- data/templates/endpoints_module.mustache +33 -0
- data/templates/endpoints_plugin.mustache +76 -0
- data/templates/gemspec.mustache +1 -1
- data/templates/spec/endpoint_provider_spec_class.mustache +76 -0
- data/templates/spec/spec_helper.mustache +5 -0
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f47bca9edb4689814cec21486fbc9924716462ea8dc0cf69e05d82b11c95d3b
|
4
|
+
data.tar.gz: 7173e29d52ac6118968e30d35e750cfe2a702e9c4a320041c46ab534f6c5d018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c009d5dec4abd1d587254c564eeb88c89bd08d687070ae539ea4ea0fc64d747edc8b28641f7544ea9860363aa7467a631fae896d815cde99cc3502c7b7b844e2
|
7
|
+
data.tar.gz: b195875c8e9dd16ba6373784bd786dc79663a6e0f421c2835462cd1bccc407e2168d5a98947bffa6fc31ea1eb65ba27fca67047c83ef2a9d65987e4dbd3902d0
|
@@ -4,8 +4,11 @@ module AwsSdkCodeGenerator
|
|
4
4
|
class ClientConstructor
|
5
5
|
|
6
6
|
# @option options [required, PluginList] :plugins
|
7
|
+
# @option options [required, Array<CodegeneratedPlugin>] :codegenerated_plugins
|
8
|
+
|
7
9
|
def initialize(options)
|
8
|
-
plugin_options = documented_plugin_options(options.fetch(:plugins))
|
10
|
+
plugin_options = documented_plugin_options(options.fetch(:plugins)) +
|
11
|
+
documented_plugin_options(options.fetch(:codegenerated_plugins))
|
9
12
|
documentation = {}
|
10
13
|
plugin_options.each do |option|
|
11
14
|
documentation[option.name] = YardOptionTag.new(
|
@@ -101,7 +101,7 @@ module AwsSdkCodeGenerator
|
|
101
101
|
if member_ref['idempotencyToken']
|
102
102
|
docstring = docstring.to_s + "<p><b>A suitable default value is auto-generated.** You should normally not need to pass this option.</b></p>"
|
103
103
|
end
|
104
|
-
if member_ref['jsonvalue']
|
104
|
+
if member_ref['jsonvalue'] || member_shape['jsonvalue']
|
105
105
|
docstring = docstring.to_s + "<p><b>SDK automatically handles json encoding and base64 encoding for you when the required value (Hash, Array, etc.) is provided according to the description.</b></p>"
|
106
106
|
end
|
107
107
|
if member_shape['document']
|
@@ -232,17 +232,19 @@ module AwsSdkCodeGenerator
|
|
232
232
|
end
|
233
233
|
|
234
234
|
def request_syntax_example(method_name, operation, api)
|
235
|
-
SyntaxExample.new(
|
235
|
+
example = SyntaxExample.new(
|
236
236
|
api: api,
|
237
237
|
shape: Api.shape(operation['input'], api),
|
238
238
|
method_name: method_name,
|
239
239
|
receiver: 'client',
|
240
240
|
resp_var: 'resp',
|
241
241
|
).format
|
242
|
+
# TODO - QuickSight is breaking this
|
243
|
+
example if example && example.lines.count < 1000
|
242
244
|
end
|
243
245
|
|
244
246
|
def async_request_syntax_example(method_name, operation, api)
|
245
|
-
SyntaxExample.new(
|
247
|
+
example = SyntaxExample.new(
|
246
248
|
api: api,
|
247
249
|
shape: Api.shape(operation['input'], api),
|
248
250
|
method_name: method_name,
|
@@ -250,15 +252,19 @@ module AwsSdkCodeGenerator
|
|
250
252
|
resp_var: 'async_resp',
|
251
253
|
async: true
|
252
254
|
).format
|
255
|
+
# TODO - QuickSight is breaking this
|
256
|
+
example if example && example.lines.count < 1000
|
253
257
|
end
|
254
258
|
|
255
259
|
def response_structure_example(operation, api)
|
256
260
|
output = Api.shape(operation['output'], api) if operation['output']
|
257
261
|
if output && output['members'] && output['members'].size > 0
|
258
|
-
Docstring.block_comment(ClientResponseStructureExample.new(
|
262
|
+
docstring = Docstring.block_comment(ClientResponseStructureExample.new(
|
259
263
|
shape_ref: operation['output'],
|
260
264
|
api: api
|
261
265
|
).to_s)
|
266
|
+
# TODO - QuickSight is breaking this
|
267
|
+
docstring if docstring && docstring.lines.count < 1000
|
262
268
|
end
|
263
269
|
end
|
264
270
|
|
@@ -51,15 +51,18 @@ module AwsSdkCodeGenerator
|
|
51
51
|
|
52
52
|
# @return [Enumerable<String<path>, String<code>>]
|
53
53
|
def source_files(options = {})
|
54
|
+
|
54
55
|
prefix = options.fetch(:prefix, @service.gem_name)
|
56
|
+
codegenerated_plugins = codegen_plugins(prefix)
|
57
|
+
|
55
58
|
Enumerator.new do |y|
|
56
59
|
if @service.protocol == 'api-gateway'
|
57
60
|
y.yield("#{prefix}/../../README.md", apig_readme)
|
58
61
|
y.yield("#{prefix}/plugins/authorizer.rb", authorizer_class)
|
59
62
|
y.yield("#{prefix}/plugins/apig_endpoint.rb", apig_endpoint_class)
|
60
63
|
end
|
61
|
-
y.yield("#{prefix}.rb", service_module(prefix))
|
62
|
-
unless
|
64
|
+
y.yield("#{prefix}.rb", service_module(prefix, codegenerated_plugins))
|
65
|
+
unless @service.included_in_core?
|
63
66
|
y.yield("#{prefix}/customizations.rb", '')
|
64
67
|
end
|
65
68
|
y.yield("#{prefix}/types.rb", types_module)
|
@@ -67,13 +70,23 @@ module AwsSdkCodeGenerator
|
|
67
70
|
y.yield("#{prefix}/event_streams.rb", event_streams_module)
|
68
71
|
end
|
69
72
|
y.yield("#{prefix}/client_api.rb", client_api_module)
|
70
|
-
|
73
|
+
|
74
|
+
codegenerated_plugins.each { |p| y.yield(p.path, p.source) }
|
75
|
+
|
76
|
+
y.yield("#{prefix}/client.rb", client_class(codegenerated_plugins))
|
71
77
|
if @service.protocol_settings['h2'] == 'eventstream'
|
72
|
-
y.yield("#{prefix}/async_client.rb", async_client_class)
|
78
|
+
y.yield("#{prefix}/async_client.rb", async_client_class(codegenerated_plugins))
|
73
79
|
end
|
74
80
|
y.yield("#{prefix}/errors.rb", errors_module)
|
75
81
|
y.yield("#{prefix}/waiters.rb", waiters_module) if @waiters
|
76
82
|
y.yield("#{prefix}/resource.rb", root_resource_class)
|
83
|
+
|
84
|
+
unless @service.legacy_endpoints?
|
85
|
+
y.yield("#{prefix}/endpoint_parameters.rb", endpoint_parameters)
|
86
|
+
y.yield("#{prefix}/endpoints.rb", endpoints_module)
|
87
|
+
y.yield("#{prefix}/endpoint_provider.rb", endpoint_provider)
|
88
|
+
end
|
89
|
+
|
77
90
|
if @resources
|
78
91
|
@resources['resources'].keys.sort.each do |name|
|
79
92
|
path = "#{prefix}/#{Underscore.underscore(name)}.rb"
|
@@ -84,10 +97,24 @@ module AwsSdkCodeGenerator
|
|
84
97
|
end
|
85
98
|
end
|
86
99
|
|
100
|
+
# @return [Enumerable<String<path>, String<code>>]
|
101
|
+
def spec_files(options = {})
|
102
|
+
prefix = options.fetch(:prefix, '')
|
103
|
+
Enumerator.new do |y|
|
104
|
+
y.yield("#{prefix}/spec_helper.rb", spec_helper_file)
|
105
|
+
|
106
|
+
if @service.endpoint_tests && !@service.legacy_endpoints?
|
107
|
+
y.yield("#{prefix}/endpoint_provider_spec.rb", endpoint_provider_spec_file)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
87
112
|
private
|
88
113
|
|
89
|
-
def service_module(prefix)
|
90
|
-
Views::ServiceModule.new(
|
114
|
+
def service_module(prefix, codegenerated_plugins)
|
115
|
+
Views::ServiceModule.new(
|
116
|
+
service: @service, prefix: prefix,
|
117
|
+
codegenerated_plugins: codegenerated_plugins).render
|
91
118
|
end
|
92
119
|
|
93
120
|
def types_module
|
@@ -102,7 +129,7 @@ module AwsSdkCodeGenerator
|
|
102
129
|
Views::ClientApiModule.new(service: @service).render
|
103
130
|
end
|
104
131
|
|
105
|
-
def client_class
|
132
|
+
def client_class(codegenerated_plugins)
|
106
133
|
Views::ClientClass.new(
|
107
134
|
service_identifier: @service.identifier,
|
108
135
|
service_name: @service.name,
|
@@ -121,11 +148,13 @@ module AwsSdkCodeGenerator
|
|
121
148
|
paginators: @service.paginators,
|
122
149
|
waiters: @service.waiters,
|
123
150
|
examples: @service.examples,
|
124
|
-
custom: @service.protocol == 'api-gateway'
|
151
|
+
custom: @service.protocol == 'api-gateway',
|
152
|
+
legacy_endpoints: @service.legacy_endpoints?,
|
153
|
+
codegenerated_plugins: codegenerated_plugins
|
125
154
|
).render
|
126
155
|
end
|
127
156
|
|
128
|
-
def async_client_class
|
157
|
+
def async_client_class(codegenerated_plugins)
|
129
158
|
Views::AsyncClientClass.new(
|
130
159
|
service_identifier: @service.identifier,
|
131
160
|
service_name: @service.name,
|
@@ -139,6 +168,8 @@ module AwsSdkCodeGenerator
|
|
139
168
|
add_plugins: @service.add_plugins,
|
140
169
|
remove_plugins: @service.remove_plugins,
|
141
170
|
api: @service.api,
|
171
|
+
legacy_endpoints: @service.legacy_endpoints?,
|
172
|
+
codegenerated_plugins: codegenerated_plugins,
|
142
173
|
async_client: true
|
143
174
|
).render
|
144
175
|
end
|
@@ -200,6 +231,44 @@ module AwsSdkCodeGenerator
|
|
200
231
|
).render
|
201
232
|
end
|
202
233
|
|
234
|
+
def endpoint_parameters
|
235
|
+
Views::EndpointParametersClass.new(service: @service).render
|
236
|
+
end
|
237
|
+
|
238
|
+
def endpoint_provider
|
239
|
+
Views::EndpointProviderClass.new(service: @service).render
|
240
|
+
end
|
241
|
+
|
242
|
+
def endpoints_module
|
243
|
+
Views::EndpointsModule.new(service: @service).render
|
244
|
+
end
|
245
|
+
|
246
|
+
def endpoints_plugin
|
247
|
+
Views::EndpointsPlugin.new(service: @service).render
|
248
|
+
end
|
249
|
+
|
250
|
+
def endpoint_provider_spec_file
|
251
|
+
Views::Spec::EndpointProviderSpecClass.new(service: @service).render
|
252
|
+
end
|
253
|
+
|
254
|
+
def codegen_plugins(prefix)
|
255
|
+
unless @service.legacy_endpoints?
|
256
|
+
[
|
257
|
+
CodegeneratedPlugin.new(
|
258
|
+
source: endpoints_plugin,
|
259
|
+
class_name: "#{@service.module_name}::Plugins::Endpoints",
|
260
|
+
path: "#{prefix}/plugins/endpoints.rb"
|
261
|
+
)
|
262
|
+
]
|
263
|
+
else
|
264
|
+
[]
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def spec_helper_file
|
269
|
+
Views::Spec::SpecHelper.new(service: @service).render
|
270
|
+
end
|
271
|
+
|
203
272
|
private
|
204
273
|
|
205
274
|
def has_eventstream
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AwsSdkCodeGenerator
|
4
|
+
class CodegeneratedPlugin
|
5
|
+
|
6
|
+
# @option options [required, String] :source
|
7
|
+
# @option options [required, String] :class_name
|
8
|
+
# @option options [required, String] :path
|
9
|
+
def initialize(options = {})
|
10
|
+
@source = options.fetch(:source)
|
11
|
+
@class_name = options.fetch(:class_name)
|
12
|
+
@path = options.fetch(:path)
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :source, :path, :class_name
|
16
|
+
|
17
|
+
|
18
|
+
def plugin_class
|
19
|
+
if @plugin_class.nil?
|
20
|
+
Object.module_eval(@source)
|
21
|
+
const_names = @class_name.split('::')
|
22
|
+
@plugin_class = const_names.inject(Kernel) do |const, const_name|
|
23
|
+
const.const_get(const_name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
@plugin_class
|
27
|
+
end
|
28
|
+
|
29
|
+
def options
|
30
|
+
plugin_class.public_send(:options)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -23,17 +23,20 @@ module AwsSdkCodeGenerator
|
|
23
23
|
y.yield("#{@service.gem_name}.gemspec", gemspec_file)
|
24
24
|
y.yield('features/env.rb', features_env_file)
|
25
25
|
y.yield('features/step_definitions.rb', features_step_definitions_file)
|
26
|
-
y.yield('spec/spec_helper.rb', spec_helper_file)
|
27
26
|
if @service.smoke_tests
|
28
27
|
y.yield('features/smoke.feature', smoke_file)
|
29
28
|
y.yield('features/smoke_step_definitions.rb', smoke_step_definitions_file)
|
30
29
|
end
|
31
30
|
y.yield('VERSION', version_file)
|
32
31
|
y.yield('LICENSE.txt', license_file)
|
32
|
+
|
33
33
|
code = CodeBuilder.new(@options)
|
34
34
|
code.source_files.each do |path, code|
|
35
35
|
y.yield("lib/#{path}", code)
|
36
36
|
end
|
37
|
+
code.spec_files.each do |path, code|
|
38
|
+
y.yield("spec/#{path}", code)
|
39
|
+
end
|
37
40
|
end.each(&block)
|
38
41
|
end
|
39
42
|
|
@@ -59,10 +62,6 @@ module AwsSdkCodeGenerator
|
|
59
62
|
Views::Features::StepDefinitions.new(options).render
|
60
63
|
end
|
61
64
|
|
62
|
-
def spec_helper_file
|
63
|
-
Views::Spec::SpecHelper.new(options).render
|
64
|
-
end
|
65
|
-
|
66
65
|
def version_file
|
67
66
|
Views::Version.new(options).render
|
68
67
|
end
|
@@ -20,7 +20,7 @@ module AwsSdkCodeGenerator
|
|
20
20
|
def compute_plugins(options)
|
21
21
|
plugins = {}
|
22
22
|
plugins.update(options[:async_client] ? default_async_plugins : default_plugins)
|
23
|
-
plugins.update(signature_plugins(options
|
23
|
+
plugins.update(signature_plugins(options))
|
24
24
|
plugins.update(protocol_plugins(options.fetch(:protocol)))
|
25
25
|
plugins.update(options.fetch(:add_plugins))
|
26
26
|
options.fetch(:remove_plugins).each do |plugin_name|
|
@@ -58,7 +58,10 @@ module AwsSdkCodeGenerator
|
|
58
58
|
'Aws::Plugins::ClientMetricsPlugin' => "#{core_plugins}/client_metrics_plugin.rb",
|
59
59
|
'Aws::Plugins::ClientMetricsSendPlugin' => "#{core_plugins}/client_metrics_send_plugin.rb",
|
60
60
|
'Aws::Plugins::TransferEncoding' => "#{core_plugins}/transfer_encoding.rb",
|
61
|
-
'Aws::Plugins::HttpChecksum' => "#{core_plugins}/http_checksum.rb"
|
61
|
+
'Aws::Plugins::HttpChecksum' => "#{core_plugins}/http_checksum.rb",
|
62
|
+
'Aws::Plugins::ChecksumAlgorithm' => "#{core_plugins}/checksum_algorithm.rb",
|
63
|
+
'Aws::Plugins::DefaultsMode' => "#{core_plugins}/defaults_mode.rb",
|
64
|
+
'Aws::Plugins::RecursionDetection' => "#{core_plugins}/recursion_detection.rb"
|
62
65
|
}
|
63
66
|
end
|
64
67
|
|
@@ -93,14 +96,31 @@ module AwsSdkCodeGenerator
|
|
93
96
|
}[protocol]
|
94
97
|
end
|
95
98
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
99
|
+
# HACK: Sigv2 is deprecated, Sigv4/Bearer are with core. Always assume
|
100
|
+
# new signer plugin. This logic would be moved to gem dependencies
|
101
|
+
# calculation, but don't worry until new signature type.
|
102
|
+
#
|
103
|
+
# NOTE: If no rules are provided, just use old Signing method
|
104
|
+
def signature_plugins(options)
|
105
|
+
if !options[:legacy_endpoints]
|
106
|
+
{
|
107
|
+
'Aws::Plugins::Sign' => "#{core_plugins}/sign.rb"
|
108
|
+
}
|
102
109
|
else
|
103
|
-
|
110
|
+
auth_types = [options.fetch(:signature_version)]
|
111
|
+
auth_types += options[:api]['operations'].map { |_n, o| o['authtype'] }.compact
|
112
|
+
plugins = {}
|
113
|
+
auth_types.each do |auth_type|
|
114
|
+
case auth_type
|
115
|
+
when 'v4'
|
116
|
+
plugins['Aws::Plugins::SignatureV4'] = "#{core_plugins}/signature_v4.rb"
|
117
|
+
when 'v2'
|
118
|
+
plugins['Aws::Plugins::SignatureV2'] = "#{core_plugins}/signature_v2.rb"
|
119
|
+
when 'bearer'
|
120
|
+
plugins['Aws::Plugins::BearerAuthorization'] = "#{core_plugins}/bearer_authorization.rb"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
plugins
|
104
124
|
end
|
105
125
|
end
|
106
126
|
|
@@ -14,6 +14,8 @@ module AwsSdkCodeGenerator
|
|
14
14
|
# @option options [Hash, String] :waiters
|
15
15
|
# @option options [Hash, String] :resources
|
16
16
|
# @option options [Hash, String] :examples
|
17
|
+
# @option options [Hash, String] :endpoint_rules
|
18
|
+
# @option options [Hash, String] :endpoint_tests
|
17
19
|
# @option options [Hash, String] :smoke_tests
|
18
20
|
# @option options [Hash<gem,version>] :gem_dependencies ({})
|
19
21
|
# @option options [Hash] :add_plugins ({})
|
@@ -34,6 +36,10 @@ module AwsSdkCodeGenerator
|
|
34
36
|
@resources = load_json(options[:resources])
|
35
37
|
@examples = load_json(options[:examples])
|
36
38
|
@smoke_tests = load_json(options[:smoke_tests])
|
39
|
+
unless options[:legacy_endpoints]
|
40
|
+
@endpoint_rules = load_json(options[:endpoint_rules])
|
41
|
+
@endpoint_tests = load_json(options[:endpoint_tests])
|
42
|
+
end
|
37
43
|
@gem_dependencies = options[:gem_dependencies] || {}
|
38
44
|
@add_plugins = options[:add_plugins] || {}
|
39
45
|
@remove_plugins = options[:remove_plugins] || []
|
@@ -77,6 +83,22 @@ module AwsSdkCodeGenerator
|
|
77
83
|
# @return [Hash, nil] The service smoke test model.
|
78
84
|
attr_reader :smoke_tests
|
79
85
|
|
86
|
+
# @return Boolean True if the service should use legacy endpoints
|
87
|
+
def legacy_endpoints?
|
88
|
+
!@endpoint_rules || @endpoint_rules.empty?
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return Boolean True if the service is inlined in core (ie not a stand alone gem)
|
92
|
+
def included_in_core?
|
93
|
+
%w[STS SSO SSOOIDC].include?(name)
|
94
|
+
end
|
95
|
+
|
96
|
+
# @return [Hash, nil] The service endpoint rules.
|
97
|
+
attr_reader :endpoint_rules
|
98
|
+
|
99
|
+
# @return [Hash, nil] The service endpoint tests.
|
100
|
+
attr_reader :endpoint_tests
|
101
|
+
|
80
102
|
# @return [Hash<String,String>] A hash of gem dependencies. Hash keys
|
81
103
|
# are gem names, values are versions.
|
82
104
|
attr_reader :gem_dependencies
|
@@ -23,7 +23,11 @@ module AwsSdkCodeGenerator
|
|
23
23
|
@gem_name = options.fetch(:gem_name)
|
24
24
|
@gem_version = options.fetch(:gem_version)
|
25
25
|
@plugins = PluginList.new(options)
|
26
|
-
@
|
26
|
+
@codegenerated_plugins = options.fetch(:codegenerated_plugins, [])
|
27
|
+
@client_constructor = ClientConstructor.new(
|
28
|
+
options.merge(
|
29
|
+
plugins: @plugins,
|
30
|
+
codegenerated_plugins: @codegenerated_plugins))
|
27
31
|
@operations = ClientOperationList.new(options).to_a
|
28
32
|
end
|
29
33
|
|
@@ -60,7 +64,7 @@ module AwsSdkCodeGenerator
|
|
60
64
|
|
61
65
|
# @return [Array<String>]
|
62
66
|
def plugin_class_names
|
63
|
-
@plugins.map(&:class_name)
|
67
|
+
@plugins.map(&:class_name) + @codegenerated_plugins.map(&:class_name)
|
64
68
|
end
|
65
69
|
|
66
70
|
end
|
@@ -31,8 +31,9 @@ module AwsSdkCodeGenerator
|
|
31
31
|
'xmlNamespace' => true,
|
32
32
|
'streaming' => true, # transfer-encoding
|
33
33
|
'requiresLength' => true, # transfer-encoding
|
34
|
-
'union' => false,
|
34
|
+
'union' => false, # should remain false
|
35
35
|
'document' => true,
|
36
|
+
'jsonvalue' => true,
|
36
37
|
# event stream modeling
|
37
38
|
'event' => false,
|
38
39
|
'eventstream' => false,
|
@@ -83,7 +84,10 @@ module AwsSdkCodeGenerator
|
|
83
84
|
'checksumFormat' => true,
|
84
85
|
'globalEndpoint' => true,
|
85
86
|
'serviceAbbreviation' => true,
|
86
|
-
'uid' => true
|
87
|
+
'uid' => true,
|
88
|
+
'awsQueryCompatible' => true, # AwsQuery migration
|
89
|
+
# ignore
|
90
|
+
'ripServiceName' => true
|
87
91
|
}
|
88
92
|
|
89
93
|
# @option options [required, Service] :service
|
@@ -197,6 +201,15 @@ module AwsSdkCodeGenerator
|
|
197
201
|
o.http_method = operation['http']['method']
|
198
202
|
o.http_request_uri = operation['http']['requestUri']
|
199
203
|
o.http_checksum_required = true if operation['httpChecksumRequired']
|
204
|
+
if operation.key?('httpChecksum')
|
205
|
+
operation['httpChecksum']['requestAlgorithmMember'] = underscore(operation['httpChecksum']['requestAlgorithmMember']) if operation['httpChecksum']['requestAlgorithmMember']
|
206
|
+
operation['httpChecksum']['requestValidationModeMember'] = underscore(operation['httpChecksum']['requestValidationModeMember']) if operation['httpChecksum']['requestValidationModeMember']
|
207
|
+
|
208
|
+
o.http_checksum = operation['httpChecksum'].inject([]) do |a, (k, v)|
|
209
|
+
a << { key: k.inspect, value: v.inspect }
|
210
|
+
a
|
211
|
+
end
|
212
|
+
end
|
200
213
|
%w(input output).each do |key|
|
201
214
|
if operation[key]
|
202
215
|
o.shape_references << "o.#{key} = #{operation_ref(operation[key])}"
|
@@ -535,6 +548,9 @@ module AwsSdkCodeGenerator
|
|
535
548
|
# @return [Boolean]
|
536
549
|
attr_accessor :http_checksum_required
|
537
550
|
|
551
|
+
# @return [Hash]
|
552
|
+
attr_accessor :http_checksum
|
553
|
+
|
538
554
|
# @return [Array<String>]
|
539
555
|
attr_accessor :shape_references
|
540
556
|
|
@@ -18,6 +18,7 @@ module AwsSdkCodeGenerator
|
|
18
18
|
# @option options [required, Hash] :api
|
19
19
|
# @option options [Hash] :waiters
|
20
20
|
# @option options [Hash] :client_examples
|
21
|
+
# @option options [Array<CodegeneratedPlugin] :codegenerated_plugins
|
21
22
|
def initialize(options)
|
22
23
|
@service_identifier = options.fetch(:service_identifier)
|
23
24
|
@service_name = options.fetch(:service_name)
|
@@ -25,7 +26,11 @@ module AwsSdkCodeGenerator
|
|
25
26
|
@gem_name = options.fetch(:gem_name)
|
26
27
|
@gem_version = options.fetch(:gem_version)
|
27
28
|
@plugins = PluginList.new(options)
|
28
|
-
@
|
29
|
+
@codegenerated_plugins = options.fetch(:codegenerated_plugins, [])
|
30
|
+
@client_constructor = ClientConstructor.new(
|
31
|
+
options.merge(
|
32
|
+
plugins: @plugins,
|
33
|
+
codegenerated_plugins: @codegenerated_plugins))
|
29
34
|
@operations = ClientOperationList.new(options).to_a
|
30
35
|
@waiters = Waiter.build_list(options[:waiters])
|
31
36
|
@custom = options.fetch(:custom)
|
@@ -65,7 +70,7 @@ module AwsSdkCodeGenerator
|
|
65
70
|
|
66
71
|
# @return [Array<String>]
|
67
72
|
def plugin_class_names
|
68
|
-
@plugins.map(&:class_name)
|
73
|
+
@plugins.map(&:class_name) + @codegenerated_plugins.map(&:class_name)
|
69
74
|
end
|
70
75
|
|
71
76
|
# @return [Array<Waiter>]
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AwsSdkCodeGenerator
|
4
|
+
module Views
|
5
|
+
class EndpointParametersClass < View
|
6
|
+
|
7
|
+
# @option options [required, Service] :service
|
8
|
+
def initialize(options)
|
9
|
+
@service = options.fetch(:service)
|
10
|
+
if (parameters = @service.endpoint_rules&.fetch('parameters'))
|
11
|
+
@parameters = parameters.map do |k,p|
|
12
|
+
EndpointParameter.new(k, p)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Array<EndpointParameter>]
|
18
|
+
attr_reader :parameters
|
19
|
+
|
20
|
+
# @return [String|nil]
|
21
|
+
def generated_src_warning
|
22
|
+
return if @service.protocol == 'api-gateway'
|
23
|
+
GENERATED_SRC_WARNING
|
24
|
+
end
|
25
|
+
|
26
|
+
def module_name
|
27
|
+
@service.module_name
|
28
|
+
end
|
29
|
+
|
30
|
+
class EndpointParameter
|
31
|
+
def initialize(name, definition={})
|
32
|
+
@name = name
|
33
|
+
@type = definition['type']
|
34
|
+
@built_in = definition['builtIn']
|
35
|
+
@default = definition['default']
|
36
|
+
@required = definition['required']
|
37
|
+
@documentation = "# @!attribute #{underscore_name}\n"
|
38
|
+
if definition['documentation']
|
39
|
+
@documentation += " # #{definition['documentation']}\n"
|
40
|
+
end
|
41
|
+
if deprecated = definition['deprecated']
|
42
|
+
@documentation += " #\n # @deprecated\n"
|
43
|
+
if deprecated['message']
|
44
|
+
@documentation += " # #{deprecated['message']}\n"
|
45
|
+
end
|
46
|
+
if deprecated['since']
|
47
|
+
@documentation += " # Since: #{deprecated['since']}\n"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
@documentation += " #\n # @return [#{@type}]\n #"
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [String]
|
54
|
+
attr_reader :name
|
55
|
+
|
56
|
+
# @return [String]
|
57
|
+
attr_reader :documentation
|
58
|
+
|
59
|
+
# @return [Boolean]
|
60
|
+
attr_reader :required
|
61
|
+
|
62
|
+
# @return [String,Boolean]
|
63
|
+
attr_reader :default
|
64
|
+
|
65
|
+
def default?
|
66
|
+
!@default.nil?
|
67
|
+
end
|
68
|
+
|
69
|
+
def boolean_default?
|
70
|
+
default? && (@default == true || @default == false)
|
71
|
+
end
|
72
|
+
|
73
|
+
def underscore_name
|
74
|
+
Underscore.underscore(name)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AwsSdkCodeGenerator
|
4
|
+
module Views
|
5
|
+
class EndpointProviderClass < View
|
6
|
+
|
7
|
+
# @option options [required, Service] :service
|
8
|
+
# @option options [required, Hash] :endpoint_rules
|
9
|
+
def initialize(options)
|
10
|
+
@service = options.fetch(:service)
|
11
|
+
@endpoint_rules = @service.endpoint_rules
|
12
|
+
|
13
|
+
version = @endpoint_rules['version']
|
14
|
+
return if version&.match(/^\d+\.\d+$/) # && version == '1.0'
|
15
|
+
|
16
|
+
raise 'Endpoint Rules version must be 1.0'
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String|nil]
|
20
|
+
def generated_src_warning
|
21
|
+
return if @service.protocol == 'api-gateway'
|
22
|
+
GENERATED_SRC_WARNING
|
23
|
+
end
|
24
|
+
|
25
|
+
def module_name
|
26
|
+
@service.module_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def endpoint_rules_encoded
|
30
|
+
Base64.encode64(JSON.dump(@endpoint_rules))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|