emerleite / demeter

A Simple way to apply Law of Demeter to your Ruby objects

Home Page:http://codificando.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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