Rails Concern Example - equivalent/simple_listener GitHub Wiki

# Gemfile
# ...
gem 'simple_listener'
# app/models/concerns/generic_listener_concern
module GenericListenerConcern
  extend ActiveSupport::Concern

  included do
    around_save :notify_listeners
  end

  # generic implementation of simple linstener in active record
  def notify_listeners
    is_create_save   = !persisted?

    if is_create_save
      call_listeners(:before_create)
    else
      call_listeners(:before_update)
    end

    yield

    if is_create_save
      call_listeners(:on_create)
    else
      call_listeners(:on_update)
    end
  end
end
# app/models/user.rb
class User < ActiveRecord::Base
  include SimpleListener
  include GenericListenerConcern
end