alias method chain in a module
There's a number of postings that explain how to use alias_method_chain, but it wasn't clear how to use it in a module.
alias_method_chain is a neat little method that lets you cleanly override a core method in Rails. But I ran into syntax problems using it in a module. Here's the solution.
Given:
file: models/foo.rb
class Foo < ActiveRecord::Base
include FooBar
end
file: lib/foo_bar.rb
module FooBar
module ClassMethods
def find_with_bar( *args )
find_without_bar( *args )
#...or whatever
end
end
def self.included(base)
base.class_eval do
extend ClassMethods
class << self
alias_method_chain :find, :bar
end
end
end
end
The alias_method_chain will alias the original find to find_without_bar, and will alias find_with_bar to find.
The self.included method is called when the module is included in the Foo class. It extends the class methods with those defined in module ClassMethods. And then it does the alias_method_chain, on the Foo class (class << self).
Comments
>>
Happy to see you have begun posting again ... :)
>>
exactly what i need! thanks for the great post. - sandeep
Saved my bacon
Thanks for this -- it's exactly what I was looking for. :)
and for instance methods...
(leaving off the class << self ... end)
formatting lost
And for instance methods...
(Leaving off the class << self ... end)
New Comment