From: "matz (Yukihiro Matsumoto)" Date: 2021-12-09T07:15:33+00:00 Subject: [ruby-core:106572] [Ruby master Feature#14332] Module.used_refinements to list refinement modules Issue #14332 has been updated by matz (Yukihiro Matsumoto). It's too late for 3.1. But after the release, I basically honor @shugo's decision here. Matz. ---------------------------------------- Feature #14332: Module.used_refinements to list refinement modules https://bugs.ruby-lang.org/issues/14332#change-95234 * Author: Eregon (Benoit Daloze) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- Module.used_modules was added in #7418. But I think `Module.used_refinements` is more useful or at least complementary. Refinements were implemented in TruffleRuby, and I found Module.used_refinements so useful that I left it there. Instead of listing namespace modules (arguments to #using), it lists the refinement modules: ~~~ ruby module Json refine Integer do def to_json to_s end end refine String do def to_json inspect end end end module Fact refine Integer do def fact self <= 1 ? 1 : self * (self-1).fact end end end using Json p Module.used_modules # => [Json] p Module.used_refinements # => [#, #] using Fact p Module.used_modules # => [Json, Fact] p Module.used_refinements # => [#, #, #] ~~~ This shows which classes are refined and by which refinement namespace. It also shows if a class has multiple active refinements in the scope. And, last but not least, the name of the method contains "refinements". I find `used_modules` hard to remember and it doesn't sound related to refinements from the name (while looking at the Module's methods). -- https://bugs.ruby-lang.org/ Unsubscribe: