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