ocean-dynamo 0.2.1 → 0.2.2
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/ocean-dynamo/attributes.rb +2 -12
- data/lib/ocean-dynamo/class_variables.rb +9 -0
- data/lib/ocean-dynamo/exceptions.rb +2 -0
- data/lib/ocean-dynamo/persistence.rb +35 -5
- data/lib/ocean-dynamo/queries.rb +3 -1
- data/lib/ocean-dynamo/schema.rb +6 -2
- data/lib/ocean-dynamo/tables.rb +2 -0
- data/lib/ocean-dynamo/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38c9f3db161b07ef4486141afad09f05af00b752
|
4
|
+
data.tar.gz: 92a73810cedf7aceb64e31fde8582afd2e56fe18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0116191369abb7f9124034727ea50dc32995cfbebd55a4c030ded15a963c3f5fd7a1ed244ce85971606af4e329cf78f942b84a2d81e270af94bc4eddd135c3b1
|
7
|
+
data.tar.gz: 95861f8c29cd86c2018633549c21ce45b61adf65e8c2742496da04321ef6e2dd40447b8438c7d70ce36c40b35bcc87874bb65a50279ae835ef0f9a4d84b7cd5b
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module OceanDynamo
|
2
2
|
class Base
|
3
|
-
include ActiveModel::DeprecatedMassAssignmentSecurity
|
4
|
-
include ActiveModel::ForbiddenAttributesProtection
|
3
|
+
#include ActiveModel::DeprecatedMassAssignmentSecurity
|
4
|
+
#include ActiveModel::ForbiddenAttributesProtection
|
5
5
|
|
6
6
|
attr_reader :attributes
|
7
7
|
attr_reader :destroyed
|
@@ -161,16 +161,6 @@ module OceanDynamo
|
|
161
161
|
end
|
162
162
|
|
163
163
|
|
164
|
-
def deserialized_attributes(consistent_read: false, hash: nil)
|
165
|
-
hash ||= dynamo_item.attributes.to_hash(consistent_read: consistent_read)
|
166
|
-
result = {}
|
167
|
-
fields.each do |attribute, metadata|
|
168
|
-
result[attribute] = deserialize_attribute(hash[attribute], metadata)
|
169
|
-
end
|
170
|
-
result
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
164
|
def deserialize_attribute(value, metadata, type: metadata[:type])
|
175
165
|
case type
|
176
166
|
when :string
|
@@ -34,5 +34,14 @@ module OceanDynamo
|
|
34
34
|
class_attribute :fields, instance_writer: false
|
35
35
|
self.fields = nil
|
36
36
|
|
37
|
+
class_attribute :table_connected, instance_writer: false
|
38
|
+
self.table_connected = false
|
39
|
+
|
40
|
+
class_attribute :table_connect_policy, instance_writer: false
|
41
|
+
self.table_connect_policy = :late
|
42
|
+
|
43
|
+
class_attribute :table_create_policy, instance_writer: false
|
44
|
+
self.table_create_policy = false
|
45
|
+
|
37
46
|
end
|
38
47
|
end
|
@@ -148,6 +148,7 @@ module OceanDynamo
|
|
148
148
|
|
149
149
|
|
150
150
|
def delete
|
151
|
+
_connect_late?
|
151
152
|
if persisted?
|
152
153
|
@dynamo_item.delete
|
153
154
|
end
|
@@ -166,6 +167,7 @@ module OceanDynamo
|
|
166
167
|
|
167
168
|
def touch(name=nil)
|
168
169
|
raise DynamoError, "can not touch on a new record object" unless persisted?
|
170
|
+
_connect_late?
|
169
171
|
run_callbacks :touch do
|
170
172
|
attrs = ['updated_at']
|
171
173
|
attrs << name if name
|
@@ -185,27 +187,55 @@ module OceanDynamo
|
|
185
187
|
|
186
188
|
protected
|
187
189
|
|
190
|
+
def self._connect_late?
|
191
|
+
return false if table_connected
|
192
|
+
return false unless table_connect_policy
|
193
|
+
establish_db_connection
|
194
|
+
true
|
195
|
+
end
|
196
|
+
|
197
|
+
|
198
|
+
def _connect_late?
|
199
|
+
self.class._connect_late?
|
200
|
+
end
|
201
|
+
|
202
|
+
|
188
203
|
def perform_validations(options={}) # :nodoc:
|
189
204
|
options[:validate] == false || valid?(options[:context])
|
190
205
|
end
|
191
206
|
|
192
207
|
|
193
208
|
def dynamo_persist # :nodoc:
|
209
|
+
_connect_late?
|
194
210
|
@dynamo_item = dynamo_items.put(serialized_attributes)
|
195
211
|
@new_record = false
|
212
|
+
true
|
196
213
|
end
|
197
214
|
|
198
215
|
|
199
|
-
def
|
216
|
+
def dynamo_unpersist(item, consistent) # :nodoc:
|
217
|
+
_connect_late?
|
200
218
|
@dynamo_item = item
|
201
219
|
@new_record = false
|
202
|
-
assign_attributes(
|
203
|
-
hash: nil,
|
204
|
-
consistent_read: consistent)
|
205
|
-
)
|
220
|
+
assign_attributes(_dynamo_read_attributes(consistent_read: consistent))
|
206
221
|
self
|
207
222
|
end
|
208
223
|
|
209
224
|
|
225
|
+
def _dynamo_read_attributes(consistent_read: false) # :nodoc:
|
226
|
+
hash = _dynamo_read_raw_attributes(consistent_read)
|
227
|
+
result = {}
|
228
|
+
fields.each do |attribute, metadata|
|
229
|
+
result[attribute] = deserialize_attribute(hash[attribute], metadata)
|
230
|
+
end
|
231
|
+
result
|
232
|
+
end
|
233
|
+
|
234
|
+
|
235
|
+
def _dynamo_read_raw_attributes(consistent) # :nodoc:
|
236
|
+
dynamo_item.attributes.to_hash(consistent_read: consistent)
|
237
|
+
end
|
238
|
+
|
239
|
+
|
210
240
|
end
|
211
241
|
end
|
data/lib/ocean-dynamo/queries.rb
CHANGED
@@ -2,13 +2,15 @@ module OceanDynamo
|
|
2
2
|
class Base
|
3
3
|
|
4
4
|
def self.find(hash, range=nil, consistent: false)
|
5
|
+
_connect_late?
|
5
6
|
item = dynamo_items[hash, range]
|
6
7
|
raise RecordNotFound unless item.exists?
|
7
|
-
new.send(:
|
8
|
+
new.send(:dynamo_unpersist, item, consistent)
|
8
9
|
end
|
9
10
|
|
10
11
|
|
11
12
|
def self.count
|
13
|
+
_connect_late?
|
12
14
|
dynamo_table.item_count || -1 # The || -1 is for fake_dynamo specs.
|
13
15
|
end
|
14
16
|
|
data/lib/ocean-dynamo/schema.rb
CHANGED
@@ -8,12 +8,16 @@ module OceanDynamo
|
|
8
8
|
table_name_suffix: nil,
|
9
9
|
read_capacity_units: 10,
|
10
10
|
write_capacity_units: 5,
|
11
|
-
connect:
|
11
|
+
connect: :late,
|
12
|
+
create: false,
|
12
13
|
&block)
|
13
14
|
# Set class vars
|
14
15
|
self.dynamo_client = nil
|
15
16
|
self.dynamo_table = nil
|
16
17
|
self.dynamo_items = nil
|
18
|
+
self.table_connected = false
|
19
|
+
self.table_connect_policy = connect
|
20
|
+
self.table_create_policy = create
|
17
21
|
self.table_hash_key = table_hash_key
|
18
22
|
self.table_range_key = table_range_key
|
19
23
|
self.table_name = table_name
|
@@ -27,7 +31,7 @@ module OceanDynamo
|
|
27
31
|
DEFAULT_ATTRIBUTES.each { |name, type, **pairs| attribute name, type, **pairs }
|
28
32
|
block.call
|
29
33
|
# Connect to AWS
|
30
|
-
establish_db_connection if connect
|
34
|
+
establish_db_connection if connect == true
|
31
35
|
# Finally return the full table name
|
32
36
|
table_full_name
|
33
37
|
end
|
data/lib/ocean-dynamo/tables.rb
CHANGED
data/lib/ocean-dynamo/version.rb
CHANGED