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 about 9 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) about 9 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) almost 9 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