Module: CustomActiveRecordObserver::Handler

Defined in:
lib/custom_active_record_observer/handler.rb

Class Method Summary collapse

Class Method Details

.call(target, action, _changes, schema: CustomActiveRecordObserver.schema) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/custom_active_record_observer/handler.rb', line 3

def self.call(target, action, _changes, schema: CustomActiveRecordObserver.schema)
  # Some AR libraries reload AR object in the callbacks.
  # Hence, ActiveModel::Dirty model changes hash becomes empty.
  # @_active_record_observer_changes is needed to that changes not be missed
  changes =
    (target.instance_variable_get(:@_active_record_observer_changes) || {}).merge(_changes)

  ActiveRecord::Base.transaction do
    schema.
      get_rules(target.class.name, action, changes).
      each { |rule, handler| handler.(rule.(target)) }
  end
end