Sha256: aa8e54b3c83fc8ffd99521d730bf4c237ae9b4dce0038a697a9cf37a73641893

Contents?: true

Size: 1.21 KB

Versions: 8

Compression:

Stored size: 1.21 KB

Contents

# -*- coding: utf-8 -*-
require 'tengine/event'

# activemodelなどのObserverの仕組みを使ってイベントキューにモデルの
# 登録、変更、削除を通知するための実装を提供するモジュールです。
#
# http://guides.rubyonrails.org/active_record_validations_callbacks.html#observers
# http://mongoid.org/docs/callbacks/observers.html
module Tengine::Event::ModelNotifiable
  def after_create(record)
    fire_event(:created, record)
  end

  def after_update(record)
    fire_event(:updated, record)
  end

  def after_destroy(record)
    fire_event(:destroyed, record)
  end

  private
  def fire_event(event_base, record)
    event_properties = {
      :class_name => record.class.name,
      :attributes => record.attributes
    }
    if event_base == :updated
      event_properties[:changes] = record.changes
    end
    event_sender.fire(event_type_name(event_base, record),
      :level_key => :info,
      :properties => event_properties
      )
  end

  # def event_sender
  #   raise NotImplementedError
  # end

  def event_type_name(event_base, record)
    "#{record.class.name}.#{event_base}.#{event_type_name_suffix}"
  end

  def event_type_name_suffix
    self.class.name
  end

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
tengine_event-1.2.2 lib/tengine/event/model_notifiable.rb
tengine_event-1.2.1 lib/tengine/event/model_notifiable.rb
tengine_event-1.2.0 lib/tengine/event/model_notifiable.rb
tengine_event-1.1.0 lib/tengine/event/model_notifiable.rb
tengine_event-0.4.9 lib/tengine/event/model_notifiable.rb
tengine_event-0.4.8 lib/tengine/event/model_notifiable.rb
tengine_event-0.4.7 lib/tengine/event/model_notifiable.rb
tengine_event-0.4.6 lib/tengine/event/model_notifiable.rb