variável de classe demeter_names está para o modulo Demeter e não para o object injetado
tinogomes opened this issue · comments
Conforme cada modelo/objeto vai injetando o demeter, a variável demeter_names está sendo armazenada no escopo do model Demeter, vazando as informações entre os objetos.
Ex:
class User < ActiveRecord::Base
has_one :profile, :dependent => :destroy
has_one :avatar, :dependent => :destroy
demeter :profile, :avatar
end
class Avatar < ActiveRecord::Base
belongs_to :user
end
class Profile < ActiveRecord::Base
belongs_to :user
demeter :user
end
User.demeter_names # returns [:profile, :avatar]
Profile.demeter_names # returns [:profile, :avatar, :user]
User.demeter_names#return [:profile, :avatar, :user]
PT: A correção do bug está http://github.com/tinogomes/demeter e já mandei o PULL REQUEST.
EN: Fixed bug on http://github.com/tinogomes/demeter and I already sent PULL REQUEST
Não acho que devamos usar os métodos read_inheritable_attribute e write_inheritable_attribute, já que eles são injetados pelo Rails. O problema está em injetar o módulo Demeter diretamente em ActiveRecord::Base. Talvez o extend Demeter devesse ser feito somente quando a classe fosse herdada.
Faz sentido?
Não testei, mas deve ser algo como isto: http://pastie.org/844636
Na verdade o problema foi no major refactor, pq antes, na versão 1.0.4, eu tinha um array por classe então jamais aconteceria esse problema. Depois desse Major refactor isso passou batido. A issue 2 que está aberta tb não acontecia antes do major refactor. Eu dei bobeira e não verifiquei direito antes de fazer a integração do outro pull request. Peço desculpas. Vou ver se tiro um tempo amanhã para arrumar a casa. Abs
Tino, eu preferi integrar o pull request do Nando pq eu iria fazer a mesma coisa, que é manter um array por classe, que era o que a versão 1.0.4 fazia (eu acho assim melhor). Ficou tudo blz. []s
Estando resolvido, sem problemas...
Valeu, então fechamos essa issue aqui !!! []s