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,108 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
|
5
|
-
# TODO : build and return collection
|
6
|
-
# TODO : filter @option tags related to pagination
|
7
|
-
# TODO : don't filter @option tags that can be merged, e.g. EC2 Filters
|
8
|
-
class HasManyAssociation < Dsl::Method
|
9
|
-
|
10
|
-
# @option options [required, String] :name
|
11
|
-
# @option options [required, Hash] :has_many
|
12
|
-
# @option options [required, Hash] :api
|
13
|
-
# @option options [required, Hash] :paginators
|
14
|
-
# @option options [String] :var_name ('')
|
15
|
-
def initialize(options = {})
|
16
|
-
|
17
|
-
name = options.fetch(:name)
|
18
|
-
@has_many = options.fetch(:has_many)
|
19
|
-
@paginators = options.fetch(:paginators)
|
20
|
-
@var_name = options.fetch(:var_name, '')
|
21
|
-
|
22
|
-
super(underscore(name))
|
23
|
-
|
24
|
-
param('options', type:Hash, default:{})
|
25
|
-
|
26
|
-
ClientRequestDocs.new(
|
27
|
-
request: @has_many['request'],
|
28
|
-
api: options.fetch(:api),
|
29
|
-
skip: paging_options,
|
30
|
-
var_name: @var_name,
|
31
|
-
returns: name.downcase,
|
32
|
-
).apply(self)
|
33
|
-
|
34
|
-
paginated? ? paginated_reqeust : non_paginated_request
|
35
|
-
|
36
|
-
returns(collection_class)
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def paginated_reqeust
|
42
|
-
code do |c1|
|
43
|
-
c1 << 'batches = Enumerator.new do |y|'
|
44
|
-
c1.indent do |c2|
|
45
|
-
c2 << client_request(true)
|
46
|
-
c2 << "resp.each_page do |page|"
|
47
|
-
c2.indent do |c3|
|
48
|
-
c3 << 'batch = []'
|
49
|
-
c3 << BatchBuilder.new(resource: @has_many['resource'], resp_var_name:'page')
|
50
|
-
c3 << 'y.yield(batch)'
|
51
|
-
end
|
52
|
-
c2 << 'end'
|
53
|
-
end
|
54
|
-
c1 << 'end'
|
55
|
-
c1 << "#{collection_class}.new(batches)"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def non_paginated_request
|
60
|
-
code do |code|
|
61
|
-
code << 'batches = Enumerator.new do |y|'
|
62
|
-
code.indent do |c|
|
63
|
-
c << 'batch = []'
|
64
|
-
c << client_request(true)
|
65
|
-
c << BatchBuilder.new(resource: @has_many['resource'])
|
66
|
-
c << 'y.yield(batch)'
|
67
|
-
end
|
68
|
-
code << 'end'
|
69
|
-
code << "#{collection_class}.new(batches)"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def client_request(resp)
|
74
|
-
ClientRequest.new(
|
75
|
-
request: @has_many['request'],
|
76
|
-
resp: resp
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
def collection_class
|
81
|
-
"#{@has_many['resource']['type']}::Collection"
|
82
|
-
end
|
83
|
-
|
84
|
-
def paginated?
|
85
|
-
@paginators &&
|
86
|
-
@paginators['pagination'][operation_name] &&
|
87
|
-
@paginators['pagination'][operation_name]['input_token']
|
88
|
-
end
|
89
|
-
|
90
|
-
def paging_options
|
91
|
-
if paginated?
|
92
|
-
skip = []
|
93
|
-
skip << @paginators['pagination'][operation_name]['input_token']
|
94
|
-
skip << @paginators['pagination'][operation_name]['limit_key']
|
95
|
-
skip.compact
|
96
|
-
else
|
97
|
-
[]
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def operation_name
|
102
|
-
@has_many['request']['operation']
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class IdentifierGetter < Dsl::Method
|
5
|
-
|
6
|
-
include Helper
|
7
|
-
|
8
|
-
# @option options [required, Hash] :identifier
|
9
|
-
def initialize(options)
|
10
|
-
identifier = options.fetch(:identifier)
|
11
|
-
name = underscore(identifier.fetch('name'))
|
12
|
-
super(name)
|
13
|
-
returns(identifier_type(identifier))
|
14
|
-
code("@#{name}")
|
15
|
-
if
|
16
|
-
identifier['memberName'] &&
|
17
|
-
identifier['memberName'] != identifier['name']
|
18
|
-
then
|
19
|
-
alias_as(underscore(identifier['memberName']))
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class IdentifiersMethod < Dsl::Method
|
5
|
-
|
6
|
-
# @option options [required, Array<Hash>] :identifiers
|
7
|
-
def initialize(options = {})
|
8
|
-
identifiers = options.fetch(:identifiers)
|
9
|
-
super('identifiers')
|
10
|
-
docstring('@deprecated')
|
11
|
-
docstring('@api private')
|
12
|
-
identifiers ||= []
|
13
|
-
identifiers = (identifiers || []).inject({}) do |hash, identifier|
|
14
|
-
name = underscore(identifier['name'])
|
15
|
-
hash[name.to_sym] = "@#{name}"
|
16
|
-
hash
|
17
|
-
end
|
18
|
-
code(HashFormatter.new(inline: true).format(identifiers))
|
19
|
-
end
|
20
|
-
|
21
|
-
def lines
|
22
|
-
super + ["deprecated(:#{name})"]
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class InitializeMethod < Dsl::Method
|
5
|
-
|
6
|
-
include Helper
|
7
|
-
|
8
|
-
# @option options [required, Hash] :resource]
|
9
|
-
def initialize(options = {})
|
10
|
-
resource = options.fetch(:resource)
|
11
|
-
@identifiers = resource["identifiers"] || []
|
12
|
-
@shape_name = resource["shape"]
|
13
|
-
super('initialize')
|
14
|
-
param('*args')
|
15
|
-
positional_docstring unless @identifiers.empty?
|
16
|
-
options_docstring
|
17
|
-
code('options = Hash === args.last ? args.pop.dup : {}')
|
18
|
-
extract_identifiers
|
19
|
-
if @shape_name
|
20
|
-
code('@data = options.delete(:data)')
|
21
|
-
else
|
22
|
-
code('@data = Aws::EmptyStructure.new')
|
23
|
-
end
|
24
|
-
code('@client = options.delete(:client) || Client.new(options)')
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def positional_docstring
|
30
|
-
names = @identifiers.map { |i| underscore(i['name']) }.join(', ')
|
31
|
-
docstring("@overload def initialize(#{names}, options = {})")
|
32
|
-
identifiers.each do |name, type, n|
|
33
|
-
docstring(" @param [#{type}] #{name}")
|
34
|
-
end
|
35
|
-
apply_client_option
|
36
|
-
end
|
37
|
-
|
38
|
-
def options_docstring
|
39
|
-
docstring("@overload def initialize(options = {})")
|
40
|
-
identifiers.each do |name, type, n|
|
41
|
-
docstring(" @option options [required, #{type}] :#{name}")
|
42
|
-
end
|
43
|
-
apply_client_option
|
44
|
-
end
|
45
|
-
|
46
|
-
def apply_client_option
|
47
|
-
docstring(" @option options [Client] :client")
|
48
|
-
end
|
49
|
-
|
50
|
-
def extract_identifiers
|
51
|
-
identifiers.each do |name, type, n|
|
52
|
-
code("@#{name} = extract_#{name}(args, options)")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def identifiers
|
57
|
-
Enumerator.new do |y|
|
58
|
-
@identifiers.each.with_index do |i, n|
|
59
|
-
y.yield(underscore(i['name']), identifier_type(i), n)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class LoadMethod < Dsl::Method
|
5
|
-
|
6
|
-
LOAD_NOT_IMPLEMENTED =
|
7
|
-
"#load is not implemented, data only available via enumeration"
|
8
|
-
|
9
|
-
# @option options [required, String] :resource_name
|
10
|
-
# @option options [required, Hash] :definition
|
11
|
-
def initialize(options = {})
|
12
|
-
@resource_name = options.fetch(:resource_name)
|
13
|
-
@load = options.fetch(:definition)
|
14
|
-
super('load')
|
15
|
-
alias_as('reload')
|
16
|
-
if @load
|
17
|
-
docstring(load_docstring)
|
18
|
-
code do |c|
|
19
|
-
c << client_request
|
20
|
-
c << "@data = resp.#{load_path}"
|
21
|
-
c << "self"
|
22
|
-
end
|
23
|
-
else
|
24
|
-
docstring('@raise [Errors::ResourceNotLoadable]')
|
25
|
-
docstring('@api private')
|
26
|
-
code do |c|
|
27
|
-
c << "msg = #{LOAD_NOT_IMPLEMENTED.inspect}"
|
28
|
-
c << "raise Errors::ResourceNotLoadable, msg"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def client_request
|
36
|
-
ClientRequest.new(request: @load['request'], resp: true, merge: false)
|
37
|
-
end
|
38
|
-
|
39
|
-
def load_path
|
40
|
-
if @load['path'] == '@'
|
41
|
-
'data'
|
42
|
-
else
|
43
|
-
@load['path'].downcase
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def operation_name
|
48
|
-
underscore(@load['request']['operation'])
|
49
|
-
end
|
50
|
-
|
51
|
-
def load_docstring
|
52
|
-
<<-MARKDOWN
|
53
|
-
Loads, or reloads {#data} for the current {#{@resource_name}}.
|
54
|
-
Returns `self` making it possible to chain methods.
|
55
|
-
|
56
|
-
#{underscore(@resource_name)}.reload.data
|
57
|
-
|
58
|
-
@return [self]
|
59
|
-
MARKDOWN
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class ValueSource < String
|
5
|
-
|
6
|
-
def initialize(value)
|
7
|
-
super(send("param_#{underscore(value['source'])}", value))
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def param_identifier(param)
|
13
|
-
"@" + underscore(param['name'])
|
14
|
-
end
|
15
|
-
|
16
|
-
def param_data(param)
|
17
|
-
path = param['path']
|
18
|
-
if path == '@'
|
19
|
-
'data'
|
20
|
-
elsif path.match(/^(\w(\[0\])?)+(\.\w+)*$/)
|
21
|
-
'data.' + underscore_path(path)
|
22
|
-
else
|
23
|
-
raise "unsupported path: #{path.inspect}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def param_response(param)
|
28
|
-
if param['path'] == '@'
|
29
|
-
'resp.data'
|
30
|
-
else
|
31
|
-
'resp.data.' + underscore_path(param['path'])
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def param_request_parameter(param)
|
36
|
-
if param['path'].match(/^\w+(\.\w+)*$/)
|
37
|
-
"options" + path_parts(param['path']).map { |part| "[:#{part}]" }.join
|
38
|
-
else
|
39
|
-
raise "unsupported path expression: #{param['path']}"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def param_string(param)
|
44
|
-
param['value'].inspect
|
45
|
-
end
|
46
|
-
alias param_integer param_string
|
47
|
-
alias param_boolean param_string
|
48
|
-
|
49
|
-
def param_input(param)
|
50
|
-
underscore(param['target'])
|
51
|
-
end
|
52
|
-
|
53
|
-
def underscore(str)
|
54
|
-
Underscore.underscore(str)
|
55
|
-
end
|
56
|
-
|
57
|
-
def underscore_path(path)
|
58
|
-
path.gsub(/\w+/) { |part| underscore(part) }
|
59
|
-
end
|
60
|
-
|
61
|
-
def path_parts(path)
|
62
|
-
path.split('.').map { |part| underscore(part) }
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module AwsSdkCodeGenerator
|
2
|
-
module Generators
|
3
|
-
module Resource
|
4
|
-
class WaiterMethod < Dsl::Method
|
5
|
-
|
6
|
-
# @option options [required, String] :resource_name
|
7
|
-
# @option options [required, Hash] :resource
|
8
|
-
# @option options [required, String] :resource_waiter_name
|
9
|
-
# @option options [required, Hash] :resource_waiter
|
10
|
-
# @option options [required, Hash] :waiter
|
11
|
-
def initialize(options)
|
12
|
-
resource_name = options.fetch(:resource_name)
|
13
|
-
@resource = options.fetch(:resource)
|
14
|
-
@resource_waiter = options.fetch(:resource_waiter)
|
15
|
-
@waiter_name = @resource_waiter['waiterName']
|
16
|
-
waiter = options.fetch(:waiter)
|
17
|
-
super("wait_until_#{underscore(options.fetch(:resource_waiter_name))}")
|
18
|
-
param('options', type: 'Hash', default:{})
|
19
|
-
option(name: 'max_attempts', type:Integer, default: waiter['maxAttempts'])
|
20
|
-
option(name: 'delay', type:Float, default: waiter['delay'])
|
21
|
-
option(name: 'before_attempt', type:Proc)
|
22
|
-
option(name: 'before_wait', type:Proc)
|
23
|
-
|
24
|
-
returns(resource_name)
|
25
|
-
|
26
|
-
resp = @resource_waiter['path'] ? 'resp = ' : ''
|
27
|
-
code(<<-CODE)
|
28
|
-
options, params = separate_params_and_options(options)
|
29
|
-
waiter = Waiters::#{@waiter_name}.new(options)
|
30
|
-
yield_waiter_and_warn(waiter, &Proc.new) if block_given?
|
31
|
-
#{resp}waiter.wait(params.merge(#{args}))
|
32
|
-
#{resource_name}.new(#{constructor_args})
|
33
|
-
CODE
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def args
|
39
|
-
ClientRequestParams.new(params: @resource_waiter['params']).to_s.strip
|
40
|
-
end
|
41
|
-
|
42
|
-
def constructor_args
|
43
|
-
args = {}
|
44
|
-
(@resource['identifiers'] || []).each do |i|
|
45
|
-
name = underscore(i['name']).to_sym
|
46
|
-
args[name] = "@#{name}"
|
47
|
-
end
|
48
|
-
if @resource_waiter['path']
|
49
|
-
args[:data] = ValueSource.new(
|
50
|
-
'source' => 'response',
|
51
|
-
'path' => @resource_waiter['path']
|
52
|
-
)
|
53
|
-
end
|
54
|
-
args[:client] = '@client'
|
55
|
-
HashFormatter.new.format(args)
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,325 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
|
-
module AwsSdkCodeGenerator
|
4
|
-
module Generators
|
5
|
-
class ResourceClass < Dsl::Class
|
6
|
-
|
7
|
-
extend Helper
|
8
|
-
|
9
|
-
# @option options [required, String] :name
|
10
|
-
# @option options [required, Hash] :resource
|
11
|
-
# @option options [required, Hash] :api
|
12
|
-
# @option options [Hash] :paginators
|
13
|
-
# @option options [Hash] :waiters
|
14
|
-
# @option options [String] :var_name (underscore(name))
|
15
|
-
def initialize(options)
|
16
|
-
@api = options.fetch(:api)
|
17
|
-
@name = options.fetch(:name)
|
18
|
-
@resource = options.fetch(:resource)
|
19
|
-
@paginators = options.fetch(:paginators, nil)
|
20
|
-
@waiters = options.fetch(:waiters, nil)
|
21
|
-
@var_name = options.fetch(:var_name, underscore(@name))
|
22
|
-
super(@name)
|
23
|
-
build
|
24
|
-
check_for_method_name_conflicts!
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def build
|
30
|
-
extend_module('Aws::Deprecations')
|
31
|
-
add(initialize_method)
|
32
|
-
code('# @!group Read-Only Attributes')
|
33
|
-
add(*identifier_getters)
|
34
|
-
add(*data_attribute_getters)
|
35
|
-
code('# @!endgroup')
|
36
|
-
add(client_getter)
|
37
|
-
add(load_method)
|
38
|
-
add(data_method)
|
39
|
-
add(data_loaded_method)
|
40
|
-
add(exists_method)
|
41
|
-
add(*waiters)
|
42
|
-
apply_actions
|
43
|
-
apply_associations
|
44
|
-
add(identifiers_method)
|
45
|
-
add(*private_methods)
|
46
|
-
add(batch_action)
|
47
|
-
end
|
48
|
-
|
49
|
-
def initialize_method
|
50
|
-
Generators::Resource::InitializeMethod.new(resource: @resource)
|
51
|
-
end
|
52
|
-
|
53
|
-
def identifier_getters
|
54
|
-
identifiers.map do |i|
|
55
|
-
Generators::Resource::IdentifierGetter.new(identifier: i)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def data_attribute_getters
|
60
|
-
data_attribute_names.map do |member_name, member_ref|
|
61
|
-
Generators::Resource::DataAttributeGetter.new(
|
62
|
-
api: @api,
|
63
|
-
member_name: member_name,
|
64
|
-
member_ref: member_ref
|
65
|
-
)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def client_getter
|
70
|
-
Generators::Resource::ClientGetter.new
|
71
|
-
end
|
72
|
-
|
73
|
-
def load_method
|
74
|
-
Generators::Resource::LoadMethod.new(
|
75
|
-
resource_name: @name,
|
76
|
-
definition: @resource['load']
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
def data_method
|
81
|
-
Generators::Resource::DataMethod.new(
|
82
|
-
resource_name: @name,
|
83
|
-
resource: @resource
|
84
|
-
)
|
85
|
-
end
|
86
|
-
|
87
|
-
def data_loaded_method
|
88
|
-
Generators::Resource::DataLoadedMethod.new
|
89
|
-
end
|
90
|
-
|
91
|
-
def exists_method
|
92
|
-
if @resource['waiters'] && @resource['waiters']['Exists']
|
93
|
-
Generators::Resource::ExistsMethod.new(
|
94
|
-
resource_name: @name,
|
95
|
-
resource: @resource,
|
96
|
-
waiters: @waiters,
|
97
|
-
)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def waiters
|
102
|
-
(@resource['waiters'] || {}).map do |waiter_name, waiter|
|
103
|
-
Generators::Resource::WaiterMethod.new(
|
104
|
-
resource_name: @name,
|
105
|
-
resource: @resource,
|
106
|
-
resource_waiter_name: waiter_name,
|
107
|
-
resource_waiter: waiter,
|
108
|
-
waiter: @waiters['waiters'][waiter['waiterName']]
|
109
|
-
)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def apply_actions
|
114
|
-
actions = @resource['actions'] || {}
|
115
|
-
return if actions.empty?
|
116
|
-
code('# @!group Actions')
|
117
|
-
actions.each do |name, action|
|
118
|
-
add(Resource::Action.new(
|
119
|
-
api: @api,
|
120
|
-
name: name,
|
121
|
-
action: action,
|
122
|
-
var_name: @var_name,
|
123
|
-
))
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def apply_associations
|
128
|
-
associations = []
|
129
|
-
associations += has_associations
|
130
|
-
associations += has_many_associations
|
131
|
-
|
132
|
-
return if associations.empty?
|
133
|
-
|
134
|
-
code('# @!group Associations')
|
135
|
-
associations.sort_by(&:name).each do |association_method|
|
136
|
-
add(association_method)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def has_associations
|
141
|
-
(@resource['has'] || {}).map do |name, has|
|
142
|
-
Resource::HasAssociation.new(
|
143
|
-
api: @api,
|
144
|
-
name: name,
|
145
|
-
has: has
|
146
|
-
)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
def has_many_associations
|
151
|
-
(@resource['hasMany'] || {}).map do |name, has_many|
|
152
|
-
Resource::HasManyAssociation.new(
|
153
|
-
name: name,
|
154
|
-
has_many: has_many,
|
155
|
-
api: @api,
|
156
|
-
paginators: @paginators,
|
157
|
-
var_name: @var_name,
|
158
|
-
)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
def batch_action
|
163
|
-
Generators::Resource::CollectionClass.new(
|
164
|
-
resource_name: @name,
|
165
|
-
resource: @resource,
|
166
|
-
api: @api,
|
167
|
-
)
|
168
|
-
end
|
169
|
-
|
170
|
-
def identifiers_method
|
171
|
-
Generators::Resource::IdentifiersMethod.new(
|
172
|
-
identifiers: identifiers
|
173
|
-
)
|
174
|
-
end
|
175
|
-
|
176
|
-
def private_methods
|
177
|
-
methods = []
|
178
|
-
methods.concat(extract_identifier_methods)
|
179
|
-
methods << yield_waiter_and_warn_method
|
180
|
-
methods << separate_params_and_options
|
181
|
-
methods.compact
|
182
|
-
end
|
183
|
-
|
184
|
-
def extract_identifier_methods
|
185
|
-
identifiers.map.with_index do |identifier, n|
|
186
|
-
Generators::Resource::ExtractIdentifierMethod.new(
|
187
|
-
identifier: identifier,
|
188
|
-
index: n
|
189
|
-
)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def identifiers
|
194
|
-
@resource['identifiers'] || []
|
195
|
-
end
|
196
|
-
|
197
|
-
def data_attribute_names
|
198
|
-
|
199
|
-
skip = Set.new
|
200
|
-
|
201
|
-
# do no duplicate identifiers
|
202
|
-
identifiers.each do |i|
|
203
|
-
skip << i['name']
|
204
|
-
skip << i['memberName'] if i.key?('memberName')
|
205
|
-
end
|
206
|
-
|
207
|
-
# do no duplicate action names
|
208
|
-
(@resource['actions'] || {}).keys.each do |action_name|
|
209
|
-
skip << action_name
|
210
|
-
end
|
211
|
-
|
212
|
-
# do no duplicate has association names
|
213
|
-
(@resource['has'] || {}).keys.each do |association_name|
|
214
|
-
skip << association_name
|
215
|
-
end
|
216
|
-
|
217
|
-
# do no duplicate hasMany association names
|
218
|
-
(@resource['hasMany'] || {}).keys.each do |association_name|
|
219
|
-
skip << association_name
|
220
|
-
end
|
221
|
-
|
222
|
-
shape = (@api['shapes'] || {})[@resource['shape']] || {}
|
223
|
-
members = shape['members'] || {}
|
224
|
-
Enumerator.new do |y|
|
225
|
-
members.each do |member_name, member_ref|
|
226
|
-
unless skip.include?(member_name)
|
227
|
-
y.yield(member_name, member_ref)
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
def check_for_method_name_conflicts!
|
234
|
-
|
235
|
-
names = Set.new
|
236
|
-
|
237
|
-
# Ensure the resource does not have duplicate names. This
|
238
|
-
# includes comparing identifier names, action names, association
|
239
|
-
# names, e.g. anything that is exposed as a method.
|
240
|
-
@code_objects.each do |code_obj|
|
241
|
-
if Dsl::Method === code_obj || Dsl::AttributeAccessor === code_obj
|
242
|
-
check_for_duplicate_method!(code_obj.name, names)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
# It is possible for Dsl::Method#aliases to collide with
|
247
|
-
# code object names. Remove aliases that collide.
|
248
|
-
@code_objects.each do |code_obj|
|
249
|
-
if Dsl::Method === code_obj
|
250
|
-
code_obj.aliases.each do |alias_name|
|
251
|
-
if names.include?(alias_name.to_s)
|
252
|
-
code_obj.aliases.delete(alias_name.to_s)
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
# Compare all resource methods against methods defined
|
259
|
-
# on Ruby's Object class as an instance method. We need to
|
260
|
-
# ensure we do not clobber built in Ruby functionality.
|
261
|
-
Object.instance_methods.each do |obj_method_name|
|
262
|
-
if names.include?(obj_method_name.to_s)
|
263
|
-
raise Errors::ResourceMethodConflict.new(
|
264
|
-
resource_name: @name,
|
265
|
-
method_name: obj_method_name
|
266
|
-
)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
def check_for_duplicate_method!(method_name, names)
|
272
|
-
method_name = method_name.to_s
|
273
|
-
if names.include?(method_name)
|
274
|
-
raise Errors::ResourceMethodConflict.new(
|
275
|
-
resource_name: @name,
|
276
|
-
method_name: method_name
|
277
|
-
)
|
278
|
-
else
|
279
|
-
names << method_name
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
def yield_waiter_and_warn_method
|
284
|
-
if @resource['waiters'] && @resource['waiters'].size > 0
|
285
|
-
Dsl::Method.new(:yield_waiter_and_warn, access: :private) do |m|
|
286
|
-
m.param(:waiter)
|
287
|
-
m.block_param
|
288
|
-
m.code(<<-CODE)
|
289
|
-
if !@waiter_block_warned
|
290
|
-
msg = "pass options to configure the waiter; "
|
291
|
-
msg << "yielding the waiter is deprecated"
|
292
|
-
warn(msg)
|
293
|
-
@waiter_block_warned = true
|
294
|
-
end
|
295
|
-
yield(waiter.waiter)
|
296
|
-
CODE
|
297
|
-
end
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
def separate_params_and_options
|
302
|
-
if @resource['waiters'] && @resource['waiters'].size > 0
|
303
|
-
Dsl::Method.new(:separate_params_and_options, access: :private) do |m|
|
304
|
-
m.param(:options)
|
305
|
-
m.code(<<-CODE)
|
306
|
-
opts = Set.new([:client, :max_attempts, :delay, :before_attempt, :before_wait])
|
307
|
-
waiter_opts = {}
|
308
|
-
waiter_params = {}
|
309
|
-
options.each_pair do |key, value|
|
310
|
-
if opts.include?(key)
|
311
|
-
waiter_opts[key] = value
|
312
|
-
else
|
313
|
-
waiter_params[key] = value
|
314
|
-
end
|
315
|
-
end
|
316
|
-
waiter_opts[:client] ||= @client
|
317
|
-
[waiter_opts, waiter_params]
|
318
|
-
CODE
|
319
|
-
end
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
end
|
324
|
-
end
|
325
|
-
end
|