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.
Files changed (131) hide show
  1. checksums.yaml +5 -5
  2. data/lib/aws-sdk-code-generator.rb +68 -75
  3. data/lib/aws-sdk-code-generator/api.rb +130 -0
  4. data/lib/aws-sdk-code-generator/apply_docs.rb +15 -2
  5. data/lib/aws-sdk-code-generator/client_constructor.rb +39 -0
  6. data/lib/aws-sdk-code-generator/client_operation_documentation.rb +268 -0
  7. data/lib/aws-sdk-code-generator/client_operation_list.rb +148 -0
  8. data/lib/aws-sdk-code-generator/client_response_structure_example.rb +108 -0
  9. data/lib/aws-sdk-code-generator/code_builder.rb +146 -133
  10. data/lib/aws-sdk-code-generator/crosslink.rb +42 -0
  11. data/lib/aws-sdk-code-generator/docstring.rb +199 -0
  12. data/lib/aws-sdk-code-generator/error_list.rb +77 -0
  13. data/lib/aws-sdk-code-generator/errors.rb +2 -0
  14. data/lib/aws-sdk-code-generator/eventstream_example.rb +220 -0
  15. data/lib/aws-sdk-code-generator/gem_builder.rb +19 -25
  16. data/lib/aws-sdk-code-generator/hash_formatter.rb +5 -2
  17. data/lib/aws-sdk-code-generator/helper.rb +77 -61
  18. data/lib/aws-sdk-code-generator/plugin_list.rb +146 -0
  19. data/lib/aws-sdk-code-generator/resource_action.rb +69 -0
  20. data/lib/aws-sdk-code-generator/resource_action_code.rb +57 -0
  21. data/lib/aws-sdk-code-generator/resource_association.rb +37 -0
  22. data/lib/aws-sdk-code-generator/resource_attribute.rb +76 -0
  23. data/lib/aws-sdk-code-generator/resource_batch_action.rb +56 -0
  24. data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +136 -0
  25. data/lib/aws-sdk-code-generator/resource_batch_action_documentation.rb +108 -0
  26. data/lib/aws-sdk-code-generator/resource_batch_builder.rb +212 -0
  27. data/lib/aws-sdk-code-generator/resource_builder.rb +48 -0
  28. data/lib/aws-sdk-code-generator/resource_client_request.rb +62 -0
  29. data/lib/aws-sdk-code-generator/resource_client_request_documentation.rb +81 -0
  30. data/lib/aws-sdk-code-generator/resource_client_request_params.rb +86 -0
  31. data/lib/aws-sdk-code-generator/resource_data_method.rb +60 -0
  32. data/lib/aws-sdk-code-generator/resource_has_association.rb +117 -0
  33. data/lib/aws-sdk-code-generator/resource_has_many_association.rb +52 -0
  34. data/lib/aws-sdk-code-generator/resource_has_many_association_code.rb +76 -0
  35. data/lib/aws-sdk-code-generator/resource_identifier.rb +44 -0
  36. data/lib/aws-sdk-code-generator/resource_identifiers_method.rb +29 -0
  37. data/lib/aws-sdk-code-generator/resource_load_method.rb +68 -0
  38. data/lib/aws-sdk-code-generator/resource_method.rb +22 -0
  39. data/lib/aws-sdk-code-generator/resource_skip_params.rb +36 -0
  40. data/lib/aws-sdk-code-generator/resource_value_source.rb +68 -0
  41. data/lib/aws-sdk-code-generator/resource_waiter.rb +80 -0
  42. data/lib/aws-sdk-code-generator/service.rb +30 -7
  43. data/lib/aws-sdk-code-generator/shared_example.rb +131 -0
  44. data/lib/aws-sdk-code-generator/syntax_example.rb +60 -0
  45. data/lib/aws-sdk-code-generator/syntax_example_hash.rb +174 -0
  46. data/lib/aws-sdk-code-generator/underscore.rb +10 -5
  47. data/lib/aws-sdk-code-generator/view.rb +33 -0
  48. data/lib/aws-sdk-code-generator/views.rb +2 -0
  49. data/lib/aws-sdk-code-generator/views/apig_endpoint_class.rb +25 -0
  50. data/lib/aws-sdk-code-generator/views/apig_readme.rb +32 -0
  51. data/lib/aws-sdk-code-generator/views/async_client_class.rb +68 -0
  52. data/lib/aws-sdk-code-generator/views/authorizer_class.rb +17 -0
  53. data/lib/aws-sdk-code-generator/views/client_api_module.rb +583 -0
  54. data/lib/aws-sdk-code-generator/views/client_class.rb +93 -0
  55. data/lib/aws-sdk-code-generator/views/docstring.rb +27 -0
  56. data/lib/aws-sdk-code-generator/views/errors_module.rb +32 -0
  57. data/lib/aws-sdk-code-generator/views/event_streams_module.rb +149 -0
  58. data/lib/aws-sdk-code-generator/views/features/env.rb +9 -0
  59. data/lib/aws-sdk-code-generator/views/features/smoke.rb +51 -0
  60. data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +26 -0
  61. data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +2 -0
  62. data/lib/aws-sdk-code-generator/views/gemspec.rb +39 -5
  63. data/lib/aws-sdk-code-generator/views/resource_class.rb +122 -0
  64. data/lib/aws-sdk-code-generator/views/root_resource_class.rb +58 -0
  65. data/lib/aws-sdk-code-generator/views/service_module.rb +30 -14
  66. data/lib/aws-sdk-code-generator/views/spec/spec_helper.rb +9 -0
  67. data/lib/aws-sdk-code-generator/views/types_module.rb +294 -0
  68. data/lib/aws-sdk-code-generator/views/version.rb +2 -0
  69. data/lib/aws-sdk-code-generator/views/waiters_module.rb +37 -0
  70. data/lib/aws-sdk-code-generator/waiter.rb +95 -0
  71. data/lib/aws-sdk-code-generator/yard_option_tag.rb +43 -0
  72. metadata +61 -68
  73. data/lib/aws-sdk-code-generator/dsl/access_control_statement.rb +0 -23
  74. data/lib/aws-sdk-code-generator/dsl/attribute_accessor.rb +0 -43
  75. data/lib/aws-sdk-code-generator/dsl/attribute_reader.rb +0 -11
  76. data/lib/aws-sdk-code-generator/dsl/attribute_writer.rb +0 -11
  77. data/lib/aws-sdk-code-generator/dsl/autoload_statement.rb +0 -15
  78. data/lib/aws-sdk-code-generator/dsl/block_param.rb +0 -11
  79. data/lib/aws-sdk-code-generator/dsl/class.rb +0 -27
  80. data/lib/aws-sdk-code-generator/dsl/code_literal.rb +0 -66
  81. data/lib/aws-sdk-code-generator/dsl/code_object.rb +0 -33
  82. data/lib/aws-sdk-code-generator/dsl/docstring.rb +0 -36
  83. data/lib/aws-sdk-code-generator/dsl/eigenclass.rb +0 -15
  84. data/lib/aws-sdk-code-generator/dsl/extend_statement.rb +0 -12
  85. data/lib/aws-sdk-code-generator/dsl/formatter.rb +0 -25
  86. data/lib/aws-sdk-code-generator/dsl/include_statement.rb +0 -17
  87. data/lib/aws-sdk-code-generator/dsl/main.rb +0 -105
  88. data/lib/aws-sdk-code-generator/dsl/method.rb +0 -108
  89. data/lib/aws-sdk-code-generator/dsl/module.rb +0 -167
  90. data/lib/aws-sdk-code-generator/dsl/option_tag.rb +0 -36
  91. data/lib/aws-sdk-code-generator/dsl/param.rb +0 -43
  92. data/lib/aws-sdk-code-generator/dsl/param_list.rb +0 -38
  93. data/lib/aws-sdk-code-generator/dsl/return_tag.rb +0 -19
  94. data/lib/aws-sdk-code-generator/dsl/tag_default.rb +0 -20
  95. data/lib/aws-sdk-code-generator/dsl/tag_docstring.rb +0 -27
  96. data/lib/aws-sdk-code-generator/dsl/tag_type.rb +0 -18
  97. data/lib/aws-sdk-code-generator/generators/client_api_module.rb +0 -334
  98. data/lib/aws-sdk-code-generator/generators/client_class.rb +0 -389
  99. data/lib/aws-sdk-code-generator/generators/client_operation_documentation.rb +0 -166
  100. data/lib/aws-sdk-code-generator/generators/errors_module.rb +0 -25
  101. data/lib/aws-sdk-code-generator/generators/resource/action.rb +0 -88
  102. data/lib/aws-sdk-code-generator/generators/resource/batch_builder.rb +0 -211
  103. data/lib/aws-sdk-code-generator/generators/resource/builder.rb +0 -50
  104. data/lib/aws-sdk-code-generator/generators/resource/client_getter.rb +0 -15
  105. data/lib/aws-sdk-code-generator/generators/resource/client_request.rb +0 -49
  106. data/lib/aws-sdk-code-generator/generators/resource/client_request_docs.rb +0 -97
  107. data/lib/aws-sdk-code-generator/generators/resource/client_request_params.rb +0 -88
  108. data/lib/aws-sdk-code-generator/generators/resource/collection_class.rb +0 -180
  109. data/lib/aws-sdk-code-generator/generators/resource/data_attribute_getter.rb +0 -24
  110. data/lib/aws-sdk-code-generator/generators/resource/data_loaded_method.rb +0 -18
  111. data/lib/aws-sdk-code-generator/generators/resource/data_method.rb +0 -49
  112. data/lib/aws-sdk-code-generator/generators/resource/exists_method.rb +0 -29
  113. data/lib/aws-sdk-code-generator/generators/resource/extract_identifier_method.rb +0 -32
  114. data/lib/aws-sdk-code-generator/generators/resource/has_association.rb +0 -101
  115. data/lib/aws-sdk-code-generator/generators/resource/has_many_association.rb +0 -108
  116. data/lib/aws-sdk-code-generator/generators/resource/identifier_getter.rb +0 -26
  117. data/lib/aws-sdk-code-generator/generators/resource/identifiers_method.rb +0 -28
  118. data/lib/aws-sdk-code-generator/generators/resource/initialize_method.rb +0 -67
  119. data/lib/aws-sdk-code-generator/generators/resource/load_method.rb +0 -65
  120. data/lib/aws-sdk-code-generator/generators/resource/value_source.rb +0 -68
  121. data/lib/aws-sdk-code-generator/generators/resource/waiter_method.rb +0 -61
  122. data/lib/aws-sdk-code-generator/generators/resource_class.rb +0 -325
  123. data/lib/aws-sdk-code-generator/generators/response_structure_example.rb +0 -83
  124. data/lib/aws-sdk-code-generator/generators/root_resource_class.rb +0 -42
  125. data/lib/aws-sdk-code-generator/generators/service_documentation.rb +0 -64
  126. data/lib/aws-sdk-code-generator/generators/shared_example.rb +0 -132
  127. data/lib/aws-sdk-code-generator/generators/structure_type_class.rb +0 -95
  128. data/lib/aws-sdk-code-generator/generators/syntax_example.rb +0 -169
  129. data/lib/aws-sdk-code-generator/generators/types_module.rb +0 -52
  130. data/lib/aws-sdk-code-generator/generators/waiter_class.rb +0 -62
  131. data/lib/aws-sdk-code-generator/generators/waiters_module.rb +0 -20
