It's a good practice to scope patches using Refinements, but sometimes it's nice to load it globally (for example in development, or testing).
Say for example you want to start a console, require your library, and then have the patched methods available in the global scope. You couldn't do this with refinements because using
needs to be called in a class/module definition. But it's possible to write the code in such a way that it's dual purpose:
module Patch
def patched?; true; end
refine String do
include Patch
end
end
# globally
String.include Patch
"".patched? # => true
# refinement
class LoadPatch
using Patch
"".patched? # => true
end