Issue #7836 has been updated by prijutme4ty (Ilya Vorontsov).


Also it should be mentioned that there is no way to get Method for super call. So one cannot know, for example, number of argments of method down the ancestry chain. For prepending methods there is a workaround - to save link on prepend_features. Or to maintain full hierarchy of methods, but it looks akward.
E.g. I needed such method when created #coerce(other,meth) prepending either usual #coerce(other) method or already defined #coerce(other,meth). It's hard to know whether prepended module should call super with one or two arguments.
----------------------------------------
Feature #7836: Need a way to get Method and UnboundMethod objects to methods overridden by prepended modules
https://bugs.ruby-lang.org/issues/7836#change-37404

Author: banister (john mair)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: current: 2.1.0


=begin
See the following code:

  module P
    def hello
      puts "from P"
      super
    end
  end

  class A
    def hello
      puts 'from A'
    end

    prepend P
  end

  A.instance_method(:hello).source_location == P.instance_method(:hello).source_location  #=> true

== Discussion

Since (({A.instance_method(:hello)})) effectively returns (({P.instance_method(:hello)})) it is impossible to get an (({UnboundMethod})) object to the original (({A#hello})) method.

Tools like ((<[Pry]|URL:http://pryrepl.org>)) need to access (({UnboundMethod})) objects to every active method in the system for debugging purposes.

== Possible solution

Simply allow (({instance_method()})) to take a second boolean parameter, indicating whether methods injected by prepended modules are to be included, it would default to true:

example:

  A.instance_method(:hello) #=> same as P#hello
  A.instance_method(:hello, false) #=> return strictly A#hello

=end



-- 
http://bugs.ruby-lang.org/