From: nagachika00@... Date: 2017-07-23T07:02:37+00:00 Subject: [ruby-core:82125] [Ruby trunk Bug#13656] Method#super_method returns incorrect result dependent on unrelated module Issue #13656 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: DONE ruby_2_4 r59395 merged revision(s) 59080,59082. ---------------------------------------- Bug #13656: Method#super_method returns incorrect result dependent on unrelated module https://bugs.ruby-lang.org/issues/13656#change-65882 * Author: ccutrer (Cody Cutrer) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: REQUIRED, 2.3: DONE, 2.4: DONE ---------------------------------------- ~~~ruby module Calculations def pluck puts "calculations" end end module Calculations2 def pluck puts "calculations2" super end end class Relation include Calculations end Relation.prepend(Calculations2) class CollectionProxy < Relation def pluck puts "collection_proxy" super end end module CollectionProxy2 def unrelated end end # this is the critical line CollectionProxy.prepend(CollectionProxy2) ConcreteProxy = Class.new(CollectionProxy) # these are the expected results ConcreteProxy.new.method(:pluck).owner == CollectionProxy ConcreteProxy.new.method(:pluck).super_method.owner == Calculations2 ConcreteProxy.new.method(:pluck).super_method.super_method.owner == Calculations ~~~ The critical line is the `CollectionProxy2` module. If I don't prepend it into `CollectionProxy` (or if I include it instead of prepend it), the expected results pass. But when it *is* prepended, the owner for all `super_method`s will always be `CollectionProxy`, as if it can't find any more ancestors (if you actually call `ConcreteProxy.new.pluck` it does call the three methods, in the correct order). So this is an introspection only problem. -- https://bugs.ruby-lang.org/ Unsubscribe: