¿Por qué incluir este módulo no anula un método generado dinámicamente?
Estoy tratando de anular un método generado dinámicamente al incluir un módulo.
En el siguiente ejemplo, una asociación Ripple agrega unrows=
Método de la tabla. Quiero llamar a ese método, pero también hacer algunas cosas adicionales después.
Creé un módulo para anular el método, pensando que el módulorow=
podría llamarsuper
para usar el método existente.
class Table
# Ripple association - creates rows= method
many :rows, :class_name => Table::Row
# Hacky first attempt to use the dynamically-created
# method and also do additional stuff - I would actually
# move this code elsewhere if it worked
module RowNormalizer
def rows=(*args)
rows = super
rows.map!(&:normalize_prior_year)
end
end
include RowNormalizer
end
Sin embargo, mi nuevorows=
nunca se llama, como lo demuestra el hecho de que si levanto una excepción dentro de él, no pasa nada.
Sé que el módulo se está incluyendo, porque si pongo esto en él, mi excepción aumenta.
included do
raise 'I got included, woo!'
end
Además, si en lugar derows=
, el módulo definesomethingelse=
, ese método es invocable.
¿Por qué mi método de módulo no anula el generado dinámicamente?