Joseph Jones liked your message with Boxer.


On December 6, 2015 at 14:40:14 MST, alxtskrnk@gmail.com wrote:
Issue #11779 has been reported by bug hit.

----------------------------------------
Bug #11779: Mudule#using does not make sense as a method
https://bugs.ruby-lang.org/issues/11779

* Author: bug hit
* Status: Open
* Priority: Normal
* Assignee:
* ruby -v: 2.2.3
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
1. it can't be called from another method
2. the receiver must be self
3. since refinements are lexically scoped the self receiver must match the currently open class

#3 is particularly curious

```ruby
module Refinement
refine String do
def refined?
true
end
end
end

module Foo
def self.refined?
''.refined? rescue false
end
end


module Bar
def self.refined?
''.refined? rescue false
end
Foo.module_eval do
using Refinement

end
end

p Foo.refined? #false
```

The module_eval `#using` call does not raise (it's not from a method and the receiver is self), but evidently because currently open class does not match self, it does not do anything. So it should at least raise.

So `#using`, though a method, does not function as a method, which is misleading.



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