I've been trying to tinker with a global Cache module, but I can't figure out why this isn't working.
Does anyone have any suggestions?
This is the error:
NameError: undefined method `get' for module `Cache'
from (irb):21:in `alias_method'
... generated by this code:
module Cache
def self.get
puts "original"
end
end
module Cache
def self.get_modified
puts "New get"
end
end
def peek_a_boo
Cache.module_eval do
# make :get_not_modified
alias_method :get_not_modified, :get
alias_method :get, :get_modified
end
Cache.get
Cache.module_eval do
alias_method :get, :get_not_modified
end
end
# test first round
peek_a_boo
# test second round
peek_a_boo
The calls to
alias_method
will attempt to operate on instance methods. There is no instance method namedget
in yourCache
module, so it fails.Because you want to alias class methods (methods on the metaclass of
Cache
), you would have to do something like: