Issue #10248 has been updated by Charles Nutter.


A couple questions:

1. Which of the two cases tested is unexpected (or is it both)? The two cases are (in pseudo-spec-ese):

* If a module A has been included into class B, and then additional modules are included into A, calls to B *will not* see them without a re-include of A.
* If a module A has been inlcluded into class B, and then methods are modified in A, calls to B *will* see them without a re-include of A.

Ignore the mentions of "flushing" in the spec...the above behavior is what it really tests.

It works this way because at include time, a *reference* to the module is inserted into the target hierarchy, and *only* its method table gets searched; other modules that the first module includes are themselves *included* into the hierarchy.

Included modules are only searched for methods and constants they directly define. The module's method and constant tables are virtually proxied into the target hierarchy, but the module's superclasses are only included at include time.

I don't know why this is the case.

----------------------------------------
Bug #10248: Possible missing test or bug for Module#include and Module#prepend
https://bugs.ruby-lang.org/issues/10248#change-48933

* Author: Timur Duehr
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: next minor
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin12.0]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I've been implementing Module#prepend for JRuby. I ran into this test https://github.com/jruby/jruby/blob/master/test/jruby/test_method_cache.rb#L19

This was unexpected behavior for me. I've looked through both the MRI and rubyspec test cases and don't see a similar test.

If this behavior is intended, this test should be included in the suite. Currently, MRI passes this test for both include and prepend. When implementing include or prepend without referencing the MRI source code directly, the implementation won't necessarily pass this test.



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