Por que a inclusão deste módulo não substitui um método gerado dinamicamente?
Estou tentando substituir um método gerado dinamicamente incluindo um módulo.
No exemplo abaixo, uma associação Ripple adiciona umrows=
método para tabela. Eu quero chamar esse método, mas também fazer algumas coisas adicionais depois.
Criei um módulo para substituir o método, pensando que o módulo estárow=
seria capaz de ligarsuper
para usar o 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
No entanto, meu novorows=
nunca é chamado, como evidenciado pelo fato de que, se eu criar uma exceção dentro dela, nada acontece.
Eu sei que o módulo está sendo incluído, porque se eu colocar isso nele, minha exceção será levantada.
included do
raise 'I got included, woo!'
end
Além disso, se em vez derows=
, o módulo definesomethingelse=
, esse método pode ser chamado.
Por que o método do meu módulo não está substituindo o método gerado dinamicamente?