2009/10/2 Martin Aceto <[email protected]>:
> Hola, como estan
>
> estoy tratando de extender activerecord para poder sacar de un modelo logica
> que no pertenece a ese modelo sino que engloba varios modelos, logica de
> negocio bastante complicada que desearia separar.
>
> Me encuentro con la pregunta de cual es la forma correcta de hacerlo ?
>
> Lo que pense fue crear un archivo en /lib y dentro definir esos metodos que
> necesito, este ejemplo de abajo es correcto ? o estoy equivocado en mi
> concepto ?
>
> module Test
> module ClassMethods
> def test
> puts "Test"
> end
> end
> end
>
> ActiveRecord::Base.send(:extend, Test::ClassMethods)
Esta bien. Lo que podes sacar es el send. En general, send se usa
cuando no sabes con anticipación cual es el mensaje que le vas a
mandar a un objeto (si lo estas usando para mandarle al objeto
mensajes que son privados, no lo hagas :-).
ActiveRecord::Base.extend, Test::ClassMethods
ActiveRecord::Base.class_eval do
include Test::InstanceMethods
end
Si tu lógica de negocios es muy especifica quizás quieras incluir
explícitamente en cada clase lo que corresponda y listo
class User < ActiveRecord::Base
include Test::InstanceMethods
extend Test::ClassMethods
end
Seguro alguno te va a comentar del hook "included" para cuando quieras
extender y a la vez incluir (metodos de clase/instancia)
module Test
def self.included(klass)
klass.extend Test::ClassMethods
end
module ClassMethods
def algo
end
end
end
Sirve, pero, no se... Me parece mas simple y explicito hacer el extend
a mano y listo, cualquiera que lo ve nota que estas agregando métodos
de clase o instancia. Cuanto menos magia, mejor.
>
> --
> Martin Aceto
>
>
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
>
--
--------------------------------------------------------------
EmmanuelOga.com - Software Developer
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar