Escopo de classes de plugin não funciona na prática

Rodrigo Souto rodrigo at colivre.coop.br
Wed Jul 3 22:01:40 BRT 2013


Vixe, muito estranho esse comportamento do Ruby. Aqui tem algumas
informações sobre esse problema:

https://www.ruby-forum.com/topic/1506818

O workaround sugerido funciona:

Loading development environment (Rails 2.3.5)
>> include ShoppingCartPlugin::DisplayHelper
(irb):1: warning: toplevel constant DisplayHelper referenced by ShoppingCartPlugin::DisplayHelper
Object
>> rodrigo em ravioli ~/p/noosfero /stable> ./script/console 
Loading development environment (Rails 2.3.5)
>> require 'shopping_cart_plugin/display_helper'
[]
>> include ShoppingCartPlugin::DisplayHelper
incluido
Object

Enquanto isso vamos ver como solucionar isso de verdade...

Bráulio Bhavamitra escreveu isso ai:
> Vou explicar o problema em detalhe. Fiz uma reprodução simples aqui.
> 
> Vamos usar um caso prático, o shopping_cart.
> Crie o arquivo plugins/shopping_cart/lib/shopping_cart/display_helper.rb
> com o seguinte código:
> module ShoppingCartPlugin::DisplayHelper
>   def self.included base
>     puts 'incluido'
>   end
> end
> 
> Agora entre no console e rode:
> > include ShoppingCartPlugin::DisplayHelper
> (irb:5): warning: toplevel constant DisplayHelper referenced by
> ShoppingCartHelper::DisplayHelper
> >
> 
> Agora para ver a coisa funcionando mude a declaração da classe
> ShoppingCartPlugin para
> module ShoppingCart
> 
> Reabra o console e rode o mesmo código. O 'incluido' agora é imprimido!!
> 
> É um questão da linguagem ruby... Daí se entende pq ActiveRecord::Base ao
> invés de não um simples ActiveRecord. Os módulos, e não as classes, servem
> completamente para escopo...
> 
> Bom, acho um problema grave... Qualquer modulo declarado no plugin terá
> isto...
> Envolve refazer o padrão de classes dos plugins para algo parecido com o
> ActiveRecord... E é claro mudar todos os plugins atuais..
> 
> abraços,
> bráulio
> 
> 
> 2013/7/1 "Aurélio A. Heckert" <aurelio em colivre.coop.br>
> 
> >  Sério?
> >
> > Não tentei reproduzir o seu caso, mas testei outro possível conflito:
> >
> > >> Image
> > => Image(id: integer, parent_id: integer, content_type: string, ...,
> > thumbnails_processed: boolean)
> > >> FilePresenter::Image
> > => FilePresenter::Image
> >
> > >> class FilePresenter; puts Image; end
> > FilePresenter::Image
> > => nil
> > >> puts Image
> > Image
> > => nil
> >
> > Ufa... nesse caso não ocorreu conflito.
> > *Como acontece o conflito no seu caso?*
> >
> >
> >
> > On 01-07-2013 11:50, Bráulio Bhavamitra wrote:
> >
> > Olá comunidade,
> >
> >  Suponha que eu tenha um plugin x e que declare a classe
> > XPlugin::DisplayHelper em plugins/x/lib/x_plugin/display_helper.rb
> >
> >  Esta classe vai conflitar com a definida em
> > app/helpers/display_helper.rb!!
> >
> >  Alguém já pensou nesta questão?
> >
> >  abraços,
> > bráulio
> >
> >  --
> > "Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua
> > ideologia. Morra por sua ideologia" P.R. Sarkar
> >
> > EITA - Educação, Informação e Tecnologias para Autogestão
> > http://cirandas.net/brauliobo
> > http://eita.org.br
> >
> >
> > _______________________________________________
> > Noosfero-br mailing listNoosfero-br em listas.softwarelivre.orghttp://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
> >
> >
> >
> > --
> >
> > *Aurélio A. Heckert (aka Aurium)*
> > http://softwarelivre.org/aurium
> > *COLIVRE — Coop. de Tecnologias Livres*
> > http://colivre.coop.br
> >
> > *Inkscape* — Desenhe Livremente
> > http://inkscapeBrasil.org
> >
> > _______________________________________________
> > Noosfero-br mailing list
> > Noosfero-br em listas.softwarelivre.org
> > http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
> >
> >
> 
> 
> -- 
> "Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua
> ideologia. Morra por sua ideologia" P.R. Sarkar
> 
> EITA - Educação, Informação e Tecnologias para Autogestão
> http://cirandas.net/brauliobo
> http://eita.org.br



> _______________________________________________
> Noosfero-br mailing list
> Noosfero-br em listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br


-- 
Rodrigo Souto <rodrigo em colivre.coop.br> :: 55 71 8131-7714
Colivre - Cooperativa de Tecnologias Livres
http://www.colivre.coop.br/
-------------- Pr�xima Parte ----------
Um anexo n�o-texto foi limpo...
Nome: signature.asc
Tipo: application/pgp-signature
Tamanho: 490 bytes
Descri��o: Digital signature
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130703/21717fc4/attachment.pgp>


More information about the Noosfero-br mailing list