Module#refine and Module#using behaved unexpectedly
The issue happened when I tried to run the code below:
# Main.rb class A end class B end module M1 refine A do def foo *args puts "foo" end end end using M1 module M2 def self.enable_foo refine B do def call_foo *args A.new.foo *args end end end end M2.enable_foo using M2 B.new.call_foo
I expected it to output
foo, but I got this:
Traceback (most recent call last): 1: from Main.rb:28:in `<main>' Main.rb:20:in `call_foo': undefined method `foo' for #<A:0x000000000719f3a0> (NoMethodError) Did you mean? for
I tried to put
using M1 in M2 and its singleton class, but the same error was raised.
Maybe it is a Ruby bug. If it is not, I hope to get a workaround when I encounter similiar situations.