materialist 2.2.0 → 2.3.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/README.md +8 -3
- data/RELEASE_NOTES.md +5 -0
- data/lib/materialist/materializer.rb +18 -0
- data/lib/materialist.rb +1 -1
- data/spec/materialist/materializer_spec.rb +48 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 742d36bce66476aa11b5a36399c4fcdb7b6d4b48
|
4
|
+
data.tar.gz: 8f22cc1e86242ca63fd87145d5cbbd57b56f889c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37148508f6fb84debd7e0975462164ba71f98855299fb8d9aa9f09eef7aba38dd21d5ddacf10bfbbb9496eb51204860f30ced33127c727c11e1c152c9d14ad8a
|
7
|
+
data.tar.gz: 4930c84c558fcb9d5fcc89353d4f4098d39958cbbe25bc4e811a9e1c9e3cc7b4f75143185f2d81246fd4417f6fdbd9f110f35aa228f92b731cd010586253fed7
|
data/README.md
CHANGED
@@ -169,14 +169,14 @@ describes materializing the linked entity.
|
|
169
169
|
This simulates a `:noop` event on the given topic and the `url` of the
|
170
170
|
liked resource `<key>` as it appears on the response (`_links`) -- meaning the materializer for the given topic will be invoked.
|
171
171
|
|
172
|
-
#### `
|
173
|
-
describes the name of the instance method(s) to be invoked
|
172
|
+
#### `before_upsert <method> (, <method>(, ...))` -- also `before_destroy`
|
173
|
+
describes the name of the instance method(s) to be invoked before a record is materialized, with the record as it exists in the database, or nil if it has not been created yet.
|
174
174
|
|
175
175
|
```ruby
|
176
176
|
class ZoneMaterializer
|
177
177
|
include Materialist::Materializer
|
178
178
|
|
179
|
-
|
179
|
+
before_upsert :my_method, :my_second_method
|
180
180
|
|
181
181
|
def my_method(record)
|
182
182
|
end
|
@@ -186,6 +186,11 @@ class ZoneMaterializer
|
|
186
186
|
end
|
187
187
|
```
|
188
188
|
|
189
|
+
|
190
|
+
#### `after_upsert <method> (, <method>(, ...))` -- also `after_destroy`
|
191
|
+
describes the name of the instance method(s) to be invoked after a record was materialized, with the updated record as a parameter. See above for a similar example implementation.
|
192
|
+
|
193
|
+
|
189
194
|
### Materialized record
|
190
195
|
|
191
196
|
Imagine you have materialized rider from a routemaster topic and you need to access a key from the remote source that you HAVEN'T materialized locally.
|
data/RELEASE_NOTES.md
CHANGED
@@ -85,6 +85,10 @@ module Materialist
|
|
85
85
|
__materialist_options[:url_parser] = url_parser_block
|
86
86
|
end
|
87
87
|
|
88
|
+
def before_upsert(*method_array)
|
89
|
+
__materialist_options[:before_upsert] = method_array
|
90
|
+
end
|
91
|
+
|
88
92
|
def after_upsert(*method_array)
|
89
93
|
__materialist_options[:after_upsert] = method_array
|
90
94
|
end
|
@@ -92,6 +96,10 @@ module Materialist
|
|
92
96
|
def after_destroy(*method_array)
|
93
97
|
__materialist_options[:after_destroy] = method_array
|
94
98
|
end
|
99
|
+
|
100
|
+
def before_destroy(*method_array)
|
101
|
+
__materialist_options[:before_destroy] = method_array
|
102
|
+
end
|
95
103
|
end
|
96
104
|
|
97
105
|
class Materializer
|
@@ -126,6 +134,7 @@ module Materialist
|
|
126
134
|
def destroy
|
127
135
|
return unless materialize_self?
|
128
136
|
model_class.find_by(source_lookup(url)).tap do |entity|
|
137
|
+
send_messages(before_destroy, entity) unless before_destroy.nil?
|
129
138
|
entity.destroy!.tap do |entity|
|
130
139
|
send_messages(after_destroy, entity) unless after_destroy.nil?
|
131
140
|
end if entity
|
@@ -142,6 +151,7 @@ module Materialist
|
|
142
151
|
|
143
152
|
def upsert_record
|
144
153
|
model_class.find_or_initialize_by(source_lookup(url)).tap do |entity|
|
154
|
+
send_messages(before_upsert, entity) unless before_upsert.nil?
|
145
155
|
entity.update_attributes attributes
|
146
156
|
entity.save!
|
147
157
|
end
|
@@ -169,10 +179,18 @@ module Materialist
|
|
169
179
|
options.fetch :mapping
|
170
180
|
end
|
171
181
|
|
182
|
+
def before_upsert
|
183
|
+
options[:before_upsert]
|
184
|
+
end
|
185
|
+
|
172
186
|
def after_upsert
|
173
187
|
options[:after_upsert]
|
174
188
|
end
|
175
189
|
|
190
|
+
def before_destroy
|
191
|
+
options[:before_destroy]
|
192
|
+
end
|
193
|
+
|
176
194
|
def after_destroy
|
177
195
|
options[:after_destroy]
|
178
196
|
end
|
data/lib/materialist.rb
CHANGED
@@ -274,38 +274,54 @@ RSpec.describe Materialist::Materializer do
|
|
274
274
|
end
|
275
275
|
end
|
276
276
|
|
277
|
-
context "when
|
277
|
+
context "when {after, before}_upsert is configured" do
|
278
278
|
let!(:record) { Foobar.create!(source_url: source_url, name: 'mo') }
|
279
279
|
let!(:materializer_class) do
|
280
280
|
class FoobarMaterializer
|
281
281
|
include Materialist::Materializer
|
282
282
|
|
283
283
|
persist_to :foobar
|
284
|
+
before_upsert :my_before_method
|
284
285
|
after_upsert :my_method
|
285
286
|
|
286
287
|
def my_method(entity)
|
287
288
|
entity.actions_called[:after_upsert] = true
|
288
289
|
end
|
290
|
+
|
291
|
+
def my_before_method(entity)
|
292
|
+
entity.actions_called[:before_upsert] = true
|
293
|
+
end
|
289
294
|
end
|
290
295
|
end
|
291
296
|
|
292
297
|
%i(create update noop).each do |action_name|
|
293
298
|
context "when action is :#{action_name}" do
|
294
299
|
let(:action) { action_name }
|
300
|
+
it "calls before_upsert method" do
|
301
|
+
expect{ perform }.to change { record.actions_called[:before_upsert] }
|
302
|
+
end
|
303
|
+
|
295
304
|
it "calls after_upsert method" do
|
296
305
|
expect{ perform }.to change { record.actions_called[:after_upsert] }
|
297
306
|
end
|
298
307
|
|
299
|
-
it "calls more than one
|
308
|
+
it "calls more than one method" do
|
300
309
|
class FoobarMaterializer
|
310
|
+
before_upsert :my_before_method, :my_before_method2
|
301
311
|
after_upsert :my_method, :my_method2
|
302
312
|
|
303
313
|
def my_method2(entity)
|
304
314
|
entity.actions_called[:after_upsert2] = true
|
305
315
|
end
|
316
|
+
|
317
|
+
def my_before_method2(entity)
|
318
|
+
entity.actions_called[:before_upsert2] = true
|
319
|
+
end
|
306
320
|
end
|
307
|
-
expect{ perform }.to change { record.actions_called[:after_upsert]
|
308
|
-
.and change { record.actions_called[:after_upsert2]
|
321
|
+
expect{ perform }.to change { record.actions_called[:after_upsert] }
|
322
|
+
.and change { record.actions_called[:after_upsert2] }
|
323
|
+
.and change { record.actions_called[:before_upsert] }
|
324
|
+
.and change { record.actions_called[:before_upsert2] }
|
309
325
|
end
|
310
326
|
end
|
311
327
|
end
|
@@ -316,22 +332,31 @@ RSpec.describe Materialist::Materializer do
|
|
316
332
|
it "does not call after_upsert method" do
|
317
333
|
expect{ perform }.to_not change { record.actions_called[:after_upsert] }
|
318
334
|
end
|
335
|
+
|
336
|
+
it "does call after_upsert method" do
|
337
|
+
expect{ perform }.to_not change { record.actions_called[:before_upsert] }
|
338
|
+
end
|
319
339
|
end
|
320
340
|
|
321
341
|
end
|
322
342
|
|
323
|
-
context "when
|
343
|
+
context "when {before, after}_destroy is configured" do
|
324
344
|
let!(:record) { Foobar.create!(source_url: source_url, name: 'mo') }
|
325
345
|
let!(:materializer_class) do
|
326
346
|
class FoobarMaterializer
|
327
347
|
include Materialist::Materializer
|
328
348
|
|
329
349
|
persist_to :foobar
|
350
|
+
before_destroy :my_before_method
|
330
351
|
after_destroy :my_method
|
331
352
|
|
332
353
|
def my_method(entity)
|
333
354
|
entity.actions_called[:after_destroy] = true
|
334
355
|
end
|
356
|
+
|
357
|
+
def my_before_method(entity)
|
358
|
+
entity.actions_called[:before_destroy] = true unless entity.nil?
|
359
|
+
end
|
335
360
|
end
|
336
361
|
end
|
337
362
|
|
@@ -341,6 +366,10 @@ RSpec.describe Materialist::Materializer do
|
|
341
366
|
it "does not call after_destroy method" do
|
342
367
|
expect{ perform }.to_not change { record.actions_called[:after_destroy] }
|
343
368
|
end
|
369
|
+
|
370
|
+
it "does not call before_destroy method" do
|
371
|
+
expect{ perform }.to_not change { record.actions_called[:before_destroy] }
|
372
|
+
end
|
344
373
|
end
|
345
374
|
end
|
346
375
|
|
@@ -351,16 +380,27 @@ RSpec.describe Materialist::Materializer do
|
|
351
380
|
expect{ perform }.to change { record.actions_called[:after_destroy] }
|
352
381
|
end
|
353
382
|
|
354
|
-
it "calls
|
383
|
+
it "calls before_destroy method" do
|
384
|
+
expect{ perform }.to change { record.actions_called[:before_destroy] }
|
385
|
+
end
|
386
|
+
|
387
|
+
it "calls more than one method" do
|
355
388
|
class FoobarMaterializer
|
389
|
+
before_destroy :my_before_method, :my_before_method2
|
356
390
|
after_destroy :my_method, :my_method2
|
357
391
|
|
358
392
|
def my_method2(entity)
|
359
393
|
entity.actions_called[:after_destroy2] = true
|
360
394
|
end
|
395
|
+
|
396
|
+
def my_before_method2(entity)
|
397
|
+
entity.actions_called[:before_destroy2] = true unless entity.nil?
|
398
|
+
end
|
361
399
|
end
|
362
|
-
expect{ perform }.to change { record.actions_called[:after_destroy]
|
363
|
-
.and change { record.actions_called[:after_destroy2]
|
400
|
+
expect{ perform }.to change { record.actions_called[:after_destroy] }
|
401
|
+
.and change { record.actions_called[:after_destroy2] }
|
402
|
+
.and change { record.actions_called[:before_destroy] }
|
403
|
+
.and change { record.actions_called[:before_destroy2] }
|
364
404
|
end
|
365
405
|
|
366
406
|
context "when resource doesn't exist locally" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: materialist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mo Valipour
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|