aws-sdk-core 2.0.48 → 2.1.0

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/apis/autoscaling/2011-01-01/api-2.json +636 -33
  3. data/apis/cloudhsm/2014-05-30/api-2.json +3 -6
  4. data/apis/ec2/2014-10-01/api-2.json +10267 -0
  5. data/apis/ec2/2014-10-01/paginators-1.json +125 -0
  6. data/apis/ec2/2014-10-01/resources-1.json +2289 -0
  7. data/apis/ec2/2014-10-01/waiters-2.json +453 -0
  8. data/apis/ec2/2015-03-01/api-2.json +11245 -0
  9. data/apis/ec2/2015-03-01/paginators-1.json +125 -0
  10. data/apis/ec2/2015-03-01/resources-1.json +2479 -0
  11. data/apis/ec2/2015-03-01/waiters-2.json +458 -0
  12. data/apis/ec2/2015-04-15/api-2.json +182 -2
  13. data/apis/ecs/2014-11-13/api-2.json +316 -7
  14. data/apis/ecs/2014-11-13/paginators-1.json +40 -0
  15. data/apis/ecs/2014-11-13/waiters-2.json +93 -0
  16. data/apis/redshift/2012-12-01/waiters-2.json +19 -0
  17. data/apis/s3/2006-03-01/api-2.json +1 -2
  18. data/apis/sqs/2012-11-05/api-2.json +5 -6
  19. data/ca-bundle.crt +3554 -0
  20. data/lib/aws-sdk-core.rb +127 -44
  21. data/lib/aws-sdk-core/api/builder.rb +95 -0
  22. data/lib/aws-sdk-core/api/customizations.rb +152 -0
  23. data/lib/aws-sdk-core/api/docs/builder.rb +220 -0
  24. data/lib/aws-sdk-core/api/docs/client_type_documenter.rb +109 -0
  25. data/lib/aws-sdk-core/api/docs/docstring_provider.rb +66 -0
  26. data/lib/aws-sdk-core/api/docs/operation_documenter.rb +107 -0
  27. data/lib/aws-sdk-core/api/docs/param_formatter.rb +163 -0
  28. data/lib/aws-sdk-core/api/docs/request_syntax_example.rb +22 -0
  29. data/lib/aws-sdk-core/api/docs/response_structure_example.rb +91 -0
  30. data/lib/aws-sdk-core/api/docs/utils.rb +133 -0
  31. data/lib/aws-sdk-core/api/shape_map.rb +140 -0
  32. data/lib/aws-sdk-core/assume_role_credentials.rb +9 -6
  33. data/lib/aws-sdk-core/client.rb +9 -6
  34. data/lib/aws-sdk-core/client_stubs.rb +127 -133
  35. data/lib/aws-sdk-core/client_waiters.rb +1 -1
  36. data/lib/aws-sdk-core/credential_provider.rb +44 -0
  37. data/lib/aws-sdk-core/credential_provider_chain.rb +3 -2
  38. data/lib/aws-sdk-core/credentials.rb +5 -0
  39. data/lib/aws-sdk-core/deprecations.rb +69 -0
  40. data/lib/aws-sdk-core/dynamodb.rb +12 -0
  41. data/lib/aws-sdk-core/eager_loader.rb +31 -0
  42. data/lib/aws-sdk-core/ecs.rb +2 -0
  43. data/lib/aws-sdk-core/empty_structure.rb +1 -82
  44. data/lib/aws-sdk-core/endpoint_provider.rb +1 -1
  45. data/lib/aws-sdk-core/instance_profile_credentials.rb +9 -10
  46. data/lib/aws-sdk-core/json.rb +56 -0
  47. data/lib/aws-sdk-core/json/builder.rb +33 -34
  48. data/lib/aws-sdk-core/json/error_handler.rb +2 -2
  49. data/lib/aws-sdk-core/json/handler.rb +67 -0
  50. data/lib/aws-sdk-core/json/json_engine.rb +15 -0
  51. data/lib/aws-sdk-core/json/oj_engine.rb +15 -0
  52. data/lib/aws-sdk-core/json/parser.rb +30 -38
  53. data/lib/aws-sdk-core/pageable_response.rb +9 -12
  54. data/lib/aws-sdk-core/pager.rb +69 -0
  55. data/lib/aws-sdk-core/param_converter.rb +203 -0
  56. data/lib/aws-sdk-core/param_validator.rb +148 -0
  57. data/lib/aws-sdk-core/plugins/dynamodb_simple_attributes.rb +21 -18
  58. data/lib/aws-sdk-core/plugins/glacier_account_id.rb +9 -1
  59. data/lib/aws-sdk-core/plugins/glacier_checksums.rb +2 -3
  60. data/lib/aws-sdk-core/plugins/param_converter.rb +27 -0
  61. data/lib/aws-sdk-core/plugins/param_validator.rb +28 -0
  62. data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +3 -7
  63. data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +1 -2
  64. data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +1 -1
  65. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +1 -1
  66. data/lib/aws-sdk-core/plugins/request_signer.rb +5 -5
  67. data/lib/aws-sdk-core/plugins/response_paging.rb +20 -11
  68. data/lib/aws-sdk-core/plugins/s3_get_bucket_location_fix.rb +1 -1
  69. data/lib/aws-sdk-core/plugins/s3_request_signer.rb +1 -2
  70. data/lib/aws-sdk-core/plugins/stub_responses.rb +25 -27
  71. data/lib/aws-sdk-core/query/ec2_param_builder.rb +29 -34
  72. data/lib/aws-sdk-core/query/handler.rb +32 -18
  73. data/lib/aws-sdk-core/query/param_builder.rb +45 -53
  74. data/lib/aws-sdk-core/refreshing_credentials.rb +3 -15
  75. data/lib/aws-sdk-core/rest/handler.rb +22 -0
  76. data/lib/aws-sdk-core/rest/request/body.rb +58 -0
  77. data/lib/aws-sdk-core/rest/request/builder.rb +50 -0
  78. data/lib/aws-sdk-core/rest/request/endpoint.rb +70 -0
  79. data/lib/aws-sdk-core/rest/request/headers.rb +48 -0
  80. data/lib/aws-sdk-core/rest/response/body.rb +43 -0
  81. data/lib/aws-sdk-core/rest/response/headers.rb +60 -0
  82. data/lib/aws-sdk-core/rest/response/parser.rb +47 -0
  83. data/lib/aws-sdk-core/rest/response/status_code.rb +24 -0
  84. data/lib/aws-sdk-core/shared_credentials.rb +11 -6
  85. data/lib/aws-sdk-core/signers/base.rb +1 -1
  86. data/lib/aws-sdk-core/signers/s3.rb +2 -3
  87. data/lib/aws-sdk-core/signers/v2.rb +7 -4
  88. data/lib/aws-sdk-core/signers/v4.rb +11 -22
  89. data/lib/aws-sdk-core/structure.rb +26 -145
  90. data/lib/aws-sdk-core/stubbing/data_applicator.rb +46 -0
  91. data/lib/aws-sdk-core/stubbing/empty_stub.rb +53 -0
  92. data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +49 -0
  93. data/lib/aws-sdk-core/stubbing/protocols/json.rb +40 -0
  94. data/lib/aws-sdk-core/stubbing/protocols/query.rb +40 -0
  95. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +67 -0
  96. data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +25 -0
  97. data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +38 -0
  98. data/lib/aws-sdk-core/stubbing/stub_data.rb +34 -0
  99. data/lib/aws-sdk-core/version.rb +1 -1
  100. data/lib/aws-sdk-core/xml/builder.rb +58 -52
  101. data/lib/aws-sdk-core/xml/default_map.rb +10 -0
  102. data/lib/aws-sdk-core/xml/doc_builder.rb +86 -0
  103. data/lib/aws-sdk-core/xml/error_handler.rb +7 -2
  104. data/lib/aws-sdk-core/xml/parser.rb +4 -4
  105. data/lib/aws-sdk-core/xml/parser/frame.rb +75 -70
  106. data/lib/aws-sdk-core/xml/parser/stack.rb +4 -4
  107. data/lib/seahorse.rb +0 -11
  108. data/lib/seahorse/client/base.rb +3 -12
  109. data/lib/seahorse/client/http/request.rb +9 -5
  110. data/lib/seahorse/client/plugins/endpoint.rb +5 -56
  111. data/lib/seahorse/client/plugins/restful_bindings.rb +38 -31
  112. data/lib/seahorse/client/request_context.rb +2 -2
  113. data/lib/seahorse/client/response.rb +6 -5
  114. data/lib/seahorse/model/api.rb +18 -61
  115. data/lib/seahorse/model/operation.rb +24 -54
  116. data/lib/seahorse/model/shapes.rb +120 -364
  117. data/lib/seahorse/util.rb +2 -6
  118. metadata +56 -109
  119. data/apis/autoscaling/2011-01-01/docs-2.json +0 -1246
  120. data/apis/cloudformation/2010-05-15/docs-2.json +0 -725
  121. data/apis/cloudfront/2014-11-06/docs-2.json +0 -1125
  122. data/apis/cloudhsm/2014-05-30/docs-2.json +0 -472
  123. data/apis/cloudsearch/2013-01-01/docs-2.json +0 -865
  124. data/apis/cloudsearchdomain/2013-01-01/docs-2.json +0 -311
  125. data/apis/cloudtrail/2013-11-01/docs-2.json +0 -328
  126. data/apis/codedeploy/2014-10-06/docs-2.json +0 -1261
  127. data/apis/cognito-identity/2014-06-30/docs-2.json +0 -506
  128. data/apis/cognito-sync/2014-06-30/docs-2.json +0 -582
  129. data/apis/config/2014-10-17/docs-2.json +0 -513
  130. data/apis/config/2014-11-12/docs-2.json +0 -514
  131. data/apis/datapipeline/2012-10-29/docs-2.json +0 -607
  132. data/apis/directconnect/2012-10-25/docs-2.json +0 -494
  133. data/apis/ds/2015-04-16/docs-2.json +0 -753
  134. data/apis/dynamodb/2011-12-05/api-2.json +0 -949
  135. data/apis/dynamodb/2011-12-05/docs-2.json +0 -606
  136. data/apis/dynamodb/2011-12-05/paginators-1.json +0 -26
  137. data/apis/dynamodb/2011-12-05/waiters-2.json +0 -35
  138. data/apis/dynamodb/2012-08-10/docs-2.json +0 -977
  139. data/apis/ec2/2015-04-15/docs-2.json +0 -5368
  140. data/apis/ecs/2014-11-13/docs-2.json +0 -791
  141. data/apis/elasticache/2015-02-02/docs-2.json +0 -1390
  142. data/apis/elasticbeanstalk/2010-12-01/docs-2.json +0 -1114
  143. data/apis/elasticfilesystem/2015-02-01/docs-2.json +0 -414
  144. data/apis/elasticloadbalancing/2012-06-01/docs-2.json +0 -1078
  145. data/apis/elasticmapreduce/2009-03-31/docs-2.json +0 -969
  146. data/apis/elastictranscoder/2012-09-25/docs-2.json +0 -1152
  147. data/apis/email/2010-12-01/docs-2.json +0 -441
  148. data/apis/glacier/2012-06-01/docs-2.json +0 -575
  149. data/apis/iam/2010-05-08/docs-2.json +0 -2138
  150. data/apis/importexport/2010-06-01/docs-2.json +0 -432
  151. data/apis/kinesis/2013-12-02/docs-2.json +0 -424
  152. data/apis/kms/2014-11-01/docs-2.json +0 -628
  153. data/apis/lambda/2014-11-11/docs-2.json +0 -303
  154. data/apis/lambda/2015-03-31/docs-2.json +0 -490
  155. data/apis/logs/2014-03-28/docs-2.json +0 -599
  156. data/apis/machinelearning/2014-12-12/docs-2.json +0 -1034
  157. data/apis/monitoring/2010-08-01/docs-2.json +0 -514
  158. data/apis/opsworks/2013-02-18/docs-2.json +0 -1592
  159. data/apis/rds/2014-10-31/docs-2.json +0 -2074
  160. data/apis/redshift/2012-12-01/docs-2.json +0 -1890
  161. data/apis/route53/2013-04-01/docs-2.json +0 -1159
  162. data/apis/route53domains/2014-05-15/docs-2.json +0 -620
  163. data/apis/s3/2006-03-01/docs-2.json +0 -2213
  164. data/apis/sdb/2009-04-15/docs-2.json +0 -339
  165. data/apis/sns/2010-03-31/docs-2.json +0 -564
  166. data/apis/sqs/2012-11-05/docs-2.json +0 -503
  167. data/apis/ssm/2014-11-06/docs-2.json +0 -440
  168. data/apis/storagegateway/2013-06-30/docs-2.json +0 -1331
  169. data/apis/sts/2011-06-15/docs-2.json +0 -351
  170. data/apis/support/2013-04-15/docs-2.json +0 -680
  171. data/apis/swf/2012-01-25/docs-2.json +0 -1569
  172. data/apis/workspaces/2015-04-08/docs-2.json +0 -457
  173. data/lib/aws-sdk-core/api/customizer.rb +0 -75
  174. data/lib/aws-sdk-core/api/docstrings.rb +0 -38
  175. data/lib/aws-sdk-core/api/documenter.rb +0 -241
  176. data/lib/aws-sdk-core/api/operation_documenter.rb +0 -173
  177. data/lib/aws-sdk-core/api/operation_example.rb +0 -133
  178. data/lib/aws-sdk-core/api/service_customizations.rb +0 -140
  179. data/lib/aws-sdk-core/client_paging.rb +0 -31
  180. data/lib/aws-sdk-core/json/rest_handler.rb +0 -20
  181. data/lib/aws-sdk-core/json/rpc_body_handler.rb +0 -38
  182. data/lib/aws-sdk-core/json/rpc_headers_handler.rb +0 -34
  183. data/lib/aws-sdk-core/json/simple_body_handler.rb +0 -34
  184. data/lib/aws-sdk-core/paging/null_pager.rb +0 -20
  185. data/lib/aws-sdk-core/paging/null_provider.rb +0 -13
  186. data/lib/aws-sdk-core/paging/pager.rb +0 -70
  187. data/lib/aws-sdk-core/paging/provider.rb +0 -22
  188. data/lib/aws-sdk-core/rest_body_handler.rb +0 -111
  189. data/lib/aws-sdk-core/signers/handler.rb +0 -18
  190. data/lib/aws-sdk-core/xml/rest_handler.rb +0 -20
  191. data/lib/seahorse/client/param_converter.rb +0 -207
  192. data/lib/seahorse/client/param_validator.rb +0 -139
  193. data/lib/seahorse/client/plugins/json_simple.rb +0 -33
  194. data/lib/seahorse/client/plugins/param_conversion.rb +0 -29
  195. data/lib/seahorse/client/plugins/param_validation.rb +0 -30
  196. data/lib/seahorse/client/xml/builder.rb +0 -91
  197. data/lib/seahorse/model/shape_map.rb +0 -47
