From: daniel@...42.com Date: 2020-09-06T01:59:35+00:00 Subject: [ruby-core:99950] [Ruby master Feature#17156] Refinements per directory tree Issue #17156 has been reported by Dan0042 (Daniel DeLorme). ---------------------------------------- Feature #17156: Refinements per directory tree https://bugs.ruby-lang.org/issues/17156 * Author: Dan0042 (Daniel DeLorme) * Status: Open * Priority: Normal ---------------------------------------- One of the main use-case for refinements is to enable extensions to core classes for a given codebase (app or gem) without impacting the other codebases. Let's call it sandboxed monkey-patching. Note that you usually want this for an entire codebase, not specific files. But refinements can only be enabled on a per-module or per-file basis. So if you want refinements in your entire project, you need to add the "using" boilerplate to every single file. I find this too bothersome. I have some core extensions that I would love to convert into refinements, but adding a "using" statement to every file is too much of a pain; I find it not worth the trouble, especially considering that the risk of conflicts due to monkey-patching is very low to start with. So I would like the ability to enable refinements for all the files in a project, that is, on a whole directory tree. I'd like to keep it simple. So my idea is to have something like `using M, subdirs: true` that would be equivalent to `using M` at the top of every file loaded _after that point_ within the directory tree of the file with the `using` statement. So the typical case would be, for gem "foobar" which is loaded via `require "foobar"`, you'd put the `using` statement at the top of the gem's main `foobar.rb` file, and then every file loaded within the gem's directory would benefit from those refinements. Similarly, if you want to use certain refinements throughout your app, put them in a file in the root dir of the app and load it early in the initialization process. Note: With this design I wanted to avoid the possibility that someone could apply refinements globally by writing `using M, subdirs: "/"` -- https://bugs.ruby-lang.org/ Unsubscribe: