class ReactiveObservers::Observable::Filtering
Public Class Methods
new(observed_object_id, observers, action, options)
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 6 def initialize(observed_object_id, observers, action, options) @observed_object_id = observed_object_id @observers = observers @action = action @options = options end
Public Instance Methods
perform()
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 13 def perform @observers.select do |observer| filter_action(observer) && filter_record_constrains(observer) && filter_fields(observer) end end
Private Instance Methods
changed_fields()
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 35 def changed_fields @changed_fields ||= @options[:diff].keys.map &:to_sym end
filter_action(observer)
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 21 def filter_action(observer) observer.on.blank? || observer.on.include?(@action) end
filter_fields(observer)
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 29 def filter_fields(observer) return true unless @action == :update && @options[:diff].present? observer.fields.blank? || (observer.fields & changed_fields).length.positive? end
filter_record_constrains(observer)
click to toggle source
# File lib/reactive_observers/observable/filtering.rb, line 25 def filter_record_constrains(observer) observer.constrain.blank? || observer.constrain.include?(@observed_object_id) end