class ReactiveObservers::Observable::Notification
Public Class Methods
new(observed_object, observers, action, options)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 8 def initialize(observed_object, observers, action, options) @observed_object = observed_object @observers = observers @action = action @options = options end
Public Instance Methods
perform()
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 15 def perform filter_observers.each do |observer| process observer, @observed_object if @action == :update && observer.trigger_with_previous_values process observer, @observed_object.clone.assign_attributes(@options[:diff]) end end end
Private Instance Methods
build_proc_for(variable, object)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 71 def build_proc_for(variable, object) return variable unless variable.is_a? Symbol object.method variable end
filter_observers()
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 26 def filter_observers @filtered_observers ||= Filtering.new(@observed_object.id, @observers, @action, @options).perform end
observer_objects_for(observer, record)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 58 def observer_objects_for(observer, record) return observer_objects_from_klass observer, record if observer.klass_observer? return build_proc_for(observer.notify, observer.observer).call(observer.observer, record) if observer.notify.present? observer.observer end
observer_objects_from_klass(observer, record)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 65 def observer_objects_from_klass(observer, record) return build_proc_for(observer.notify, observer.observer).call(record) if observer.notify.present? observer.observer.new end
observer_simplification?(observer, record, observer_object)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 77 def observer_simplification?(observer, record, observer_object) (observer_object == record) || (observer.klass_observer? && observer_object.is_a?(record.class)) end
process(observer, observed_object)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 30 def process(observer, observed_object) return if observer.only.present? && !observer.only.call(observed_object) trigger_actions_for observer, Array.wrap(refine_observer_records_for(observer, observed_object)) end
refine_observer_records_for(observer, observed_object)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 52 def refine_observer_records_for(observer, observed_object) return observed_object if observer.refine.blank? observer.refine.call observed_object end
trigger_actions_for(observer, records)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 36 def trigger_actions_for(observer, records) records.each do |record| Array.wrap(observer_objects_for(observer, record)).each do |observer_object| observer_object = observer_simplification?(observer, observer_object, record) ? record : observer_object trigger_observer_action_for observer, observer_object, record end end end
trigger_observer_action_for(observer, observer_object, record)
click to toggle source
# File lib/reactive_observers/observable/notification.rb, line 45 def trigger_observer_action_for(observer, observer_object, record) trigger = build_proc_for observer.trigger, observer_object return trigger.call observer.to_h if observer_object == record trigger.call record, observer.to_h end