aws-sdk-code-generator 0.1.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 +7 -0
- data/lib/aws-sdk-code-generator.rb +91 -0
- data/lib/aws-sdk-code-generator/apply_docs.rb +37 -0
- data/lib/aws-sdk-code-generator/code_builder.rb +201 -0
- data/lib/aws-sdk-code-generator/dsl/access_control_statement.rb +23 -0
- data/lib/aws-sdk-code-generator/dsl/attribute_accessor.rb +43 -0
- data/lib/aws-sdk-code-generator/dsl/attribute_reader.rb +11 -0
- data/lib/aws-sdk-code-generator/dsl/attribute_writer.rb +11 -0
- data/lib/aws-sdk-code-generator/dsl/autoload_statement.rb +15 -0
- data/lib/aws-sdk-code-generator/dsl/block_param.rb +11 -0
- data/lib/aws-sdk-code-generator/dsl/class.rb +27 -0
- data/lib/aws-sdk-code-generator/dsl/code_literal.rb +66 -0
- data/lib/aws-sdk-code-generator/dsl/code_object.rb +33 -0
- data/lib/aws-sdk-code-generator/dsl/docstring.rb +36 -0
- data/lib/aws-sdk-code-generator/dsl/eigenclass.rb +15 -0
- data/lib/aws-sdk-code-generator/dsl/extend_statement.rb +12 -0
- data/lib/aws-sdk-code-generator/dsl/formatter.rb +25 -0
- data/lib/aws-sdk-code-generator/dsl/include_statement.rb +17 -0
- data/lib/aws-sdk-code-generator/dsl/main.rb +105 -0
- data/lib/aws-sdk-code-generator/dsl/method.rb +108 -0
- data/lib/aws-sdk-code-generator/dsl/module.rb +167 -0
- data/lib/aws-sdk-code-generator/dsl/option_tag.rb +36 -0
- data/lib/aws-sdk-code-generator/dsl/param.rb +43 -0
- data/lib/aws-sdk-code-generator/dsl/param_list.rb +38 -0
- data/lib/aws-sdk-code-generator/dsl/return_tag.rb +19 -0
- data/lib/aws-sdk-code-generator/dsl/tag_default.rb +20 -0
- data/lib/aws-sdk-code-generator/dsl/tag_docstring.rb +27 -0
- data/lib/aws-sdk-code-generator/dsl/tag_type.rb +18 -0
- data/lib/aws-sdk-code-generator/errors.rb +30 -0
- data/lib/aws-sdk-code-generator/gem_builder.rb +71 -0
- data/lib/aws-sdk-code-generator/generators/client_api_module.rb +334 -0
- data/lib/aws-sdk-code-generator/generators/client_class.rb +389 -0
- data/lib/aws-sdk-code-generator/generators/client_operation_documentation.rb +166 -0
- data/lib/aws-sdk-code-generator/generators/errors_module.rb +25 -0
- data/lib/aws-sdk-code-generator/generators/resource/action.rb +88 -0
- data/lib/aws-sdk-code-generator/generators/resource/batch_builder.rb +211 -0
- data/lib/aws-sdk-code-generator/generators/resource/builder.rb +50 -0
- data/lib/aws-sdk-code-generator/generators/resource/client_getter.rb +15 -0
- data/lib/aws-sdk-code-generator/generators/resource/client_request.rb +49 -0
- data/lib/aws-sdk-code-generator/generators/resource/client_request_docs.rb +97 -0
- data/lib/aws-sdk-code-generator/generators/resource/client_request_params.rb +88 -0
- data/lib/aws-sdk-code-generator/generators/resource/collection_class.rb +180 -0
- data/lib/aws-sdk-code-generator/generators/resource/data_attribute_getter.rb +24 -0
- data/lib/aws-sdk-code-generator/generators/resource/data_loaded_method.rb +18 -0
- data/lib/aws-sdk-code-generator/generators/resource/data_method.rb +49 -0
- data/lib/aws-sdk-code-generator/generators/resource/exists_method.rb +29 -0
- data/lib/aws-sdk-code-generator/generators/resource/extract_identifier_method.rb +32 -0
- data/lib/aws-sdk-code-generator/generators/resource/has_association.rb +101 -0
- data/lib/aws-sdk-code-generator/generators/resource/has_many_association.rb +108 -0
- data/lib/aws-sdk-code-generator/generators/resource/identifier_getter.rb +26 -0
- data/lib/aws-sdk-code-generator/generators/resource/identifiers_method.rb +28 -0
- data/lib/aws-sdk-code-generator/generators/resource/initialize_method.rb +67 -0
- data/lib/aws-sdk-code-generator/generators/resource/load_method.rb +65 -0
- data/lib/aws-sdk-code-generator/generators/resource/value_source.rb +68 -0
- data/lib/aws-sdk-code-generator/generators/resource/waiter_method.rb +61 -0
- data/lib/aws-sdk-code-generator/generators/resource_class.rb +325 -0
- data/lib/aws-sdk-code-generator/generators/response_structure_example.rb +83 -0
- data/lib/aws-sdk-code-generator/generators/root_resource_class.rb +42 -0
- data/lib/aws-sdk-code-generator/generators/service_documentation.rb +64 -0
- data/lib/aws-sdk-code-generator/generators/shared_example.rb +132 -0
- data/lib/aws-sdk-code-generator/generators/structure_type_class.rb +95 -0
- data/lib/aws-sdk-code-generator/generators/syntax_example.rb +169 -0
- data/lib/aws-sdk-code-generator/generators/types_module.rb +52 -0
- data/lib/aws-sdk-code-generator/generators/waiter_class.rb +62 -0
- data/lib/aws-sdk-code-generator/generators/waiters_module.rb +20 -0
- data/lib/aws-sdk-code-generator/hash_formatter.rb +122 -0
- data/lib/aws-sdk-code-generator/helper.rb +215 -0
- data/lib/aws-sdk-code-generator/service.rb +126 -0
- data/lib/aws-sdk-code-generator/underscore.rb +45 -0
- data/lib/aws-sdk-code-generator/view.rb +23 -0
- data/lib/aws-sdk-code-generator/views.rb +3 -0
- data/lib/aws-sdk-code-generator/views/features/env.rb +24 -0
- data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +20 -0
- data/lib/aws-sdk-code-generator/views/gemspec.rb +41 -0
- data/lib/aws-sdk-code-generator/views/service_module.rb +85 -0
- data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +24 -0
- data/lib/aws-sdk-code-generator/views/version.rb +16 -0
- metadata +120 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class DataAttributeGetter < Dsl::Method
|
|
5
|
+
|
|
6
|
+
include Helper
|
|
7
|
+
|
|
8
|
+
# @option options [required, Hash] :api
|
|
9
|
+
# @option options [required, String] :member_name
|
|
10
|
+
# @option options [required, Hash] :member_ref
|
|
11
|
+
def initialize(options = {})
|
|
12
|
+
@api = options.fetch(:api)
|
|
13
|
+
name = underscore(options.fetch(:member_name))
|
|
14
|
+
member_ref = options.fetch(:member_ref)
|
|
15
|
+
super(name)
|
|
16
|
+
docstring(documentation(member_ref))
|
|
17
|
+
returns(ruby_type(member_ref))
|
|
18
|
+
code("data.#{name}")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class DataLoadedMethod < Dsl::Method
|
|
5
|
+
|
|
6
|
+
def initialize
|
|
7
|
+
super('data_loaded?')
|
|
8
|
+
returns('Boolean', docstring:<<-DOCSTRING)
|
|
9
|
+
Returns `true` if this resource is loaded. Accessing attributes or
|
|
10
|
+
{#data} on an unloaded resource will trigger a call to {#load}.
|
|
11
|
+
DOCSTRING
|
|
12
|
+
code('!!@data')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class DataMethod < Dsl::Method
|
|
5
|
+
|
|
6
|
+
# @option options [required, String] :resource_name
|
|
7
|
+
# @option options [required, Hash] :resource
|
|
8
|
+
def initialize(options = {})
|
|
9
|
+
@resource_name = options.fetch(:resource_name)
|
|
10
|
+
resource = options.fetch(:resource)
|
|
11
|
+
@shape_name = resource['shape']
|
|
12
|
+
@load = resource['load'] && resource['load']['request']['operation']
|
|
13
|
+
super('data')
|
|
14
|
+
if @shape_name
|
|
15
|
+
returns("Types::#{@shape_name}", docstring:return_docstring)
|
|
16
|
+
code do |c|
|
|
17
|
+
c << 'load unless @data'
|
|
18
|
+
c << '@data'
|
|
19
|
+
end
|
|
20
|
+
if !@load
|
|
21
|
+
docstring(<<-DOCSTRING)
|
|
22
|
+
@raise [Errors::ResourceNotLoadableError] Raises when {#data_loaded?} is `false`.
|
|
23
|
+
DOCSTRING
|
|
24
|
+
end
|
|
25
|
+
else
|
|
26
|
+
docstring('@api private')
|
|
27
|
+
returns('EmptyStructure')
|
|
28
|
+
code('@data')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def return_docstring
|
|
36
|
+
if @load
|
|
37
|
+
<<-DOCSTRING
|
|
38
|
+
Returns the data for this {#{@resource_name}}. Calls
|
|
39
|
+
{Client##{underscore(@load)}} if {#data_loaded?} is `false`.
|
|
40
|
+
DOCSTRING
|
|
41
|
+
else
|
|
42
|
+
"Returns the data for this {#{@resource_name}}."
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class ExistsMethod < Dsl::Method
|
|
5
|
+
|
|
6
|
+
include Helper
|
|
7
|
+
|
|
8
|
+
# @option options [required, String] :resource_name
|
|
9
|
+
def initialize(options)
|
|
10
|
+
resource_name = options.fetch(:resource_name)
|
|
11
|
+
super('exists?')
|
|
12
|
+
param(:options, type: 'Hash', default: {})
|
|
13
|
+
returns('Boolean', docstring: "Returns `true` if the #{resource_name} exists.")
|
|
14
|
+
code <<-CODE
|
|
15
|
+
begin
|
|
16
|
+
wait_until_exists(options.merge(max_attempts: 1))
|
|
17
|
+
true
|
|
18
|
+
rescue Aws::Waiters::Errors::UnexpectedError => e
|
|
19
|
+
raise e.error
|
|
20
|
+
rescue Aws::Waiters::Errors::WaiterFailed
|
|
21
|
+
false
|
|
22
|
+
end
|
|
23
|
+
CODE
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class ExtractIdentifierMethod < Dsl::Method
|
|
5
|
+
|
|
6
|
+
include Helper
|
|
7
|
+
|
|
8
|
+
# @option options [required, String] :identifier
|
|
9
|
+
# @option options [required, Integer] :index
|
|
10
|
+
def initialize(options = {})
|
|
11
|
+
identifier = options.fetch(:identifier)
|
|
12
|
+
name = underscore(identifier['name'])
|
|
13
|
+
type = identifier_type(identifier)
|
|
14
|
+
super("extract_#{name}", access: :private)
|
|
15
|
+
param('args')
|
|
16
|
+
param('options')
|
|
17
|
+
code(<<-CODE)
|
|
18
|
+
value = args[#{options.fetch(:index)}] || options.delete(:#{name})
|
|
19
|
+
case value
|
|
20
|
+
when #{type} then value
|
|
21
|
+
when nil then raise ArgumentError, "missing required option :#{name}"
|
|
22
|
+
else
|
|
23
|
+
msg = "expected :#{name} to be a #{type}, got \#{value.class}"
|
|
24
|
+
raise ArgumentError, msg
|
|
25
|
+
end
|
|
26
|
+
CODE
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
module AwsSdkCodeGenerator
|
|
2
|
+
module Generators
|
|
3
|
+
module Resource
|
|
4
|
+
class HasAssociation < Dsl::Method
|
|
5
|
+
|
|
6
|
+
# @option options [required, String] :name
|
|
7
|
+
# @option options [required, Hash] :has
|
|
8
|
+
def initialize(options = {})
|
|
9
|
+
@has = options.fetch(:has)
|
|
10
|
+
@data_identifiers = data_identifiers
|
|
11
|
+
@nullable = !@data_identifiers.empty?
|
|
12
|
+
@plural = plural?
|
|
13
|
+
super(underscore(options.fetch(:name)))
|
|
14
|
+
apply_params
|
|
15
|
+
apply_code
|
|
16
|
+
returns(return_type)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def return_type
|
|
22
|
+
if @plural
|
|
23
|
+
collection_type
|
|
24
|
+
elsif @nullable
|
|
25
|
+
"#{type}, nil"
|
|
26
|
+
else
|
|
27
|
+
type
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def apply_params
|
|
32
|
+
(@has['resource']['identifiers'] || []).each do |identifier|
|
|
33
|
+
if identifier['source'] == 'input'
|
|
34
|
+
param(underscore(identifier['target']), type:'String')
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def type
|
|
40
|
+
@has['resource']['type']
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def collection_type
|
|
44
|
+
"#{type}::Collection"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def apply_code
|
|
48
|
+
if @plural
|
|
49
|
+
code("batch = []")
|
|
50
|
+
code(BatchBuilder.new(resource: @has['resource']))
|
|
51
|
+
code("#{collection_type}.new([batch], size: batch.size)")
|
|
52
|
+
elsif @nullable # singular association
|
|
53
|
+
code do |c|
|
|
54
|
+
c << "if #{null_checks}"
|
|
55
|
+
c.indent do |c2|
|
|
56
|
+
c2 << builder
|
|
57
|
+
end
|
|
58
|
+
c << "else"
|
|
59
|
+
c << " nil"
|
|
60
|
+
c << "end"
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
code(builder)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def builder
|
|
68
|
+
Builder.new(resource: @has['resource'], request_made: false)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def plural?
|
|
72
|
+
plural = false
|
|
73
|
+
r = @has['resource']
|
|
74
|
+
(r['identifiers'] || []).each do |i|
|
|
75
|
+
if i['path'] && i['path'].include?('[]')
|
|
76
|
+
plural = true
|
|
77
|
+
break
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
plural = true if r['data'] && r['data'].include?('[]')
|
|
81
|
+
plural
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def data_identifiers
|
|
85
|
+
identifiers = []
|
|
86
|
+
(@has['resource']['identifiers'] || []).each do |i|
|
|
87
|
+
identifiers << i if i['source'] == 'data'
|
|
88
|
+
end
|
|
89
|
+
identifiers
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def null_checks
|
|
93
|
+
@data_identifiers.map do |i|
|
|
94
|
+
ValueSource.new(i)
|
|
95
|
+
end.join(' && ')
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|