I want to refine a methoded located in a class inside a module, but despite the fact of trying to refine the class, I cannot have the refined code to run:
module App
module Entities
class User
def self.name(name)
puts "Original name: #{name}"
end
end
end
end
module RefinedUser
refine App::Entities::User do
def self.name(name)
puts "Refined name: #{name}"
end
end
end
class Runner
def original
App::Entities::User.name('Forest')
end
using RefinedUser
def refined
App::Entities::User.name('Forest')
end
end
r = Runner.new
r.original
r.refined
Output:
Original name: Forest
Original name: Forest
You need to refine App::Entities::User with his
singleton_class
. Becausename
is a class method.