Receptes en Ruby: extendre metodes sense perdre el codi d’origen

Imaginem que volem extendre un metode de la classe Adjunt.

# fitxer_original.rb

class Adjunt
  def metode_a_extendre
    puts "Codi original"
  end
end

Si provem de rescriure el metode, el codi antic es perd, però el que ens interessa és executar-lo juntament amb el codi de la nostra extensió.

Volem aconseguir que literalment faci el següent:

class Adjunt
  def method_to_extend
    puts "Codi original"
    puts "Codi de la meva extesnió!"
  end
end

El problema és que el codi original forma part d’una llibreria i el que volem és extendre la llibreria sense tocar-ne el codi.

La millor manera que he trobat és fent un alias_method que mantingui el codi origen i reescriure el metode afegint el nostre codi al final

# fitxer_extensio.rb

require 'fitxer_original'
class Adjunt
  alias_method :metode_a_extendre_original, :metode_a_extendre
  def metode_a_extendre
    metode_a_extendre_original
    puts "Codi de la meva extesnió!"
  end
end