Google+ Tools
Make Google+ profile picture
Make Google plus banners for profile
Create and share your Google Plus profile banners.

Profile image for mrk studios viatropos on August 15, 2010
Language
Ruby
Tags

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