Ruby · Intermediário · Inglês · Informal
monkey patching
Reabrir uma classe existente, inclusive as nativas como String, para adicionar ou trocar métodos em execução. É poderoso, mas altera o comportamento para todo o programa.
Onde usar
Aparece em gems antigas e extensões como o ActiveSupport. No code review costuma ser sinal de alerta: prefira refinements, módulos ou subclasses, porque um patch global pode colidir com outras gems.
Em código
class String
def vazia_ou_branca?
strip.empty?
end
end
puts ' '.vazia_ou_branca? # => trueExemplos
That gem monkey patches String, and it broke our own method.
Essa gem faz monkey patching em String e quebrou um método nosso.
Avoid monkey patching; a refinement is safer.
Evite monkey patching; um refinement é mais seguro.
Cuidado
Não é uma extensão local: o patch vale para todos os usuários da classe, até dentro de bibliotecas de terceiros.
Sinônimos
patch em tempo de execução
Origem
De guerrilla patch, que virou monkey patch: um remendo feito às pressas, sem permissão.