aws-sdk-code-generator 0.1.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|