Class: SyncMachine::ChangeListener

Inherits:
Object
  • Object
show all
Defined in:
lib/sync_machine/change_listener.rb

Overview

Listen to changes in any model that could result in a change to the published document, and enqueue a FindSubjectsWorker job when the change occurs.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_method_matching_wisper_event(event) ⇒ Object



16
17
18
19
20
# File 'lib/sync_machine/change_listener.rb', line 16

def self.define_method_matching_wisper_event(event)
  define_method(event) do |subject|
    find_subjects_async(subject)
  end
end

.inherited(base) ⇒ Object



10
11
12
13
14
# File 'lib/sync_machine/change_listener.rb', line 10

def self.inherited(base)
  base.cattr_accessor :model_syms do
    []
  end
end

.listen_to_models(*model_syms) ⇒ Object



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

def self.listen_to_models(*model_syms)
  self.model_syms = model_syms
  model_syms.each do |model_sym|
    send(
      :alias_method,
      "update_#{model_sym}_successful".to_sym,
      :after_record_saved
    )
  end
end

.listen_to_wisper_events(*events) ⇒ Object



33
34
35
36
37
# File 'lib/sync_machine/change_listener.rb', line 33

def self.listen_to_wisper_events(*events)
  events.each do |event|
    define_method_matching_wisper_event(event)
  end
end

.subscribeObject



39
40
41
# File 'lib/sync_machine/change_listener.rb', line 39

def self.subscribe
  Wisper.subscribe(new)
end

Instance Method Details

#after_create(record) ⇒ Object



43
44
45
46
47
# File 'lib/sync_machine/change_listener.rb', line 43

def after_create(record)
  model_sym = record.class.name.underscore.to_sym
  return unless self.class.model_syms.include?(model_sym)
  after_record_saved(record)
end

#after_record_saved(record) ⇒ Object



49
50
51
52
# File 'lib/sync_machine/change_listener.rb', line 49

def after_record_saved(record)
  return unless orm_adapter.sufficient_changes_to_find_subjects?(record)
  find_subjects_async(record)
end