Ruby Language Modules à double usage (améliorations ou correctifs globaux)


Exemple

Il est recommandé de définir les correctifs à l'aide de Refinements, mais il est parfois utile de les charger globalement (par exemple, en développement ou en test).

Supposons, par exemple, que vous souhaitiez démarrer une console, que vous ayez besoin de votre bibliothèque et que vous ayez les méthodes corrigées disponibles dans la portée globale. Vous ne pouvez pas le faire avec des améliorations car l' using doit être appelée dans une définition de classe / module. Mais il est possible d’écrire le code de manière à ce qu’il ait un double objectif:

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