Ruby Language Safe Monkey Patching avec Refinements


Exemple

Depuis Ruby 2.0, Ruby permet d'avoir des patchs Monkey plus sûrs avec des améliorations. Fondamentalement, il permet de limiter le code Monkey Patched à s’appliquer uniquement lorsque cela est demandé.

Nous commençons par créer un raffinement dans un module:

module RefiningString
  refine String do
    def reverse
      "Hell riders"
    end
  end
end

Ensuite, nous pouvons décider où l'utiliser:

class AClassWithoutMP   
  def initialize(str)
    @str = str
  end
   
  def reverse
    @str.reverse
  end
end

class AClassWithMP
  using RefiningString

  def initialize(str)
    @str = str
  end
   
  def reverse
    str.reverse
  end
end

AClassWithoutMP.new("hello".reverse # => "olle"
AClassWithMP.new("hello").reverse # "Hell riders"