dynamini 2.7.8 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +32 -0
- data/dynamini.gemspec +1 -1
- data/lib/dynamini/batch_operations.rb +2 -2
- data/spec/dynamini/batch_operations_spec.rb +12 -0
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e236f8c8534a981275e1f4e6f92fea37fbdad844
|
4
|
+
data.tar.gz: 1e72cb755d72e27ae30834db85a2e0f2d00e2141
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1f37058d062d3ddc4b7ead58a23c0335cbeda994db926ca3abb2178139b7eefcbcf1a4125bce7c893575ec67197aa30f62dd32a5788afe6f8ff8194eda8ddc0
|
7
|
+
data.tar.gz: a1aeae7aaa42a1a62c5c966e5141aa9804026541613094d4f5fb6f6a05e9f6bc808c796623763ec7c9eda81a4f5ee6e57caaeb556e1f19a6956c98c0d19e8e8f
|
data/README.md
CHANGED
@@ -198,6 +198,38 @@ DailyWeather.query(hash_key: "Toronto", scan_index_forward: false)
|
|
198
198
|
> [C, B, A]
|
199
199
|
```
|
200
200
|
|
201
|
+
## Batch Saving
|
202
|
+
Dynamo allows batch saving, see: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
class Product < Dynamini::Base
|
206
|
+
set_hash_key :upc
|
207
|
+
end
|
208
|
+
|
209
|
+
model1 = Product.new({upc: 'abc', name: 'model1'})
|
210
|
+
model2 = Product.new({upc: 'xyz', name: 'model2'})
|
211
|
+
|
212
|
+
Product.import([model1, model2])
|
213
|
+
|
214
|
+
Product.find('abc').name
|
215
|
+
> 'model1'
|
216
|
+
|
217
|
+
model3 = Product.new({upc: 'qwerty', name: 'model3'}, skip_timestamps: true)
|
218
|
+
|
219
|
+
Product.import([model3], skip_timestamps: true)
|
220
|
+
|
221
|
+
Product.find('qwerty').name
|
222
|
+
> 'model3'
|
223
|
+
|
224
|
+
Product.find('qwerty').created_at
|
225
|
+
> nil
|
226
|
+
|
227
|
+
Product.find('qwerty').updated_at
|
228
|
+
> nil
|
229
|
+
|
230
|
+
````
|
231
|
+
|
232
|
+
|
201
233
|
## Testing
|
202
234
|
We've included an optional in-memory test client, so you don't necessarily have to connect to a real Dynamo instance when running tests. You could also use this in your development environment if you don't have a real Dynamo instance yet, but the data saved to it won't persist through a server restart.
|
203
235
|
|
data/dynamini.gemspec
CHANGED
@@ -3,12 +3,12 @@ require 'ostruct'
|
|
3
3
|
module Dynamini
|
4
4
|
module BatchOperations
|
5
5
|
|
6
|
-
def import(models)
|
6
|
+
def import(models, options = {})
|
7
7
|
# Max batch size is 25, per Dynamo BatchWriteItem docs
|
8
8
|
|
9
9
|
models.each_slice(25) do |batch|
|
10
10
|
batch.each do |model|
|
11
|
-
model.send(:generate_timestamps!)
|
11
|
+
model.send(:generate_timestamps!) unless options[:skip_timestamps]
|
12
12
|
end
|
13
13
|
dynamo_batch_save(batch)
|
14
14
|
end
|
@@ -28,6 +28,18 @@ describe Dynamini::BatchOperations do
|
|
28
28
|
expect(subject.find(model2.id).created_at).not_to be_nil
|
29
29
|
end
|
30
30
|
|
31
|
+
it 'should not generate timestamps if skip_timestamp flag is passed' do
|
32
|
+
model1 = Dynamini::Base.new(model_attributes)
|
33
|
+
model2 = Dynamini::Base.new(model_attributes.merge(id: '2'))
|
34
|
+
|
35
|
+
subject.import([model1, model2], skip_timestamps: true)
|
36
|
+
|
37
|
+
expect(subject.find(model1.id).updated_at).to be_nil
|
38
|
+
expect(subject.find(model1.id).created_at).to be_nil
|
39
|
+
expect(subject.find(model2.id).updated_at).to be_nil
|
40
|
+
expect(subject.find(model2.id).created_at).to be_nil
|
41
|
+
end
|
42
|
+
|
31
43
|
it 'should call .dynamo_batch_save with batches of 25 models' do
|
32
44
|
models = Array.new(30, model)
|
33
45
|
expect(subject).to receive(:dynamo_batch_save).with(array_including(models[0..24])).ordered
|
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.8.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: 2017-
|
18
|
+
date: 2017-08-10 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activemodel
|
@@ -140,7 +140,6 @@ files:
|
|
140
140
|
- README.md
|
141
141
|
- Rakefile
|
142
142
|
- dynamini.gemspec
|
143
|
-
- lib/.DS_Store
|
144
143
|
- lib/dynamini.rb
|
145
144
|
- lib/dynamini/attributes.rb
|
146
145
|
- lib/dynamini/base.rb
|
@@ -185,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
184
|
version: '0'
|
186
185
|
requirements: []
|
187
186
|
rubyforge_project:
|
188
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.6.12
|
189
188
|
signing_key:
|
190
189
|
specification_version: 4
|
191
190
|
summary: DynamoDB interface
|