Module: CustomActiveRecordObserver

Defined in:
lib/custom_active_record_observer/dsl.rb,
lib/custom_active_record_observer.rb,
lib/custom_active_record_observer/engine.rb,
lib/custom_active_record_observer/schema.rb,
lib/custom_active_record_observer/handler.rb,
lib/custom_active_record_observer/not_nil.rb,
lib/custom_active_record_observer/version.rb,
lib/custom_active_record_observer/observable.rb,
lib/custom_active_record_observer/changes_tracker.rb,
lib/custom_active_record_observer/models_extender.rb,
lib/custom_active_record_observer/observable/base.rb,
lib/custom_active_record_observer/rules/base_rule.rb,
lib/custom_active_record_observer/rules/create_rule.rb,
lib/custom_active_record_observer/rules/update_rule.rb,
lib/custom_active_record_observer/rules/destroy_rule.rb,
lib/custom_active_record_observer/observable/paranoid.rb

Defined Under Namespace

Modules: ChangesTracker, Handler, ModelsExtender, NotNil, Observable, Rules Classes: DSL, Engine, Schema

Constant Summary collapse

VERSION =
'0.5.1'.freeze
@@schema =
Schema.new

Class Method Summary collapse

Class Method Details

.observe(*class_names, handler: proc {}, &block) ⇒ Object

Examples:

Usage without handler

CustomActiveRecordObserver.observe 'User' do
  on_create do |user|
    Rails.application.config.event_store.publish_event(
      UserRegisteredEvent.strict(data: { user_id: user.id }),
      stream_name: "users-#{user.id}"
    )
  end

  on_destroy do |user|
    Rails.application.config.event_store.publish_event(
      UserTerminatedEvent.strict(data: { user_id: user.id }),
      stream_name: "users-#{user.id}"
    )
  end
end

Usage with handler

handler = ->(event) {
  Rails.application.config.event_store.publish_event(
    event,
    stream_name: "users-#{event.data[:user_id]}"
  )
}
CustomActiveRecordObserver.observe 'User', handler: handler do
  on_create do |user|
    UserRegisteredEvent.strict(data: { user_id: user.id })
  end

  on_destroy do |user|
    UserTerminatedEvent.strict(data: { user_id: user.id })
  end
end

Parameters:

  • class_names (Symbols)
    • list of class names

    may be an object of Class, Symbol, or String (e.g. :User, ‘User’ or User)



45
46
47
48
49
50
51
# File 'lib/custom_active_record_observer.rb', line 45

def self.observe(*class_names, handler: proc {}, &block)
  class_names.each do |class_name|
    DSL.new(block).actions_and_rules.each do |(action, rule)|
      schema.add_rule(class_name, action, rule, handler)
    end
  end
end