aws-record 1.0.0.pre.2 → 1.0.0.pre.3
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 +4 -4
- data/lib/aws-record.rb +10 -6
- data/lib/aws-record/record/attributes.rb +114 -0
- data/lib/aws-record/record/attributes/list_marshaler.rb +66 -0
- data/lib/aws-record/record/attributes/map_marshaler.rb +66 -0
- data/lib/aws-record/record/attributes/numeric_set_marshaler.rb +68 -0
- data/lib/aws-record/record/attributes/string_set_marshaler.rb +66 -0
- data/lib/aws-record/record/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9169388f2bc16aa254c9c374304bedfdbf9257b9
|
4
|
+
data.tar.gz: b6e10a6ec3c737436eb9667f84ed4a5235dd33ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 868f158bd20470e096bd40258b5a88670a519637746b95314d0d05a4f9414e05adf631b10904cd99a637a46cd4ba933427f3ef8fd3368c9fbd0d0a8c03c87845
|
7
|
+
data.tar.gz: 72faa6654ba4a9b66c59b2c20778cbf1d00635e12ee4aef5b1a561d603613fbc49d817b3e2c48246ee41b15a3f51df2fc4074ea6ac5b3a3eaf6b876e1bc1403a
|
data/lib/aws-record.rb
CHANGED
@@ -28,12 +28,16 @@ module Aws
|
|
28
28
|
autoload :VERSION, 'aws-record/record/version'
|
29
29
|
|
30
30
|
module Attributes
|
31
|
-
autoload :StringMarshaler,
|
32
|
-
autoload :BooleanMarshaler,
|
33
|
-
autoload :IntegerMarshaler,
|
34
|
-
autoload :FloatMarshaler,
|
35
|
-
autoload :DateMarshaler,
|
36
|
-
autoload :DateTimeMarshaler,
|
31
|
+
autoload :StringMarshaler, 'aws-record/record/attributes/string_marshaler'
|
32
|
+
autoload :BooleanMarshaler, 'aws-record/record/attributes/boolean_marshaler'
|
33
|
+
autoload :IntegerMarshaler, 'aws-record/record/attributes/integer_marshaler'
|
34
|
+
autoload :FloatMarshaler, 'aws-record/record/attributes/float_marshaler'
|
35
|
+
autoload :DateMarshaler, 'aws-record/record/attributes/date_marshaler'
|
36
|
+
autoload :DateTimeMarshaler, 'aws-record/record/attributes/date_time_marshaler'
|
37
|
+
autoload :ListMarshaler, 'aws-record/record/attributes/list_marshaler'
|
38
|
+
autoload :MapMarshaler, 'aws-record/record/attributes/map_marshaler'
|
39
|
+
autoload :StringSetMarshaler, 'aws-record/record/attributes/string_set_marshaler'
|
40
|
+
autoload :NumericSetMarshaler, 'aws-record/record/attributes/numeric_set_marshaler'
|
37
41
|
end
|
38
42
|
|
39
43
|
end
|
@@ -161,6 +161,120 @@ module Aws
|
|
161
161
|
attr(name, Attributes::DateTimeMarshaler, opts)
|
162
162
|
end
|
163
163
|
|
164
|
+
# Define a list-type attribute for your model.
|
165
|
+
#
|
166
|
+
# Lists do not have to be homogeneous, but they do have to be types that
|
167
|
+
# the AWS SDK for Ruby V2's DynamoDB client knows how to marshal and
|
168
|
+
# unmarshal. Those types are:
|
169
|
+
#
|
170
|
+
# * Hash
|
171
|
+
# * Array
|
172
|
+
# * String
|
173
|
+
# * Numeric
|
174
|
+
# * Boolean
|
175
|
+
# * IO
|
176
|
+
# * Set
|
177
|
+
# * nil
|
178
|
+
#
|
179
|
+
# Also note that, since lists are heterogeneous, you may lose some
|
180
|
+
# precision when marshaling and unmarshaling. For example, symbols will
|
181
|
+
# be stringified, but there is no way to return those strings to symbols
|
182
|
+
# when the object is read back from DynamoDB.
|
183
|
+
#
|
184
|
+
# @param [Symbol] name Name of this attribute. It should be a name that
|
185
|
+
# is safe to use as a method.
|
186
|
+
# @param [Hash] opts
|
187
|
+
# @option opts [Boolean] :nil_as_empty_list Set to true if this
|
188
|
+
# attribute should interpret nil values as an empty list. If false,
|
189
|
+
# nil values will remain nil.
|
190
|
+
# @option opts [Boolean] :hash_key Set to true if this attribute is
|
191
|
+
# the hash key for the table.
|
192
|
+
# @option opts [Boolean] :range_key Set to true if this attribute is
|
193
|
+
# the range key for the table.
|
194
|
+
def list_attr(name, opts = {})
|
195
|
+
opts[:dynamodb_type] = "L"
|
196
|
+
attr(name, Attributes::ListMarshaler, opts)
|
197
|
+
end
|
198
|
+
|
199
|
+
# Define a map-type attribute for your model.
|
200
|
+
#
|
201
|
+
# Maps do not have to be homogeneous, but they do have to use types that
|
202
|
+
# the AWS SDK for Ruby V2's DynamoDB client knows how to marshal and
|
203
|
+
# unmarshal. Those types are:
|
204
|
+
#
|
205
|
+
# * Hash
|
206
|
+
# * Array
|
207
|
+
# * String
|
208
|
+
# * Numeric
|
209
|
+
# * Boolean
|
210
|
+
# * IO
|
211
|
+
# * Set
|
212
|
+
# * nil
|
213
|
+
#
|
214
|
+
# Also note that, since maps are heterogeneous, you may lose some
|
215
|
+
# precision when marshaling and unmarshaling. For example, symbols will
|
216
|
+
# be stringified, but there is no way to return those strings to symbols
|
217
|
+
# when the object is read back from DynamoDB.
|
218
|
+
#
|
219
|
+
# @param [Symbol] name Name of this attribute. It should be a name that
|
220
|
+
# is safe to use as a method.
|
221
|
+
# @param [Hash] opts
|
222
|
+
# @option opts [Boolean] :nil_as_empty_map Set to true if this
|
223
|
+
# attribute should interpret nil values as an empty hash. If false,
|
224
|
+
# nil values will remain nil.
|
225
|
+
# @option opts [Boolean] :hash_key Set to true if this attribute is
|
226
|
+
# the hash key for the table.
|
227
|
+
# @option opts [Boolean] :range_key Set to true if this attribute is
|
228
|
+
# the range key for the table.
|
229
|
+
def map_attr(name, opts = {})
|
230
|
+
opts[:dynamodb_type] = "M"
|
231
|
+
attr(name, Attributes::MapMarshaler, opts)
|
232
|
+
end
|
233
|
+
|
234
|
+
# Define a string set attribute for your model.
|
235
|
+
#
|
236
|
+
# String sets are homogeneous sets, containing only strings. Note that
|
237
|
+
# empty sets cannot be persisted to DynamoDB. Empty sets are valid for
|
238
|
+
# aws-record items, but they will not be persisted as sets. nil values
|
239
|
+
# from your table, or a lack of value from your table, will be treated
|
240
|
+
# as an empty set for item instances. At persistence time, the marshaler
|
241
|
+
# will attempt to marshal any non-strings within the set to be String
|
242
|
+
# objects.
|
243
|
+
#
|
244
|
+
# @param [Symbol] name Name of this attribute. It should be a name that
|
245
|
+
# is safe to use as a method.
|
246
|
+
# @param [Hash] opts
|
247
|
+
# @option opts [Boolean] :hash_key Set to true if this attribute is
|
248
|
+
# the hash key for the table.
|
249
|
+
# @option opts [Boolean] :range_key Set to true if this attribute is
|
250
|
+
# the range key for the table.
|
251
|
+
def string_set_attr(name, opts = {})
|
252
|
+
opts[:dynamodb_type] = "SS"
|
253
|
+
attr(name, Attributes::StringSetMarshaler, opts)
|
254
|
+
end
|
255
|
+
|
256
|
+
# Define a numeric set attribute for your model.
|
257
|
+
#
|
258
|
+
# Numeric sets are homogeneous sets, containing only strings. Note that
|
259
|
+
# empty sets cannot be persisted to DynamoDB. Empty sets are valid for
|
260
|
+
# aws-record items, but they will not be persisted as sets. nil values
|
261
|
+
# from your table, or a lack of value from your table, will be treated
|
262
|
+
# as an empty set for item instances. At persistence time, the marshaler
|
263
|
+
# will attempt to marshal any non-numerics within the set to be Numeric
|
264
|
+
# objects.
|
265
|
+
#
|
266
|
+
# @param [Symbol] name Name of this attribute. It should be a name that
|
267
|
+
# is safe to use as a method.
|
268
|
+
# @param [Hash] opts
|
269
|
+
# @option opts [Boolean] :hash_key Set to true if this attribute is
|
270
|
+
# the hash key for the table.
|
271
|
+
# @option opts [Boolean] :range_key Set to true if this attribute is
|
272
|
+
# the range key for the table.
|
273
|
+
def string_set_attr(name, opts = {})
|
274
|
+
opts[:dynamodb_type] = "NS"
|
275
|
+
attr(name, Attributes::NumericSetMarshaler, opts)
|
276
|
+
end
|
277
|
+
|
164
278
|
# @return [Hash] hash of symbolized attribute names to attribute objects
|
165
279
|
def attributes
|
166
280
|
@attributes
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You may not
|
4
|
+
# use this file except in compliance with the License. A copy of the License is
|
5
|
+
# located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is distributed on
|
10
|
+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
11
|
+
# or implied. See the License for the specific language governing permissions
|
12
|
+
# and limitations under the License.
|
13
|
+
|
14
|
+
module Aws
|
15
|
+
module Record
|
16
|
+
module Attributes
|
17
|
+
module ListMarshaler
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
def type_cast(raw_value, options = {})
|
22
|
+
case raw_value
|
23
|
+
when nil
|
24
|
+
_cast_nil(raw_value, options)
|
25
|
+
when ''
|
26
|
+
_cast_nil(raw_value, options)
|
27
|
+
when Array
|
28
|
+
raw_value
|
29
|
+
else
|
30
|
+
if raw_value.respond_to?(:to_a)
|
31
|
+
raw_value.to_a
|
32
|
+
else
|
33
|
+
msg = "Don't know how to make #{raw_value} of type"\
|
34
|
+
" #{raw_value.class} into an array!"
|
35
|
+
raise ArgumentError, msg
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def serialize(raw_value, options = {})
|
41
|
+
list = type_cast(raw_value, options)
|
42
|
+
if list.is_a?(Array)
|
43
|
+
list
|
44
|
+
elsif list.nil?
|
45
|
+
nil
|
46
|
+
else
|
47
|
+
msg = "expected an Array value or nil, got #{list.class}"
|
48
|
+
raise ArgumentError, msg
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def _cast_nil(raw_value, options)
|
54
|
+
if options[:nil_as_empty_list]
|
55
|
+
[]
|
56
|
+
else
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You may not
|
4
|
+
# use this file except in compliance with the License. A copy of the License is
|
5
|
+
# located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is distributed on
|
10
|
+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
11
|
+
# or implied. See the License for the specific language governing permissions
|
12
|
+
# and limitations under the License.
|
13
|
+
|
14
|
+
module Aws
|
15
|
+
module Record
|
16
|
+
module Attributes
|
17
|
+
module MapMarshaler
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
def type_cast(raw_value, options = {})
|
22
|
+
case raw_value
|
23
|
+
when nil
|
24
|
+
_cast_nil(raw_value, options)
|
25
|
+
when ''
|
26
|
+
_cast_nil(raw_value, options)
|
27
|
+
when Hash
|
28
|
+
raw_value
|
29
|
+
else
|
30
|
+
if raw_value.respond_to?(:to_h)
|
31
|
+
raw_value.to_h
|
32
|
+
else
|
33
|
+
msg = "Don't know how to make #{raw_value} of type"\
|
34
|
+
" #{raw_value.class} into a hash!"
|
35
|
+
raise ArgumentError, msg
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def serialize(raw_value, options = {})
|
41
|
+
map = type_cast(raw_value, options)
|
42
|
+
if map.is_a?(Hash)
|
43
|
+
map
|
44
|
+
elsif map.nil?
|
45
|
+
nil
|
46
|
+
else
|
47
|
+
msg = "expected a Hash value or nil, got #{map.class}"
|
48
|
+
raise ArgumentError, msg
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def _cast_nil(raw_value, options)
|
54
|
+
if options[:nil_as_empty_map]
|
55
|
+
{}
|
56
|
+
else
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You may not
|
4
|
+
# use this file except in compliance with the License. A copy of the License is
|
5
|
+
# located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is distributed on
|
10
|
+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
11
|
+
# or implied. See the License for the specific language governing permissions
|
12
|
+
# and limitations under the License.
|
13
|
+
|
14
|
+
require 'bigdecimal'
|
15
|
+
|
16
|
+
module Aws
|
17
|
+
module Record
|
18
|
+
module Attributes
|
19
|
+
module NumericSetMarshaler
|
20
|
+
|
21
|
+
class << self
|
22
|
+
|
23
|
+
def type_cast(raw_value, options = {})
|
24
|
+
case raw_value
|
25
|
+
when nil
|
26
|
+
Set.new
|
27
|
+
when ''
|
28
|
+
Set.new
|
29
|
+
when Set
|
30
|
+
_as_numeric(raw_value)
|
31
|
+
else
|
32
|
+
msg = "Don't know how to make #{raw_value} of type"\
|
33
|
+
" #{raw_value.class} into a Numeric Set!"
|
34
|
+
raise ArgumentError, msg
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def serialize(raw_value, options = {})
|
39
|
+
set = type_cast(raw_value, options)
|
40
|
+
if set.is_a?(Set)
|
41
|
+
if set.empty?
|
42
|
+
nil
|
43
|
+
else
|
44
|
+
set
|
45
|
+
end
|
46
|
+
else
|
47
|
+
msg = "expected a Set value or nil, got #{set.class}"
|
48
|
+
raise ArgumentError, msg
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def _as_numeric(set)
|
54
|
+
set.collect! do |item|
|
55
|
+
if item.is_a?(Numeric)
|
56
|
+
item
|
57
|
+
else
|
58
|
+
BigDecimal.new(item.to_s)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You may not
|
4
|
+
# use this file except in compliance with the License. A copy of the License is
|
5
|
+
# located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is distributed on
|
10
|
+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
11
|
+
# or implied. See the License for the specific language governing permissions
|
12
|
+
# and limitations under the License.
|
13
|
+
|
14
|
+
module Aws
|
15
|
+
module Record
|
16
|
+
module Attributes
|
17
|
+
module StringSetMarshaler
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
def type_cast(raw_value, options = {})
|
22
|
+
case raw_value
|
23
|
+
when nil
|
24
|
+
Set.new
|
25
|
+
when ''
|
26
|
+
Set.new
|
27
|
+
when Set
|
28
|
+
_as_strings(raw_value)
|
29
|
+
else
|
30
|
+
msg = "Don't know how to make #{raw_value} of type"\
|
31
|
+
" #{raw_value.class} into a String Set!"
|
32
|
+
raise ArgumentError, msg
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def serialize(raw_value, options = {})
|
37
|
+
set = type_cast(raw_value, options)
|
38
|
+
if set.is_a?(Set)
|
39
|
+
if set.empty?
|
40
|
+
nil
|
41
|
+
else
|
42
|
+
set
|
43
|
+
end
|
44
|
+
else
|
45
|
+
msg = "expected a Set value or nil, got #{set.class}"
|
46
|
+
raise ArgumentError, msg
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def _as_strings(set)
|
52
|
+
set.collect! do |item|
|
53
|
+
if item.is_a?(String)
|
54
|
+
item
|
55
|
+
else
|
56
|
+
item.to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.pre.
|
4
|
+
version: 1.0.0.pre.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-resources
|
@@ -40,7 +40,11 @@ files:
|
|
40
40
|
- lib/aws-record/record/attributes/date_time_marshaler.rb
|
41
41
|
- lib/aws-record/record/attributes/float_marshaler.rb
|
42
42
|
- lib/aws-record/record/attributes/integer_marshaler.rb
|
43
|
+
- lib/aws-record/record/attributes/list_marshaler.rb
|
44
|
+
- lib/aws-record/record/attributes/map_marshaler.rb
|
45
|
+
- lib/aws-record/record/attributes/numeric_set_marshaler.rb
|
43
46
|
- lib/aws-record/record/attributes/string_marshaler.rb
|
47
|
+
- lib/aws-record/record/attributes/string_set_marshaler.rb
|
44
48
|
- lib/aws-record/record/errors.rb
|
45
49
|
- lib/aws-record/record/item_collection.rb
|
46
50
|
- lib/aws-record/record/item_operations.rb
|