From: daniel@...42.com Date: 2020-12-10T13:45:40+00:00 Subject: [ruby-core:101392] [Ruby master Feature#17380] Useful `include/prepend` in `refine` Issue #17380 has been updated by Dan0042 (Daniel DeLorme). It would be nice if `prepend`/`include` worked within a `refine` block, but if they don't then at least it should raise an error. In that respect I disagree with closing #17374; even if the result is "expected", the fact that including a module is effectively a no-op should be considered a bug. Silently failing to have an effect is not so good. ---------------------------------------- Feature #17380: Useful `include/prepend` in `refine` https://bugs.ruby-lang.org/issues/17380#change-89151 * Author: marcandre (Marc-Andre Lafortune) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- Currently, `prepend/include` within a `refine` block leads to a method not being to see itself, or others defined in the same module: ```ruby module Code def recurse(value = nil) return value if value recurse(42) # => NoMethodError!!! end end module Extension refine Object do include Code end end using Extension :x.recurse(:y) # => :y (ok) :x.recurse # => NoMethodError, was hoping for 42 ``` I find this unintuitive and not useful. The conclusion of the current situation from @shugo and others is ["I don't recommend module inclusion to define refined methods"](https://bugs.ruby-lang.org/issues/17374#note-9) Could we change this situation so it can be recommended to use it? What I believe would be more useful and is what I expected was that `include/prepend` within a `Module` would bring in the current methods in the Module, with the current refinements activated. One use-case in particular is to publish libraries where one can give the option to the user to either: - call `using GreatExtension` in each and every file that need it - or `MyClass.prepend GreatExtension` once. While [Jeremy Evans found a way to do it](https://bugs.ruby-lang.org/issues/17374#note-8), it remains challenging and unnatural. -- https://bugs.ruby-lang.org/ Unsubscribe: