Class: SyncMachine::FindSubjectsWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Worker
Defined in:
lib/sync_machine/find_subjects_worker.rb

Overview

After one observed model has changed, find all relevant subjects whose documents may have changed. Enqueues one EnsurePublicationWorker job for each relevant subject.

Defined Under Namespace

Classes: Hook

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.inherited(subclass) ⇒ Object



18
19
20
# File 'lib/sync_machine/find_subjects_worker.rb', line 18

def self.inherited(subclass)
  subclass.hooks = {}
end

.method_missing(meth, *args, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/sync_machine/find_subjects_worker.rb', line 22

def self.method_missing(meth, *args, &block)
  if meth.to_s == "subject_ids_from_#{parent.subject_sym}"
    block ||= ->(subject) { [subject.id.to_s] }
    add_hook(meth, block)
  elsif meth.to_s =~ /^subject_ids_from_.*/
    add_hook(meth, block)
  else
    super
  end
end

.perform_async_for_record(record) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/sync_machine/find_subjects_worker.rb', line 33

def self.perform_async_for_record(record)
  sync_module = SyncMachine.sync_module(self)
  orm_adapter = sync_module.orm_adapter
  record_id_for_job = orm_adapter.record_id_for_job(record.id)
  changed_keys = orm_adapter.change_listener_changed_keys(record)
  perform_async(
    record.class.name, record_id_for_job, changed_keys, Time.now.to_json
  )
end

Instance Method Details

#perform(record_class_name, record_id, changed_keys, enqueue_time_str) ⇒ Object

:reek:LongParameterList is unavoidable here since this is a Sidekiq worker



45
46
47
48
49
50
51
52
53
# File 'lib/sync_machine/find_subjects_worker.rb', line 45

def perform(record_class_name, record_id, changed_keys, enqueue_time_str)
  record = record_class_name.constantize.find(record_id)
  source_ids = find_source_ids(record, changed_keys)
  (source_ids || []).each do |source_id|
    self.class.parent.const_get('EnsurePublicationWorker').perform_async(
      source_id, enqueue_time_str
    )
  end
end