dionysus-rb 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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