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
Supose you want to extend the method of a class called Attachment.
# original_file.rb
class Attachment
def method_to_extend
puts "The original code"
end
end
If we try to rewrite the method, older code gets lost, but instead we want it to be executed with our code extension
We want to achieve something like the following:
class Attachment
def method_to_extend
puts "The original code"
puts "My extension code!"
end
end
But the original code is part of a library we cannot change directly.
The best way I found is to write an alias_method with the original method code and rewrite the method adding the desired code
# extension_file.rb
require 'original_file'
class Attachment
alias_method :source_method_to_extend, :method_to_extend
def method_to_extend
source_method_to_extend
puts "My extension code!"
end
end
Doncs és molt senzill però poc intuitiu.
Principalment has de fer com si cerquessis a google amb el requadre del costat de la barra d’adreces.

Escrius la paraula a cercar i et mostrarà les ocurrències dins la pàgina.

Tires cap avall i la última opció és cercar dins la pàgina.

Salta cap a les diferents ocurrències del text.