dynamini 2.6.8 → 2.7.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.
- checksums.yaml +4 -4
- data/dynamini.gemspec +1 -1
- data/lib/dynamini/adder.rb +1 -1
- data/lib/dynamini/base.rb +2 -3
- data/lib/dynamini/type_handler.rb +8 -8
- data/spec/dynamini/querying_spec.rb +15 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7e1c5e5210674b1e75d93ca770697f796b9ca42e
|
|
4
|
+
data.tar.gz: 4de485ac6fa5fad8375104f6e3049abf3a542d09
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 141816813ba6319ebbede710503514cc1a88a55a2f915bc65e7b5d450e21b1ebd96e9df0b4fa6a1d0bf1e27e4f682d8f2eff3c13c87e824d8228dff608bfe1a2
|
|
7
|
+
data.tar.gz: 49a6b6842b43c606b6e766709d11de5ca8ef0da0eee8039446a3d00a0b8f165ff6ac1aff5a0d88869b62d9a0dd886c00413f6be51802ebf2a844960db5644712
|
data/dynamini.gemspec
CHANGED
data/lib/dynamini/adder.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Dynamini
|
|
|
6
6
|
def add_to(attribute, value)
|
|
7
7
|
complain_about(attribute) unless handles[attribute]
|
|
8
8
|
old_value = read_attribute(attribute)
|
|
9
|
-
add_value = self.class.attribute_callback(TypeHandler::SETTER_PROCS, handles[attribute], value)
|
|
9
|
+
add_value = self.class.attribute_callback(TypeHandler::SETTER_PROCS, handles[attribute], value, true)
|
|
10
10
|
if ADDABLE_TYPES.include? handles[attribute][:format]
|
|
11
11
|
@attributes[attribute] ? @attributes[attribute] += add_value : @attributes[attribute] = add_value
|
|
12
12
|
else
|
data/lib/dynamini/base.rb
CHANGED
|
@@ -172,7 +172,6 @@ module Dynamini
|
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
def self.create_key_hash(hash_value, range_value = nil)
|
|
175
|
-
|
|
176
175
|
key_hash = {self.hash_key => handled_key(self.hash_key, hash_value)}
|
|
177
176
|
key_hash[self.range_key] = handled_key(self.range_key, range_value) if self.range_key
|
|
178
177
|
key_hash
|
|
@@ -217,7 +216,7 @@ module Dynamini
|
|
|
217
216
|
def write_attribute(attribute, new_value, change: true, **options)
|
|
218
217
|
old_value = read_attribute(attribute)
|
|
219
218
|
if (handle = self.class.handles[attribute.to_sym]) && !new_value.nil?
|
|
220
|
-
new_value = self.class.attribute_callback(TypeHandler::SETTER_PROCS, handle, new_value)
|
|
219
|
+
new_value = self.class.attribute_callback(TypeHandler::SETTER_PROCS, handle, new_value, change)
|
|
221
220
|
end
|
|
222
221
|
@attributes[attribute] = new_value
|
|
223
222
|
record_change(attribute, old_value, new_value, options[:action]) if change && new_value != old_value
|
|
@@ -227,7 +226,7 @@ module Dynamini
|
|
|
227
226
|
value = @attributes[name]
|
|
228
227
|
if (handle = self.class.handles[name.to_sym])
|
|
229
228
|
value = handle[:options][:default] if value.nil?
|
|
230
|
-
value = self.class.attribute_callback(TypeHandler::GETTER_PROCS, handle, value) unless value.nil?
|
|
229
|
+
value = self.class.attribute_callback(TypeHandler::GETTER_PROCS, handle, value, false) unless value.nil?
|
|
231
230
|
end
|
|
232
231
|
value
|
|
233
232
|
end
|
|
@@ -9,8 +9,8 @@ module Dynamini
|
|
|
9
9
|
symbol: proc { |v| v.to_sym },
|
|
10
10
|
string: proc { |v| v.to_s },
|
|
11
11
|
boolean: proc { |v| v },
|
|
12
|
-
array: proc { |v| v.to_a },
|
|
13
|
-
set: proc { |v| Set.new(v) }
|
|
12
|
+
array: proc { |v| v.is_a?(Enumerable) ? v.to_a : [v] },
|
|
13
|
+
set: proc { |v| v.is_a?(Enumerable) ? Set.new(v) : Set.new([v]) }
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
SETTER_PROCS = {
|
|
@@ -21,8 +21,8 @@ module Dynamini
|
|
|
21
21
|
string: proc { |v| v.to_s },
|
|
22
22
|
boolean: proc { |v| v },
|
|
23
23
|
date: proc { |v| v.to_time.to_f },
|
|
24
|
-
array: proc { |v| v.to_a },
|
|
25
|
-
set: proc { |v| Set.new(v) }
|
|
24
|
+
array: proc { |v| v.is_a?(Enumerable) ? v.to_a : [v] },
|
|
25
|
+
set: proc { |v| v.is_a?(Enumerable) ? Set.new(v) : Set.new([v]) }
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
def handle(column, format_class, options = {})
|
|
@@ -73,19 +73,19 @@ module Dynamini
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def handled_key(column, value)
|
|
76
|
-
if
|
|
77
|
-
attribute_callback(GETTER_PROCS,
|
|
76
|
+
if handles[column]
|
|
77
|
+
attribute_callback(GETTER_PROCS, handles[column], value, false)
|
|
78
78
|
else
|
|
79
79
|
value
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
def attribute_callback(procs, handle, value)
|
|
83
|
+
def attribute_callback(procs, handle, value, validate)
|
|
84
84
|
callback = procs[handle[:format]]
|
|
85
85
|
if should_convert_elements?(handle, value)
|
|
86
86
|
result = convert_elements(value, procs[handle[:options][:of]])
|
|
87
87
|
callback.call(result)
|
|
88
|
-
elsif invalid_enumerable_value?(handle, value)
|
|
88
|
+
elsif validate && invalid_enumerable_value?(handle, value)
|
|
89
89
|
raise ArgumentError, "Can't write a non-enumerable value to field handled as #{handle[:format]}"
|
|
90
90
|
else
|
|
91
91
|
callback.call(value)
|
|
@@ -7,7 +7,8 @@ describe Dynamini::Querying do
|
|
|
7
7
|
name: 'Widget',
|
|
8
8
|
price: 9.99,
|
|
9
9
|
id: 'abcd1234',
|
|
10
|
-
hash_key: '009'
|
|
10
|
+
hash_key: '009',
|
|
11
|
+
my_attrib: 'hello'
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -55,6 +56,19 @@ describe Dynamini::Querying do
|
|
|
55
56
|
end
|
|
56
57
|
end
|
|
57
58
|
|
|
59
|
+
context 'when the record has invalid data types for its handles' do
|
|
60
|
+
class SetHandler < Dynamini::Base
|
|
61
|
+
set_hash_key :id
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'loads the record' do
|
|
65
|
+
SetHandler.create!(id: '1', attrib: 'hello')
|
|
66
|
+
SetHandler.handle(:attrib, :set)
|
|
67
|
+
found = SetHandler.find('1')
|
|
68
|
+
expect(found.id).to eq('1')
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
58
72
|
context 'when retrieving a subclass' do
|
|
59
73
|
class Foo < Dynamini::Base
|
|
60
74
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dynamini
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Greg Ward
|
|
@@ -15,7 +15,7 @@ authors:
|
|
|
15
15
|
autorequire:
|
|
16
16
|
bindir: bin
|
|
17
17
|
cert_chain: []
|
|
18
|
-
date: 2016-
|
|
18
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: activemodel
|
|
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
185
185
|
version: '0'
|
|
186
186
|
requirements: []
|
|
187
187
|
rubyforge_project:
|
|
188
|
-
rubygems_version: 2.
|
|
188
|
+
rubygems_version: 2.5.1
|
|
189
189
|
signing_key:
|
|
190
190
|
specification_version: 4
|
|
191
191
|
summary: DynamoDB interface
|