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
@@ -0,0 +1,148 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AwsSdkCodeGenerator
|
4
|
+
class ClientOperationList
|
5
|
+
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
api = options.fetch(:api)
|
10
|
+
examples = options.fetch(:examples, {})
|
11
|
+
module_name = options.fetch(:module_name)
|
12
|
+
protocol_settings = options.fetch(:protocol_settings, {})
|
13
|
+
client_examples = options.fetch(:client_examples, {})
|
14
|
+
paginators = options.fetch(:paginators, {})
|
15
|
+
operation_waiters = Waiter.build_operations_map(options[:waiters])
|
16
|
+
|
17
|
+
@operations = api['operations'].inject([]) do |ops, (name, operation)|
|
18
|
+
method_name = Underscore.underscore(name)
|
19
|
+
waiters = operation_waiters[method_name]
|
20
|
+
|
21
|
+
async_client = options[:async_client] || false
|
22
|
+
es_output = AwsSdkCodeGenerator::Helper.eventstream_output?(operation, api)
|
23
|
+
es_input = AwsSdkCodeGenerator::Helper.eventstream_input?(operation, api)
|
24
|
+
if es_input || es_output
|
25
|
+
# eventstreaming operations
|
26
|
+
if protocol_settings['h2'] == 'eventstream'
|
27
|
+
# h2 supported, only generate for async client
|
28
|
+
if async_client
|
29
|
+
if es_input == es_output
|
30
|
+
# input & output eventstream sharing
|
31
|
+
# same eventstream shape
|
32
|
+
# see EventStreamModule
|
33
|
+
es_input = "Input" + es_input
|
34
|
+
es_output = "Output" + es_output
|
35
|
+
end
|
36
|
+
ops << Operation.new(
|
37
|
+
name: method_name,
|
38
|
+
documentation: ClientOperationDocumentation.new(
|
39
|
+
name: name,
|
40
|
+
module_name: module_name,
|
41
|
+
method_name: method_name,
|
42
|
+
operation: operation,
|
43
|
+
api: api,
|
44
|
+
examples: examples,
|
45
|
+
client_examples: client_examples[method_name] || [],
|
46
|
+
async_client: true
|
47
|
+
).to_s,
|
48
|
+
streaming: AwsSdkCodeGenerator::Helper.operation_streaming?(operation, api),
|
49
|
+
eventstream_output: es_output,
|
50
|
+
eventstream_input: es_input
|
51
|
+
)
|
52
|
+
end
|
53
|
+
elsif !es_input && es_output && !async_client
|
54
|
+
# http1.1 only support eventstream at output
|
55
|
+
ops << Operation.new(
|
56
|
+
name: method_name,
|
57
|
+
documentation: ClientOperationDocumentation.new(
|
58
|
+
name: name,
|
59
|
+
module_name: module_name,
|
60
|
+
method_name: method_name,
|
61
|
+
operation: operation,
|
62
|
+
api: api,
|
63
|
+
examples: examples,
|
64
|
+
client_examples: client_examples[method_name] || [],
|
65
|
+
async_client: false
|
66
|
+
).to_s,
|
67
|
+
streaming: AwsSdkCodeGenerator::Helper.operation_streaming?(operation, api),
|
68
|
+
eventstream_output: es_output,
|
69
|
+
eventstream_input: false
|
70
|
+
)
|
71
|
+
end
|
72
|
+
elsif !async_client
|
73
|
+
# non streaming operations
|
74
|
+
# generate at sync client only
|
75
|
+
ops << Operation.new(
|
76
|
+
name: method_name,
|
77
|
+
documentation: ClientOperationDocumentation.new(
|
78
|
+
name: name,
|
79
|
+
module_name: module_name,
|
80
|
+
method_name: method_name,
|
81
|
+
operation: operation,
|
82
|
+
api: api,
|
83
|
+
examples: examples,
|
84
|
+
client_examples: client_examples[method_name] || [],
|
85
|
+
async_client: false,
|
86
|
+
pager: paginators && paginators['pagination'][name],
|
87
|
+
waiters: waiters
|
88
|
+
).to_s,
|
89
|
+
streaming: AwsSdkCodeGenerator::Helper.operation_streaming?(operation, api),
|
90
|
+
eventstream_output: false,
|
91
|
+
eventstream_input: false
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
ops
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [Enumerable<Operation>]
|
100
|
+
def each(&block)
|
101
|
+
@operations.each(&block)
|
102
|
+
end
|
103
|
+
|
104
|
+
class Operation
|
105
|
+
|
106
|
+
def initialize(options)
|
107
|
+
@name = options.fetch(:name)
|
108
|
+
@documentation = options.fetch(:documentation)
|
109
|
+
@streaming = options.fetch(:streaming)
|
110
|
+
@eventstream_output = !!options.fetch(:eventstream_output)
|
111
|
+
@eventstream_input = !!options.fetch(:eventstream_input)
|
112
|
+
@output_eventstream_member = @eventstream_output ?
|
113
|
+
options.fetch(:eventstream_output) : nil
|
114
|
+
@input_eventstream_member = @eventstream_input ?
|
115
|
+
options.fetch(:eventstream_input) : nil
|
116
|
+
@bidirectional = @eventstream_output && @eventstream_input
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [String]
|
120
|
+
attr_reader :name
|
121
|
+
|
122
|
+
# @return [String, nil]
|
123
|
+
attr_reader :documentation
|
124
|
+
|
125
|
+
# @return [Boolean]
|
126
|
+
attr_reader :eventstream_input
|
127
|
+
|
128
|
+
# @return [Boolean]
|
129
|
+
attr_reader :eventstream_output
|
130
|
+
|
131
|
+
# @return [String]
|
132
|
+
attr_reader :input_eventstream_member
|
133
|
+
|
134
|
+
# @return [String]
|
135
|
+
attr_reader :output_eventstream_member
|
136
|
+
|
137
|
+
# @return [Boolean]
|
138
|
+
attr_reader :bidirectional
|
139
|
+
|
140
|
+
def block_option
|
141
|
+
if @streaming
|
142
|
+
", &block"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'set'
|
4
|
+
|
5
|
+
module AwsSdkCodeGenerator
|
6
|
+
class ClientResponseStructureExample
|
7
|
+
|
8
|
+
# @option options [required, Hash] :shape_ref
|
9
|
+
# @option options [required, Hash] :api
|
10
|
+
def initialize(options = {})
|
11
|
+
@shape_ref = options.fetch(:shape_ref)
|
12
|
+
@api = options.fetch(:api)
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_str
|
16
|
+
"@example Response structure\n\n #{entry(@shape_ref, 'resp', Set.new).join("\n ")}"
|
17
|
+
end
|
18
|
+
alias to_s to_str
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def structure(ref, context, visited)
|
23
|
+
lines = []
|
24
|
+
shape = shape(ref)
|
25
|
+
if shape['eventstream']
|
26
|
+
event_types = []
|
27
|
+
# Add event entry
|
28
|
+
event_ctx = shape['members'].each.inject([]) do |ctx, (member_name, member_ref)|
|
29
|
+
event_type = Underscore.underscore(member_name).to_sym
|
30
|
+
event_types << event_type
|
31
|
+
ctx << "For #{event_type.inspect} event available at #on_#{event_type}_event callback"\
|
32
|
+
' and response eventstream enumerator:'
|
33
|
+
event_entry = entry(member_ref, 'event', Set.new).join("\n ")
|
34
|
+
ctx << (event_entry.empty? ? ' #=> EmptyStruct' : event_entry + "\n")
|
35
|
+
end
|
36
|
+
# Add eventstream entry
|
37
|
+
event_ctx.unshift("#{context}.event_types #=> #{event_types.inspect}\n")
|
38
|
+
event_ctx.unshift("#{context} #=> Enumerator")
|
39
|
+
event_ctx.unshift("All events are available at #{context}:")
|
40
|
+
return event_ctx
|
41
|
+
elsif shape['members']
|
42
|
+
shape['members'].each_pair do |member_name, member_ref|
|
43
|
+
lines += entry(member_ref, "#{context}.#{underscore(member_name)}", visited)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
lines
|
47
|
+
end
|
48
|
+
|
49
|
+
def list(ref, context, visited)
|
50
|
+
lines = []
|
51
|
+
lines << "#{context} #=> Array"
|
52
|
+
lines += entry(shape(ref)['member'], "#{context}[0]", visited)
|
53
|
+
lines
|
54
|
+
end
|
55
|
+
|
56
|
+
def map(ref, context, visited)
|
57
|
+
lines = []
|
58
|
+
lines << "#{context} #=> Hash"
|
59
|
+
lines += entry(shape(ref)['value'], "#{context}[#{map_key(ref)}]", visited)
|
60
|
+
lines
|
61
|
+
end
|
62
|
+
|
63
|
+
def map_key(ref)
|
64
|
+
shape(ref)['key']['shape'].inspect
|
65
|
+
end
|
66
|
+
|
67
|
+
def entry(ref, context, visited)
|
68
|
+
if ref['shape'] == 'AttributeValue'
|
69
|
+
return ["#{context} #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>"]
|
70
|
+
elsif visited.include?(ref['shape'])
|
71
|
+
return ["#{context} #=> Types::#{ref['shape']}"]
|
72
|
+
else
|
73
|
+
visited = visited + [ref['shape']]
|
74
|
+
end
|
75
|
+
case shape(ref)['type']
|
76
|
+
when 'structure' then structure(ref, context, visited)
|
77
|
+
when 'list' then list(ref, context, visited)
|
78
|
+
when 'map' then map(ref, context, visited)
|
79
|
+
else ["#{context} #=> #{type(ref)}"]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def type(ref)
|
84
|
+
if shape(ref)['type'] == 'string'
|
85
|
+
string(ref)
|
86
|
+
else
|
87
|
+
Api.ruby_type(ref, @api)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def string(ref)
|
92
|
+
if shape(ref)['enum']
|
93
|
+
"String, one of #{shape(ref)['enum'].map(&:inspect).join(', ')}"
|
94
|
+
else
|
95
|
+
'String'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def shape(ref)
|
100
|
+
Api.shape(ref, @api)
|
101
|
+
end
|
102
|
+
|
103
|
+
def underscore(str)
|
104
|
+
Underscore.underscore(str)
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -1,23 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module AwsSdkCodeGenerator
|
2
4
|
class CodeBuilder
|
3
5
|
|
4
|
-
# @api private
|
5
|
-
GENERATED_SRC_WARNING = <<-WARNING
|
6
|
-
# WARNING ABOUT GENERATED CODE
|
7
|
-
#
|
8
|
-
# This file is generated. See the contributing for info on making contributions:
|
9
|
-
# https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
|
10
|
-
#
|
11
|
-
# WARNING ABOUT GENERATED CODE
|
12
|
-
|
13
|
-
WARNING
|
14
|
-
|
15
|
-
include Helper
|
16
|
-
|
17
6
|
# @option options [required, Service] :service
|
7
|
+
#
|
8
|
+
# @option options [required, String] :aws_sdk_core_lib_path
|
9
|
+
# Path to the lib directory for the source code of the
|
10
|
+
# AWS SDK for Ruby. This is needed so that documentation
|
11
|
+
# can be generated for default plugins and their options.
|
12
|
+
#
|
13
|
+
# @option options [Hash<String, Array<Hash>] :client_examples ({})
|
14
|
+
# A hash of client examples. Hash keys should be API operation method
|
15
|
+
# names (snake_cased). Hash values should be arrays of hashes.
|
16
|
+
# Each hash should contain the following keys:
|
17
|
+
#
|
18
|
+
# * `:name` - The name of the example
|
19
|
+
# * `:code` - The Ruby example code
|
20
|
+
#
|
18
21
|
def initialize(options)
|
19
22
|
@service = options.fetch(:service)
|
20
|
-
|
23
|
+
@aws_sdk_core_lib_path = options.fetch(:aws_sdk_core_lib_path)
|
24
|
+
@client_examples = options.fetch(:client_examples, {})
|
21
25
|
@add_plugins = @service.add_plugins
|
22
26
|
@remove_plugins = @service.remove_plugins
|
23
27
|
@gem_dependencies = @service.gem_dependencies
|
@@ -29,38 +33,52 @@ module AwsSdkCodeGenerator
|
|
29
33
|
@examples = @service.examples
|
30
34
|
end
|
31
35
|
|
36
|
+
# Generates the source for a library as a single string.
|
37
|
+
# @return [String<code>]
|
38
|
+
# @api private
|
32
39
|
def source
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
code = @gem_dependencies.map { |gem_name, _| "require '#{gem_name}'" }
|
41
|
+
source_files.each.with_index do |(file_name, src_code), n|
|
42
|
+
# skip the service module and customizations
|
43
|
+
next if file_name.include? '/customizations.rb'
|
44
|
+
next unless file_name.include? '/'
|
45
|
+
# skip markdown files
|
46
|
+
next if file_name.include? 'README.md'
|
47
|
+
code << src_code
|
38
48
|
end
|
39
|
-
|
40
|
-
svc_mod.root.to_s
|
49
|
+
code.join("\n")
|
41
50
|
end
|
42
51
|
|
43
|
-
# @option options [String] :prefix
|
44
52
|
# @return [Enumerable<String<path>, String<code>>]
|
45
53
|
def source_files(options = {})
|
46
|
-
prefix = options.fetch(:prefix,
|
47
|
-
prefix ||= @module_names.map { |n| underscore(n) }.join('/')
|
48
|
-
# prefix should always be the gemname. The service-module (the first
|
49
|
-
# item yielded below) should be moved from here into the gem builder
|
50
|
-
# The source code builder should simply yield the empty module
|
54
|
+
prefix = options.fetch(:prefix, @service.gem_name)
|
51
55
|
Enumerator.new do |y|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
56
|
+
if @service.protocol == 'api-gateway'
|
57
|
+
y.yield("#{prefix}/../../README.md", apig_readme)
|
58
|
+
y.yield("#{prefix}/plugins/authorizer.rb", authorizer_class)
|
59
|
+
y.yield("#{prefix}/plugins/apig_endpoint.rb", apig_endpoint_class)
|
60
|
+
end
|
61
|
+
y.yield("#{prefix}.rb", service_module(prefix))
|
62
|
+
unless prefix == 'aws-sdk-sts'
|
63
|
+
y.yield("#{prefix}/customizations.rb", '')
|
64
|
+
end
|
65
|
+
y.yield("#{prefix}/types.rb", types_module)
|
66
|
+
if has_eventstream
|
67
|
+
y.yield("#{prefix}/event_streams.rb", event_streams_module)
|
68
|
+
end
|
69
|
+
y.yield("#{prefix}/client_api.rb", client_api_module)
|
70
|
+
y.yield("#{prefix}/client.rb", client_class)
|
71
|
+
if @service.protocol_settings['h2'] == 'eventstream'
|
72
|
+
y.yield("#{prefix}/async_client.rb", async_client_class)
|
73
|
+
end
|
74
|
+
y.yield("#{prefix}/errors.rb", errors_module)
|
75
|
+
y.yield("#{prefix}/waiters.rb", waiters_module) if @waiters
|
76
|
+
y.yield("#{prefix}/resource.rb", root_resource_class)
|
77
|
+
if @resources
|
78
|
+
@resources['resources'].keys.sort.each do |name|
|
79
|
+
path = "#{prefix}/#{Underscore.underscore(name)}.rb"
|
80
|
+
code = resource_class(name, @resources['resources'][name])
|
81
|
+
y.yield(path, code)
|
64
82
|
end
|
65
83
|
end
|
66
84
|
end
|
@@ -68,134 +86,129 @@ module AwsSdkCodeGenerator
|
|
68
86
|
|
69
87
|
private
|
70
88
|
|
71
|
-
def
|
72
|
-
|
73
|
-
yield(client_api_module, :unwrapped)
|
74
|
-
yield(client_class, :wrapped)
|
75
|
-
yield(errors_module, :unwrapped)
|
76
|
-
yield(waiters_module, :wrapped) if @waiters
|
77
|
-
yield(root_resource_class, :unwrapped)
|
78
|
-
if @resources
|
79
|
-
@resources['resources'].keys.sort.each do |name|
|
80
|
-
yield(resource_class(name, @resources['resources'][name]), :unwrapped)
|
81
|
-
end
|
82
|
-
end
|
89
|
+
def service_module(prefix)
|
90
|
+
Views::ServiceModule.new(service: @service, prefix: prefix).render
|
83
91
|
end
|
84
92
|
|
85
|
-
def
|
86
|
-
|
87
|
-
mod.module(module_name)
|
88
|
-
end
|
93
|
+
def types_module
|
94
|
+
Views::TypesModule.new(service: @service).render
|
89
95
|
end
|
90
96
|
|
91
|
-
def
|
92
|
-
|
93
|
-
svc_mod.add(mod)
|
94
|
-
svc_mod.root.to_s
|
97
|
+
def event_streams_module
|
98
|
+
Views::EventStreamsModule.new(service: @service).render
|
95
99
|
end
|
96
100
|
|
97
|
-
def
|
98
|
-
|
99
|
-
prefix: autoload_prefix,
|
100
|
-
resources: @resources,
|
101
|
-
waiters: !!@waiters
|
102
|
-
)
|
103
|
-
svc_mod = new_svc_module
|
104
|
-
@gem_dependencies.each { |gem_name, _| svc_mod.require(gem_name) }
|
105
|
-
svc_mod.docstring(service_docstring)
|
106
|
-
svc_mod.code("GEM_VERSION = '#{@service.gem_version}'")
|
107
|
-
autoloads.apply(svc_mod)
|
108
|
-
@callback.call(svc_mod) if @callback
|
109
|
-
svc_mod.root.to_s
|
101
|
+
def client_api_module
|
102
|
+
Views::ClientApiModule.new(service: @service).render
|
110
103
|
end
|
111
104
|
|
112
|
-
def
|
113
|
-
|
105
|
+
def client_class
|
106
|
+
Views::ClientClass.new(
|
107
|
+
service_identifier: @service.identifier,
|
108
|
+
service_name: @service.name,
|
109
|
+
protocol_settings: @service.protocol_settings,
|
110
|
+
module_name: @service.module_name,
|
111
|
+
gem_name: @service.gem_name,
|
112
|
+
gem_version: @service.gem_version,
|
113
|
+
aws_sdk_core_lib_path: @aws_sdk_core_lib_path,
|
114
|
+
client_examples: @client_examples,
|
115
|
+
protocol: @service.protocol,
|
116
|
+
signature_version: @service.signature_version,
|
117
|
+
require_endpoint_discovery: @service.require_endpoint_discovery,
|
118
|
+
add_plugins: @service.add_plugins,
|
119
|
+
remove_plugins: @service.remove_plugins,
|
120
|
+
api: @service.api,
|
121
|
+
paginators: @service.paginators,
|
122
|
+
waiters: @service.waiters,
|
123
|
+
examples: @service.examples,
|
124
|
+
custom: @service.protocol == 'api-gateway'
|
125
|
+
).render
|
126
|
+
end
|
127
|
+
|
128
|
+
def async_client_class
|
129
|
+
Views::AsyncClientClass.new(
|
130
|
+
service_identifier: @service.identifier,
|
131
|
+
service_name: @service.name,
|
132
|
+
protocol_settings: @service.protocol_settings,
|
133
|
+
module_name: @service.module_name,
|
134
|
+
gem_name: @service.gem_name,
|
135
|
+
gem_version: @service.gem_version,
|
136
|
+
aws_sdk_core_lib_path: @aws_sdk_core_lib_path,
|
137
|
+
protocol: @service.protocol,
|
138
|
+
signature_version: @service.signature_version,
|
139
|
+
add_plugins: @service.add_plugins,
|
140
|
+
remove_plugins: @service.remove_plugins,
|
141
|
+
api: @service.api,
|
142
|
+
async_client: true
|
143
|
+
).render
|
114
144
|
end
|
115
145
|
|
116
|
-
def
|
117
|
-
|
146
|
+
def errors_module
|
147
|
+
Views::ErrorsModule.new(service: @service).render
|
118
148
|
end
|
119
149
|
|
120
|
-
def
|
121
|
-
|
122
|
-
|
123
|
-
identifier: @module_names.last.downcase,
|
124
|
-
api: @api,
|
150
|
+
def waiters_module
|
151
|
+
Views::WaitersModule.new(
|
152
|
+
module_name: @service.module_name,
|
125
153
|
waiters: @waiters,
|
126
|
-
|
127
|
-
|
128
|
-
remove_plugins: @remove_plugins,
|
129
|
-
gem_name: @service.gem_name,
|
130
|
-
gem_version: @service.gem_version,
|
131
|
-
)
|
132
|
-
svc_mod.add(klass)
|
133
|
-
klass
|
154
|
+
custom: @service.protocol == 'api-gateway'
|
155
|
+
).render
|
134
156
|
end
|
135
157
|
|
136
|
-
def
|
137
|
-
|
158
|
+
def authorizer_class
|
159
|
+
Views::AuthorizerClass.new(
|
160
|
+
module_name: @service.module_name
|
161
|
+
).render
|
138
162
|
end
|
139
163
|
|
140
|
-
def
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
)
|
145
|
-
svc_mod.add(klass)
|
146
|
-
klass
|
164
|
+
def apig_endpoint_class
|
165
|
+
Views::APIGEndpointClass.new(
|
166
|
+
module_name: @service.module_name,
|
167
|
+
default_endpoint: @service.default_endpoint
|
168
|
+
).render
|
147
169
|
end
|
148
170
|
|
149
171
|
def root_resource_class
|
150
|
-
|
151
|
-
|
152
|
-
|
172
|
+
Views::RootResourceClass.new(
|
173
|
+
module_name: @service.module_name,
|
174
|
+
service_name: @service.name,
|
175
|
+
resources: @service.resources,
|
153
176
|
paginators: @paginators,
|
154
|
-
|
155
|
-
|
177
|
+
api: @api,
|
178
|
+
custom: @service.protocol == 'api-gateway'
|
179
|
+
).render
|
156
180
|
end
|
157
181
|
|
158
182
|
def resource_class(resource_name, resource_definition)
|
159
|
-
|
183
|
+
Views::ResourceClass.new(
|
184
|
+
module_name: @service.module_name,
|
185
|
+
class_name: resource_name,
|
160
186
|
api: @api,
|
161
|
-
name: resource_name,
|
162
|
-
resource: resource_definition,
|
163
187
|
paginators: @paginators,
|
164
188
|
waiters: @waiters,
|
165
|
-
|
189
|
+
resource: resource_definition,
|
190
|
+
custom: @service.protocol == 'api-gateway'
|
191
|
+
).render
|
166
192
|
end
|
167
193
|
|
168
|
-
def
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
).
|
194
|
+
def apig_readme
|
195
|
+
Views::APIGReadme.new(
|
196
|
+
service_name: @service.name,
|
197
|
+
gem_major_version: @service.gem_version.split('.').first,
|
198
|
+
gem_name: @service.gem_name,
|
199
|
+
module_name: @service.module_name
|
200
|
+
).render
|
175
201
|
end
|
176
202
|
|
177
|
-
|
178
|
-
# This method can be removed if move to used the combined API and
|
179
|
-
# docs JSON document.
|
180
|
-
def apply_docs(api, docs)
|
181
|
-
api['documentation'] = docs['service']
|
182
|
-
docs['operations'].each do |name, docstring|
|
183
|
-
api['operations'][name]['documentation'] = docstring
|
184
|
-
end
|
185
|
-
docs['shapes'].each do |shape_name, shape_docs|
|
186
|
-
api['shapes'][shape_name]['documentation'] = shape_docs['base']
|
187
|
-
shape_docs['refs'].each do |ref, ref_docs|
|
188
|
-
ref_shape, ref_member = ref.split('$')
|
189
|
-
case api['shapes'][ref_shape]['type']
|
190
|
-
when 'structure'
|
191
|
-
api['shapes'][ref_shape]['members'][ref_member]['documentation'] = ref_docs
|
192
|
-
when 'list', 'map'
|
193
|
-
api['shapes'][ref_shape][ref_member]['documentation'] = ref_docs
|
194
|
-
end
|
203
|
+
private
|
195
204
|
|
196
|
-
|
205
|
+
def has_eventstream
|
206
|
+
@service.api['shapes'].each do |_, ref|
|
207
|
+
return true if ref['eventstream']
|
197
208
|
end
|
209
|
+
false
|
198
210
|
end
|
199
211
|
|
200
212
|
end
|
213
|
+
|
201
214
|
end
|