Módulos parte IV – Callbacks

by Gastón Ramos

Callbacks y hooks

Para continuar, vamos a ver el tema “callbacks” relacionado con los módulos, los callbacks y los hooks son una técnica de metaprogramación bastante común. Estos métodos son invocados cada vez que ocurre un evento particular durante la ejecución del programa, por ejemplo:

  • Un método inexistente es llamado en un objeto
  • Una clase es “mixineada” en un módulo
  • El “subclaseado” de una clase
  • Un método de instancia es agregado a una clase

Atrapando las operaciones de include con Module#included

Cuando un módulo es incluido (Mixed in) dentro de una clase, si se define un método llamado included para ese módulo, entonces este método se ejecuta. El método recibe el nombre de la clase como argumento.

module A
  def self.included(clase)
    puts "He sido incluido en #{clase}."
  end
end

class B
  include A
end

salida:

=> He sido incluido en la clase B.

Usando el callback included para agregar métodos de clase

Podemos atrapar la operación de include para agregar métodos de clase a la clase que estamos incluyendo el módulo:

module A
  def self.included(clase)
    def clase.metodo_de_clase
      puts "Agrego un metodo de clase."
    end
  end

  def metodo_de_instancia
    puts "Agrego un metodo de instancia."
  end

end

class B
  include A
end
b = B.new
b.metodo_de_instancia
B.metodo_de_clase

salida:

=> Agrego un metodo de instancia.
=> Agrego un metodo de clase

Bueno como vemos Module#included es una manera muy útil para agregar cosas a las clases/módulos de nuestros programas.
Esto fue todo, hasta el próximo post.