dionysus-rb 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8297895cea885c4df1b824188297d199eed0eb00f4c52f102842e8468c02728a
4
- data.tar.gz: b71aff2bf67cffe2a5be1e9befd29f3651a23501ee107806b7c2c6eef85f744f
3
+ metadata.gz: '0934079a452c75d517f1954e9cc6650c4b6219273c329013b676f336ea0d9e13'
4
+ data.tar.gz: bee752d4720e8f4249867ecf3506b725fa9ba9cd678ebadf9ac0ac893c635925
5
5
  SHA512:
6
- metadata.gz: 3ad54974b1e4956cd76f94e865c225dfe1beb2b339a29b6a594faf1671f59b4388d9a39a420788f57692e168edb1fc067e351a96d7d5883ec237f051f319eb21
7
- data.tar.gz: 428894822478c3ed6296eb51c7440049fe39dd3ec54220abc038e1786b3f4468e48ee745cd2cadaaf7a419b9b093e79628cfb0be476602d352c6317280771685
6
+ metadata.gz: e12c164f5909f35e9b0d4336fb31ebb3d79e064409243beaad6e40c32f5590ff296ee805601de312b111fcc5fbb10d86008064cb2c229de56d7eab8518e6c9f9
7
+ data.tar.gz: 6a0fffb5d3b4d65eab34a0aaa16871002b8713addb45e07a1094706559fc978d5b37c885d6d2179c481bea436eddfe9805db0385a464ddb6a70b056ccf10e489
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.4.0]
4
+ - Allow `Dionysus::Producer::Genesis::StreamJob`/`Dionysus::Producer::Genesis::Streamer` to take more options and perform filtering by extra conditions. This is useful if you only need to stream some of the records.
5
+
3
6
  ## [0.3.0]
4
7
  - Allow to provide multiple message filters. `message_filter` stays for backwards compatibility and depends on `message_filters`.
5
8
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dionysus-rb (0.3.0)
4
+ dionysus-rb (0.4.0)
5
5
  activerecord (>= 5)
6
6
  activesupport (>= 3.2)
7
7
  concurrent-ruby
@@ -5,9 +5,10 @@ class Dionysus::Producer::Genesis::StreamJob
5
5
 
6
6
  sidekiq_options queue: Dionysus::Producer::Config.default_sidekiq_queue
7
7
 
8
- def perform(topic, model_klass, from, to, number_of_days, streamer_job)
8
+ def perform(topic, model_klass, from, to, number_of_days, streamer_job, options = {})
9
+ final_options = options.symbolize_keys.reverse_merge(number_of_days: number_of_days)
9
10
  Dionysus::Producer::Genesis::Streamer
10
11
  .new(job_class: streamer_job.constantize)
11
- .stream(topic, model_klass.constantize, from, to, number_of_days: number_of_days)
12
+ .stream(topic, model_klass.constantize, from, to, final_options)
12
13
  end
13
14
  end
@@ -26,14 +26,31 @@ class Dionysus::Producer::Genesis::Streamer
26
26
  delegate :soft_delete_column, to: :config
27
27
 
28
28
  def fetch_resources(resource_class, from, to, options_hash)
29
- records = resource_class
30
- records = resource_class.where("updated_at BETWEEN ? AND ?", from, to) if from.present? && to.present?
29
+ resource_class
30
+ .then { |records| apply_time_range(records, from, to) }
31
+ .then { |records| apply_visibility(records, options_hash) }
32
+ .then { |records| apply_query_conditions(records, options_hash) }
33
+ end
34
+
35
+ def apply_time_range(records, from, to)
36
+ records = records.where("updated_at BETWEEN ? AND ?", from, to) if from.present? && to.present?
37
+ records
38
+ end
39
+
40
+ def apply_visibility(records, options_hash)
31
41
  if visible_only?(options_hash) && records.column_names.include?(soft_delete_column.to_s)
32
42
  records = records.where(soft_delete_column => nil)
33
43
  end
34
44
  records
35
45
  end
36
46
 
47
+ def apply_query_conditions(records, options_hash)
48
+ if (query_conditions = options_hash.fetch(:query_conditions, {})).any?
49
+ query_conditions.each { |attr, val| records = records.where(attr => val) }
50
+ end
51
+ records
52
+ end
53
+
37
54
  def visible_only?(options_hash)
38
55
  options_hash.fetch(:visible_only, false)
39
56
  end
@@ -32,7 +32,7 @@ class Dionysus::Producer::Genesis
32
32
  def enqueue_stream_model_for_topic(topic, model, from, to, number_of_days, streamer_job)
33
33
  Dionysus::Producer::Genesis::StreamJob
34
34
  .set(queue: sidekiq_queue)
35
- .perform_async(topic.to_s, model.to_s, from.as_json, to.as_json, number_of_days.to_i, streamer_job.to_s)
35
+ .perform_async(topic.to_s, model.to_s, from.as_json, to.as_json, number_of_days.to_i, streamer_job.to_s, {})
36
36
  end
37
37
 
38
38
  def publish_genesis_performed(model:, topic:, number_of_days:)
@@ -3,5 +3,5 @@
3
3
  module Dionysus
4
4
  module Version
5
5
  end
6
- VERSION = "0.3.0"
6
+ VERSION = "0.4.0"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dionysus-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Galanciak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-22 00:00:00.000000000 Z
11
+ date: 2024-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord