Feature #8571
closedRefinement inheritance by Module#include
Description
Currently, refinements are not inherited by Module#include.
How about to make using to activate refinements in the ancestors of the specified module?
For example,
module A
refine X do ... end
refine Y do ... end
end
module B
refine Z do ... end
end
module C
include A
include B
end
using C
Refinements in A and B are activated here.¶
In this code,
using C
is equivalent to
C.ancestors.reverse_each { |m| using m }
This feature enables you to distribute refinements into different modules, and then package the refinements into one module.
Please note that Module#include does't activate refinements in the argument module.
For example,
module C
include A
include B
# Refinements in A and B are not activated here.
end
I've implemented this feature, and have attached the patch.
        
           Updated by matz (Yukihiro Matsumoto) over 12 years ago
          Updated by matz (Yukihiro Matsumoto) over 12 years ago
          
          
        
        
      
      - Assignee changed from matz (Yukihiro Matsumoto) to shugo (Shugo Maeda)
Agreed. It also conforms the original design.
Matz.
        
           Updated by shugo (Shugo Maeda) over 12 years ago
          Updated by shugo (Shugo Maeda) over 12 years ago
          
          
        
        
      
      - Status changed from Assigned to Closed
matz (Yukihiro Matsumoto) wrote:
Agreed. It also conforms the original design.
I've committed in r41719. Thanks.
        
           Updated by hsbt (Hiroshi SHIBATA) almost 4 years ago
          Updated by hsbt (Hiroshi SHIBATA) almost 4 years ago
          
          
        
        
      
      - Project changed from 14 to Ruby