Ruby Metaprogramming - Subclass a Method with Before/After Callbacks and alias_method
require 'rubygems'
require 'active_model'
class BaseModel
extend ActiveModel::Callbacks
define_model_callbacks :save
before_save { puts "[save:before]"}
after_save { puts "[save:after]"}
def do_save; end
def save
_run_save_callbacks do
do_save
end
end
alias_method :superclass_save, :save
end
class SomeModel < BaseModel
def save
puts "[saving...]"
true
end
end
SomeModel.class_eval do
alias_method :subclass_save, :save
alias_method :do_save, :subclass_save
alias_method :save, :superclass_save
end
model = SomeModel.new
model.save
Comments
blog comments powered by Disqus