Bug #8817
closedMethod#owner on prepended classes is an instance rather than Class/Method
Description
rdoc indicates that Method#owner will return a class or module that defines a method. http://www.ruby-doc.org/core-2.0/Method.html#method-i-owner
For classes that have prepended modules, the owner is actually an instance.
Example code:
module Mod; end
class Foo
prepend Mod
def foo; 'foo'; end
end
owner = Foo.instance_method(:foo).owner
puts "Method#owner on a prepended class instance_method: #{owner.inspect}" #=> #Foo:0x007fd34dfd3ea0
puts "Class?: #{owner.is_a? Class}" #=> false
puts "Module?: #{owner.is_a? Module}" #=> false
This had the effect of breaking stubbing in rspec (https://github.com/rspec/rspec-mocks/pull/385) , though a workaround is that the expected Class/Module can be retrieved by asking for the returned object's class.
Updated by Anonymous almost 11 years ago
This appears to have been fixed by r44175.
Can it be backported (perhaps with a regression test for this specific bug)?
Updated by nobu (Nobuyoshi Nakada) almost 11 years ago
- Status changed from Open to Closed
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: REQUIRED
Thank you, I missed this ticket.
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- Backport changed from 1.9.3: DONTNEED, 2.0.0: REQUIRED to 1.9.3: DONTNEED, 2.0.0: DONE
sorry for my late response. r44175 and r44179 were already backported to ruby_2_0_0. see #7993