deimos-ruby 1.22 → 1.22.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/deimos/active_record_consume/batch_consumption.rb +5 -1
- data/lib/deimos/active_record_consume/batch_record.rb +1 -1
- data/lib/deimos/version.rb +1 -1
- data/lib/tasks/deimos.rake +3 -0
- data/spec/active_record_batch_consumer_association_spec.rb +4 -8
- data/spec/active_record_batch_consumer_spec.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aa472d5bdd8c86fe0502451f7554598d189fa0d5004603d8970561feed38d9f
|
4
|
+
data.tar.gz: 669d564cb23fccc41a9b5a3dd37c49a17787adf7fcecd486746f9d91031d8367
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f49565845478349949d7dd5909b7d276590f91201d0848123c42a0b433114ce2a31cda8a0d43058f6f3f76114d3dfc1d32b8ee53a2a291588865ed5aaa8a8ec
|
7
|
+
data.tar.gz: 295802ba93bbf1e8a9c6ca95ac1944b85d3676881c3cb37854f883d42630f68f11a8971527611f1bf1c4681e5b8fab4aa202c1bcd2b1863296236b9a175bd253
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## UNRELEASED
|
9
9
|
|
10
|
+
# 1.22.2 - 2023-05-10
|
11
|
+
- Feature: Add `DEIMOS_TASK_NAME` env variable when running a task (consumer, DB poller, DB producer).
|
12
|
+
|
13
|
+
# 1.22.1 - 2023-05-01
|
14
|
+
|
15
|
+
- Fix: Bug introduced with 1.22 when associations are not used
|
16
|
+
|
10
17
|
# 1.22 - 2023-05-01
|
11
18
|
|
12
19
|
- Feature: Added `replace_associations` and changed default behavior for multi-table consuming. No longer relies on Rails direct associations and wonky magic for new vs. existing records.
|
@@ -183,9 +183,13 @@ module Deimos
|
|
183
183
|
attrs = attrs.merge(record_key(m.key))
|
184
184
|
next unless attrs
|
185
185
|
|
186
|
+
col = if @klass.column_names.include?(self.class.bulk_import_id_column.to_s)
|
187
|
+
self.class.bulk_import_id_column
|
188
|
+
end
|
189
|
+
|
186
190
|
BatchRecord.new(klass: @klass,
|
187
191
|
attributes: attrs,
|
188
|
-
bulk_import_column:
|
192
|
+
bulk_import_column: col)
|
189
193
|
end
|
190
194
|
BatchRecordList.new(records.compact)
|
191
195
|
end
|
@@ -26,7 +26,6 @@ module Deimos
|
|
26
26
|
@klass = klass
|
27
27
|
if bulk_import_column
|
28
28
|
self.bulk_import_column = bulk_import_column
|
29
|
-
validate_import_id!
|
30
29
|
self.bulk_import_id = SecureRandom.uuid
|
31
30
|
attributes[bulk_import_column] = bulk_import_id
|
32
31
|
end
|
@@ -35,6 +34,7 @@ module Deimos
|
|
35
34
|
assoc_keys = attributes.keys.select { |k| klass.reflect_on_association(k) }
|
36
35
|
# a hash with just the association keys, removing all actual column information.
|
37
36
|
self.associations = attributes.slice(*assoc_keys)
|
37
|
+
validate_import_id! if self.associations.any?
|
38
38
|
end
|
39
39
|
|
40
40
|
# Checks whether the entities has necessary columns for association saving to work
|
data/lib/deimos/version.rb
CHANGED
data/lib/tasks/deimos.rake
CHANGED
@@ -12,6 +12,7 @@ namespace :deimos do
|
|
12
12
|
config.producers.backend = :kafka if config.producers.backend == :kafka_async
|
13
13
|
end
|
14
14
|
ENV['DEIMOS_RAKE_TASK'] = 'true'
|
15
|
+
ENV['DEIMOS_TASK_NAME'] = 'consumer'
|
15
16
|
STDOUT.sync = true
|
16
17
|
Rails.logger.info('Running deimos:start rake task.')
|
17
18
|
Phobos::CLI::Commands.start(%w(start --skip_config))
|
@@ -20,6 +21,7 @@ namespace :deimos do
|
|
20
21
|
desc 'Starts the Deimos database producer'
|
21
22
|
task db_producer: :environment do
|
22
23
|
ENV['DEIMOS_RAKE_TASK'] = 'true'
|
24
|
+
ENV['DEIMOS_TASK_NAME'] = 'db_producer'
|
23
25
|
STDOUT.sync = true
|
24
26
|
Rails.logger.info('Running deimos:db_producer rake task.')
|
25
27
|
thread_count = ENV['THREAD_COUNT'].to_i.zero? ? 1 : ENV['THREAD_COUNT'].to_i
|
@@ -28,6 +30,7 @@ namespace :deimos do
|
|
28
30
|
|
29
31
|
task db_poller: :environment do
|
30
32
|
ENV['DEIMOS_RAKE_TASK'] = 'true'
|
33
|
+
ENV['DEIMOS_TASK_NAME'] = 'db_poller'
|
31
34
|
STDOUT.sync = true
|
32
35
|
Rails.logger.info('Running deimos:db_poller rake task.')
|
33
36
|
Deimos::Utils::DbPoller.start!
|
@@ -74,7 +74,9 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
74
74
|
end
|
75
75
|
|
76
76
|
prepend_before(:each) do
|
77
|
+
consumer_class.config[:bulk_import_id_column] = :bulk_import_id
|
77
78
|
stub_const('MyBatchConsumer', consumer_class)
|
79
|
+
stub_const('ConsumerTest::MyBatchConsumer', consumer_class)
|
78
80
|
end
|
79
81
|
|
80
82
|
# Helper to publish a list of messages and call the consumer
|
@@ -157,7 +159,6 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
157
159
|
end
|
158
160
|
|
159
161
|
it 'should raise error when bulk_import_id is not found' do
|
160
|
-
stub_const('MyBatchConsumer', consumer_class)
|
161
162
|
expect {
|
162
163
|
publish_batch([{ key: 2,
|
163
164
|
payload: { test_id: 'xyz', some_int: 5, title: 'Widget Title' } }])
|
@@ -169,6 +170,7 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
169
170
|
context 'with one-to-one relation in association and custom bulk_import_id' do
|
170
171
|
before(:each) do
|
171
172
|
consumer_class.config[:bulk_import_id_column] = :custom_id
|
173
|
+
consumer_class.config[:replace_associations] = false
|
172
174
|
end
|
173
175
|
|
174
176
|
before(:all) do
|
@@ -177,7 +179,6 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
177
179
|
end
|
178
180
|
|
179
181
|
it 'should save item to widget and associated detail' do
|
180
|
-
stub_const('MyBatchConsumer', consumer_class)
|
181
182
|
publish_batch([{ key: 2,
|
182
183
|
payload: { test_id: 'xyz', some_int: 5, title: 'Widget Title' } }])
|
183
184
|
expect(Widget.count).to eq(2)
|
@@ -188,7 +189,6 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
188
189
|
|
189
190
|
context 'with one-to-many relationship in association and default bulk_import_id' do
|
190
191
|
before(:each) do
|
191
|
-
consumer_class.config[:bulk_import_id_column] = :bulk_import_id
|
192
192
|
consumer_class.config[:replace_associations] = false
|
193
193
|
consumer_class.record_attributes_proc = proc do |payload|
|
194
194
|
{
|
@@ -209,7 +209,7 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
209
209
|
end
|
210
210
|
|
211
211
|
it 'should save item to widget and associated details' do
|
212
|
-
|
212
|
+
consumer_class.config[:replace_associations] = false
|
213
213
|
publish_batch([{ key: 2,
|
214
214
|
payload: { test_id: 'xyz', some_int: 5, title: 'Widget Title' } }])
|
215
215
|
expect(Widget.count).to eq(2)
|
@@ -229,7 +229,6 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
229
229
|
|
230
230
|
context 'with replace_associations on' do
|
231
231
|
before(:each) do
|
232
|
-
consumer_class.config[:bulk_import_id_column] = :bulk_import_id
|
233
232
|
consumer_class.config[:replace_associations] = true
|
234
233
|
consumer_class.record_attributes_proc = proc do |payload|
|
235
234
|
{
|
@@ -250,7 +249,6 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
250
249
|
end
|
251
250
|
|
252
251
|
it 'should save item to widget and replace associated details' do
|
253
|
-
stub_const('MyBatchConsumer', consumer_class)
|
254
252
|
publish_batch([{ key: 2,
|
255
253
|
payload: { test_id: 'xyz', some_int: 5, title: 'Widget Title' } }])
|
256
254
|
expect(Widget.count).to eq(2)
|
@@ -271,12 +269,10 @@ module ActiveRecordBatchConsumerTest # rubocop:disable Metrics/ModuleLength
|
|
271
269
|
|
272
270
|
context 'with invalid models' do
|
273
271
|
before(:each) do
|
274
|
-
consumer_class.config[:bulk_import_id_column] = :bulk_import_id
|
275
272
|
consumer_class.should_consume_proc = proc { |val| val.some_int <= 10 }
|
276
273
|
end
|
277
274
|
|
278
275
|
it 'should only save valid models' do
|
279
|
-
stub_const('MyBatchConsumer', consumer_class)
|
280
276
|
publish_batch([{ key: 2,
|
281
277
|
payload: { test_id: 'xyz', some_int: 5, title: 'Widget Title' } },
|
282
278
|
{ key: 3,
|
@@ -32,6 +32,8 @@ module ActiveRecordBatchConsumerTest
|
|
32
32
|
|
33
33
|
prepend_before(:each) do
|
34
34
|
stub_const('MyBatchConsumer', consumer_class)
|
35
|
+
stub_const('ConsumerTest::MyBatchConsumer', consumer_class)
|
36
|
+
consumer_class.config[:bulk_import_id_column] = :bulk_import_id # default
|
35
37
|
end
|
36
38
|
|
37
39
|
around(:each) do |ex|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deimos-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.22.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro_turf
|