From: boris@... Date: 2014-02-18T05:16:10+00:00 Subject: [ruby-dev:47978] [ruby-trunk - Bug #9526] Method#owner returns wrong owner if using prepend. Issue #9526 has been updated by Boris Stitnicky. Also for me, this is the expected behavior. `MyMod` is prepended before `Blah`, and therefore `Blah.new.method( :x )` is taken from `MyMod`. As soon as you perform `module MyMod; remove_method( :x ) end`, method `x` will be again taken from `Blah`. ---------------------------------------- Bug #9526: Method#owner returns wrong owner if using prepend. https://bugs.ruby-lang.org/issues/9526#change-45227 * Author: Kaneko Yuichiro * Status: Feedback * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby-2.0.0-p353 [ x86_64 ] & ruby-2.1.0 [ x86_64 ] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- 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 ------------------- module MyMod def x(y) super(y*y) end end class Blah def x(y) y + 1 end prepend MyMod end Blah.new.method(:x).owner \# => MyMod -------------------- In this case, a class or module that defines a method is Blah. So I think Blah.new.method(:x).owner should return Blah. -- http://bugs.ruby-lang.org/