@@ -1,88 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class ClientRequestParams < String
5
-
6
- include Helper
7
-
8
- # @option options [Array] :params ([])
9
- def initialize(options = {})
10
- @params = options.fetch(:params, nil) || []
11
- super(format_params)
12
- end
13
-
14
- def simple?
15
- @params.all? { |p| p['target'].match(/^\w+$/) }
16
- end
17
-
18
- def empty?
19
- @params.empty?
20
- end
21
-
22
- def size
23
- @params.size
24
- end
25
-
26
- private
27
-
28
- def format_params
29
- hash = {}
30
- @params.each do |param|
31
- ParamTarget.new(param).apply(hash, ValueSource.new(param))
32
- end
33
- formatter = HashFormatter.new(wrap:false, inline: @params.count == 1)
34
- params = formatter.format(hash)
35
- @params.size == 1 ? params.strip : params
36
- end
37
-
38
- class ParamTarget
39
-
40
- def initialize(param)
41
- @target = param['target']
42
- @steps = []
43
- @target.scan(/\w+|\[\]|\[\*\]|\[[0-9]+\]/) do |step|
44
- case step
45
- when /\[\d+\]/ then @steps += [:array, step[1..-2].to_i]
46
- when /\[\*\]/ then @steps += [:array, :n]
47
- when '[]' then @steps += [:array, -1]
48
- else @steps += [:hash, Underscore.underscore(step).to_sym]
49
- end
50
- end
51
- @steps.shift
52
- @final = @steps.pop
53
- end
54
-
55
- # @return [String] target
56
- attr_reader :target
57
-
58
- def apply(hash, value, options = {})
59
- resource_index = options.fetch(:resource_index, 0)
60
- if @final == -1
61
- build_context(hash, resource_index) << value
62
- else
63
- build_context(hash, resource_index)[@final] = value
64
- end
65
- hash
66
- end
67
-
68
- private
69
-
70
- def build_context(params, n)
71
- @steps.each_slice(2).inject(params) do |context, (key, type)|
72
- entry = type == :array ? [] : {}
73
- if key == -1
74
- context << entry
75
- entry
76
- elsif key == :n
77
- context[n] ||= entry
78
- else
79
- context[key] ||= entry
80
- end
81
- end
82
- end
83
-
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,180 +0,0 @@
1
- module AwsSdkCodeGenerator
2
- module Generators
3
- module Resource
4
- class CollectionClass < Dsl::Class
5
-
6
- include Helper
7
-
8
- # @option options [required, String] :resource_name
9
- # @option options [required, Hash] :resource
10
- # @option options [required, Hash] :api
11
- def initialize(options)
12
- @resource_name = options.fetch(:resource_name)
13
- @resource = options.fetch(:resource)
14
- @variable_name = underscore(@resource_name)
15
- @api = options.fetch(:api)
16
- super('Collection', extends: 'Aws::Resources::Collection')
17
- add(*batch_actions)
18
- end
19
-
20
- def apply(mod)
21
- mod.class(@resource_name) do |m|
22
- m.add(self)
23
- end
24
- end
25
-
26
- private
27
-
28
- def batch_actions
29
- if @resource['batchActions']
30
- actions = []
31
- actions << '# @!group Batch Actions'
32
- @resource['batchActions'].each do |name, action|
33
- actions << Dsl::Method.new(batch_action_name(name, action)) do |m|
34
- m.returns('void')
35
- m.param('options', default: {})
36
- param_hash(action)
37
- apply_batch_action_doc(action, m)
38
- m.code('batch_enum.each do |batch|')
39
- m.code(initialize_params)
40
- m.code(apply_params_per_batch)
41
- m.code(batch_request(action))
42
- m.code('end')
43
- m.code(batch_response)
44
- end
45
- end
46
- actions << '# @!endgroup'
47
- actions
48
- else
49
- []
50
- end
51
- end
52
-
53
- def param_hash(action)
54
- @batch_obj = {}
55
- @per_batch = {}
56
- @action_prefix = false
57
- action['request']['params'].each do |param|
58
- if param['target'].include?('[')
59
- parts = param['target'].split('[')
60
- pair = parts[0].split('.')
61
- if pair.length > 1
62
- @action_prefix = pair.first
63
- end
64
- batch_name = pair.last
65
- batch_param = underscore(parts[1].sub(/.*?\./, ''))
66
- batch_param = batch_param == "" ? underscore(param['name']) : batch_param
67
- (@batch_obj[batch_name] ||= []) << {
68
- batch_param.to_sym => underscore(param['name'] || param['path'])
69
- }
70
- else
71
- @per_batch[param['target']] = underscore(param['name'])
72
- end
73
- end
74
- end
75
-
76
- def apply_batch_action_doc(action, method)
77
- skip = []
78
- if @action_prefix
79
- skip << @action_prefix
80
- else
81
- skip += @per_batch.keys
82
- skip += @batch_obj.keys
83
- end
84
- ClientRequestDocs.new(
85
- request: action['request'],
86
- api: @api,
87
- skip: skip,
88
- var_name: @variable_name,
89
- returns: nil
90
- ).apply(method)
91
- end
92
-
93
- def initialize_params
94
- param_block = []
95
- param_block << " params = Aws::Util.copy_hash(options)"
96
- param_block << apply_param_hash
97
- param_block.join("\n")
98
- end
99
-
100
- def apply_param_hash
101
- block = []
102
- @per_batch.each do |key, value|
103
- block << " params[:#{underscore(key)}] = batch[0].#{value}"
104
- end
105
- if @action_prefix
106
- action = underscore(@action_prefix)
107
- block << " params[:#{action}] ||= {}"
108
- @batch_obj.keys.each do |key|
109
- block << " params[:#{action}][:#{underscore(key)}] ||= []"
110
- end
111
- else
112
- @batch_obj.keys.each {|key| block << " params[:#{underscore(key)}] ||= []"}
113
- end
114
- block.join("\n")
115
- end
116
-
117
- def apply_params_per_batch
118
- each_batch = []
119
- each_batch << " batch.each do |item|"
120
- @batch_obj.each do |key, value|
121
- hash = {}
122
- value.each do |v|
123
- param, identifier = v.first
124
- hash[param.to_sym] = "item.#{identifier}"
125
- end
126
- # Construct hash block
127
- if @action_prefix
128
- each_batch << " params[:#{underscore(@action_prefix)}][:#{underscore(key)}] << {"
129
- else
130
- each_batch << " params[:#{underscore(key)}] << {"
131
- end
132
- # hashformatter treats this as inline, need extra indent
133
- indent_count = hash.size == 1 ? 3 : 2
134
- each_batch << indent_helper(HashFormatter.new(wrap: false).format(hash), indent_count)
135
- each_batch << " }"
136
- end
137
- each_batch << " end"
138
- each_batch.join("\n")
139
- end
140
-
141
- def batch_request(action)
142
- " batch[0].client.#{underscore(action['request']['operation'])}(params)"
143
- end
144
-
145
- def batch_response
146
- "nil"
147
- end
148
-
149
- def indent_helper(lines, count)
150
- block = []
151
- lines.split("\n").each do |line|
152
- next if line.strip == ""
153
- block << " " * count + line
154
- end
155
- block.join("\n")
156
- end
157
-
158
- def batch_action_name(name, action)
159
- method_name = "batch_" + underscore(name)
160
- method_name += '!' if dangerous?(name, action)
161
- method_name
162
- end
163
-
164
- def dangerous?(name, action)
165
- if
166
- name.match(/delete/i) ||
167
- name.match(/terminate/i) ||
168
- action['request']['operation'].match(/delete/i) ||
169
- action['request']['operation'].match(/terminate/i)
170
- then
171
- true
172
- else
173
- false
174
- end
175
- end
176
-
177
- end
178
- end
179
- end
180
- end
@@ -1,24 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,49 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,32 +0,0 @@
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
@@ -1,101 +0,0 @@
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