Home - equivalent/simple_listener GitHub Wiki
example 1: Rails
app/models/concerns/generic_listener_concern.rb
module GenericListenerConcern
extend ActiveSupport::Concern
included do
around_save :notify_listeners
end
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/membership.rb
class Membership < ActiveRecord::Base
include SimpleListener
include GenericListenerConcern
end
# app/listeners/last_moderator_listener.rb
class LastModeratorListener
def initialize(current_user)
@current_user
end
def on_update(record)
record.moderator = @current_user
record.save
end
end
# app/controllers/memberships_controller.rb
class MembershipsController < ApplicationController
# ...
def update
@membership = Membership.find(:id)
@membership.add_listener(LastModeratorListener.new(current_user))
@membership.update(params[:user])
# ...
end
end