From: shugo@... Date: 2016-07-08T07:22:17+00:00 Subject: [ruby-core:76315] [Ruby trunk Feature#12533][Assigned] Refinements: allow modules inclusion, in which the module can call internal methods which it defines. Issue #12533 has been updated by Shugo Maeda. Status changed from Open to Assigned Assignee set to Yukihiro Matsumoto Matz, what do you think of this? Local rebinding may be worth considering, but there is a trade-off. ---------------------------------------- Feature #12533: Refinements: allow modules inclusion, in which the module can call internal methods which it defines. https://bugs.ruby-lang.org/issues/12533#change-59551 * Author: Tiago Cardoso * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto ---------------------------------------- Right now this isn't possible: ~~~ruby module Extensions def vegetables ; potatoe ; end def potatoe ; "potatoe" ; end end module Refinary refine String do # this doesn't work include Extensions # this would work... # def vegetables ; potatoe ; end # def potatoe ; "potatoe" ; end end end using Refinary puts "tomatoe".vegetables #=> in
': undefined method 'vegetables' for "tomatoe":String ~~~ Wrongly reported as a bug [here](https://bugs.ruby-lang.org/issues/12514). According to Shugo Maeda, this was expected behaviour. I argued that this is the way most monkey-patches work, and if Refinements can't cover the use case of inserting a custom DSL which references itself in the classes it refines, it can't fully replace monkey-patches, which I read was the main reason Refinements have been added to the language. -- https://bugs.ruby-lang.org/ Unsubscribe: