Feature #16703

Updated by sawa (Tsuyoshi Sawada) over 1 year ago

I often see code that intends to remove a portion of the namespace from a module/class name like this: 

 class A; class B class C; end end end"A::") # => "B::C""A::B::") # => "C" 

 I think a large portion of the use cases of the method `String#delete_prefix` belongs to such use cases. 

 I propose to let `Module#name` take an optional parameter that expresses the name space. The parameter should be either a module, string, or a symbol. 

 I am not sure whether a positional argument or a keyword argument is better. 

 Positional argument: 

 ```ruby"A") # => "B::C" # => "B::C" # => "B::C""A::B") # => "C""A::B") # => "C" # => "C" 

 Keyword argument: 

 ```ruby "A") # => "B::C" :A) # => "B::C" A) # => "B::C" "A::B") # => "C" :"A::B") # => "C" A::B) # => "C" 

 If the module/class does not belong to the namespace given as the parameter, then perhaps it would be a good idea to prepend the name with `::`. 

 class A; class B; class D end end end 
 class E end # => "A::B::C" # => "::A::B::C" # => "::A::B::C"