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

Responder a