@@ -1,139 +0,0 @@
1
- module Seahorse
2
- module Client
3
- class ParamValidator
4
-
5
- # @param [Model::Shapes::Shape] shape
6
- # @param [Hash] params
7
- # @return [void]
8
- def self.validate!(shape, params)
9
- new(shape).validate!(params)
10
- end
11
-
12
- # @param [Model::Shapes::Shape] shape
13
- # @option options [Boolean] :validate_required (true)
14
- def initialize(shape, options = {})
15
- @shape = shape || Seahorse::Model::Shapes::Structure.new
16
- @validate_required = options[:validate_required] != false
17
- end
18
-
19
- # @param [Hash] params
20
- # @return [void]
21
- def validate!(params)
22
- errors = []
23
- shape(@shape, params, errors, context = 'params')
24
- raise ArgumentError, error_messages(errors) unless errors.empty?
25
- end
26
-
27
- private
28
-
29
- def structure(structure, values, errors, context)
30
- # ensure the value is hash like
31
- return unless hash?(values, errors, context)
32
-
33
- # ensure required members are present
34
- if @validate_required
35
- structure.required.each do |member_name|
36
- if values[member_name].nil?
37
- param = "#{context}[#{member_name.inspect}]"
38
- errors << "missing required parameter #{param}"
39
- end
40
- end
41
- end
42
-
43
- # validate non-nil members
44
- values.each do |name, value|
45
- unless value.nil?
46
- if structure.member?(name)
47
- member_shape = structure.member(name)
48
- shape(member_shape, value, errors, context + "[#{name.inspect}]")
49
- else
50
- errors << "unexpected value at #{context}[#{name.inspect}]"
51
- end
52
- end
53
- end
54
- end
55
-
56
- def list(list, values, errors, context)
57
- # ensure the value is an array
58
- unless values.is_a?(Array)
59
- errors << "expected #{context} to be an array"
60
- return
61
- end
62
-
63
- # validate members
64
- values.each.with_index do |value, index|
65
- shape(list.member, value, errors, context + "[#{index}]")
66
- end
67
- end
68
-
69
- def map(map, values, errors, context)
70
- return unless hash?(values, errors, context)
71
- values.each do |key, value|
72
- shape(map.key, key, errors, "#{context} #{key.inspect} key")
73
- shape(map.value, value, errors, context + "[#{key.inspect}]")
74
- end
75
- end
76
-
77
- def shape(shape, value, errors, context)
78
- case shape
79
- when Model::Shapes::Structure
80
- structure(shape, value, errors, context)
81
- when Model::Shapes::List
82
- list(shape, value, errors, context)
83
- when Model::Shapes::Map
84
- map(shape, value, errors, context)
85
- when Model::Shapes::String
86
- unless value.is_a?(String)
87
- errors << "expected #{context} to be a string"
88
- end
89
- when Model::Shapes::Integer
90
- unless value.is_a?(Integer)
91
- errors << "expected #{context} to be an integer"
92
- end
93
- when Model::Shapes::Float
94
- unless value.is_a?(Float)
95
- errors << "expected #{context} to be a float"
96
- end
97
- when Model::Shapes::Timestamp
98
- unless value.is_a?(Time)
99
- errors << "expected #{context} to be a Time object"
100
- end
101
- when Model::Shapes::Boolean
102
- unless [true, false].include?(value)
103
- errors << "expected #{context} to be true or false"
104
- end
105
- when Model::Shapes::Blob
106
- unless io_like?(value) or value.is_a?(String)
107
- errors << "expected #{context} to be a string or IO object"
108
- end
109
- end
110
- end
111
-
112
- def hash?(value, errors, context)
113
- if value.is_a?(Hash)
114
- true
115
- else
116
- errors << "expected #{context} to be a hash"
117
- false
118
- end
119
- end
120
-
121
- def io_like?(value)
122
- value.respond_to?(:read) &&
123
- value.respond_to?(:rewind) &&
124
- value.respond_to?(:size)
125
- end
126
-
127
- def error_messages(errors)
128
- if errors.size == 1
129
- errors.first
130
- else
131
- prefix = "\n - "
132
- "parameter validator found #{errors.size} errors:" +
133
- prefix + errors.join(prefix)
134
- end
135
- end
136
-
137
- end
138
- end
139
- end
@@ -1,33 +0,0 @@
1
- module Seahorse
2
- module Client
3
- module Plugins
4
-
5
- # This plugin performs two trivial translations:
6
- #
7
- # * The request parameters are serialized as JSON for the request body
8
- # * The response body is deserialized as JSON for the response data
9
- #
10
- # No attempt is made to extract errors from the HTTP response body.
11
- # Parsing the response only happens for a successful response.
12
- #
13
- class JsonSimple < Plugin
14
-
15
- # @api private
16
- class Handler < Client::Handler
17
-
18
- def call(context)
19
- context.http_request.body = MultiJson.dump(context.params)
20
- @handler.call(context).on_success do |response|
21
- response.error = nil
22
- response.data = MultiJson.load(context.http_response.body_contents)
23
- end
24
- end
25
-
26
- end
27
-
28
- handler(Handler)
29
-
30
- end
31
- end
32
- end
33
- end
@@ -1,29 +0,0 @@
1
- module Seahorse
2
- module Client
3
- module Plugins
4
-
5
- # @seahorse.client.option [Boolean] :convert_params (true)
6
- # When `true`, an attempt is made to coerce request parameters
7
- # into the required types.
8
- class ParamConversion < Plugin
9
-
10
- option(:convert_params, true)
11
-
12
- def add_handlers(handlers, config)
13
- handlers.add(Handler, step: :initialize) if config.convert_params
14
- end
15
-
16
- class Handler < Client::Handler
17
-
18
- def call(context)
19
- if input = context.operation.input
20
- context.params = ParamConverter.convert(input, context.params)
21
- end
22
- @handler.call(context)
23
- end
24
-
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,30 +0,0 @@
1
- module Seahorse
2
- module Client
3
- module Plugins
4
-
5
- # @seahorse.client.option [Boolean] :validate_params (true)
6
- # When `true`, request parameters are validated before
7
- # sending the request.
8
- class ParamValidation < Plugin
9
-
10
- option(:validate_params, true)
11
-
12
- def add_handlers(handlers, config)
13
- if config.validate_params
14
- handlers.add(Handler, step: :validate, priority: 50)
15
- end
16
- end
17
-
18
- class Handler < Client::Handler
19
-
20
- def call(context)
21
- ParamValidator.validate!(context.operation.input, context.params)
22
- @handler.call(context)
23
- end
24
-
25
- end
26
-
27
- end
28
- end
29
- end
30
- end
@@ -1,91 +0,0 @@
1
- module Seahorse
2
- module Client
3
- module Xml
4
- class Builder
5
-
6
- class XmlDoc
7
-
8
- # @option options [#<<] :target ('')
9
- # @option options [String] :pad ('')
10
- # @option options [String] :indent ('')
11
- def initialize(options = {})
12
- @target = options[:target] || ''
13
- @indent = options[:indent] || ''
14
- @pad = options[:pad] || ''
15
- @end_of_line = @indent == '' ? '' : "\n"
16
- end
17
-
18
- attr_reader :target
19
-
20
- # @overload node(name, attributes = {})
21
- # Adds a self closing element without any content.
22
- #
23
- # @overload node(name, value, attributes = {})
24
- # Adds an element that opens and closes on the same line with
25
- # simple text content.
26
- #
27
- # @overload node(name, attributes = {}, &block)
28
- # Adds a wrapping element. Calling {#node} from inside
29
- # the yielded block creates nested elements.
30
- #
31
- # @return [void]
32
- #
33
- def node(name, *args, &block)
34
- attrs = args.last.is_a?(Hash) ? args.pop : {}
35
- if block_given?
36
- @target << open_el(name, attrs)
37
- @target << @end_of_line
38
- increase_pad { yield }
39
- @target << @pad
40
- @target << close_el(name)
41
- elsif args.empty?
42
- @target << empty_element(name, attrs)
43
- else
44
- @target << inline_element(name, args.first, attrs)
45
- end
46
- end
47
-
48
- private
49
-
50
- def empty_element(name, attrs)
51
- "#{@pad}<#{name}#{attributes(attrs)}/>#{@end_of_line}"
52
- end
53
-
54
- def inline_element(name, value, attrs)
55
- "#{open_el(name, attrs)}#{escape(value)}#{close_el(name)}"
56
- end
57
-
58
- def open_el(name, attrs)
59
- "#{@pad}<#{name}#{attributes(attrs)}>"
60
- end
61
-
62
- def close_el(name)
63
- "</#{name}>#{@end_of_line}"
64
- end
65
-
66
- def escape(string)
67
- string.to_s
68
- end
69
-
70
- def attributes(attr)
71
- if attr.empty?
72
- ''
73
- else
74
- ' ' + attr.map do |key, value|
75
- "#{key}=\"#{escape(value).gsub('"', '&quot;')}\""
76
- end.join(' ')
77
- end
78
- end
79
-
80
- def increase_pad(&block)
81
- pre_increase = @pad
82
- @pad = @pad + @indent
83
- yield
84
- @pad = pre_increase
85
- end
86
-
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,47 +0,0 @@
1
- module Seahorse
2
- module Model
3
- # @api private
4
- class ShapeMap
5
-
6
- # @param [Hash<String,Hash>] shape_defs ({}) A hash of shape definitions.
7
- # Hash keys should be shape names. Hash values should be shape
8
- # definitions.
9
- def initialize(shape_defs = {})
10
- @definitions = shape_defs
11
- @shapes = {}
12
- end
13
-
14
- # @return [Hash]
15
- attr_reader :definitions
16
-
17
- # @param [Hash] shape_ref
18
- # @option shape_ref [required, String] 'shape'
19
- # @return [Shapes::Shape]
20
- # @raise [ArgumentError] Raised when the given shape ref can not be
21
- # resolved.
22
- def shape(shape_ref)
23
- @shapes[shape_ref] ||= build_shape(shape_ref)
24
- end
25
-
26
- # @return [Array<String>]
27
- def shape_names
28
- @definitions.keys
29
- end
30
-
31
- private
32
-
33
- def build_shape(shape_ref)
34
- Shapes::Shape.new(resolve(shape_ref), shape_map: self)
35
- end
36
-
37
- def resolve(shape_ref)
38
- if definition = @definitions[shape_ref['shape']]
39
- definition.merge(shape_ref)
40
- else
41
- raise ArgumentError, "shape not found for #{shape_ref.inspect}"
42
- end
43
- end
44
-
45
- end
46
- end
47
- end