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

Bráulio Bhavamitra braulio at eita.org.br
Thu Jul 4 06:37:22 BRT 2013


Estive refletindo que classes e modules deveria ser uma coisa só.... Eu
deveria poderia rodar um extend ou include sobre uma classe, ou instanciar
um módulo. Aí não precisaria de herança, como muitos bibliotecas já vem
deixando de usar...

Este não é um workaround no caso dos plugins. Como uma classe pode ser
usado em muitos lugares e, no caso de modelos, até dentro do class_name no
has_many, isto não iria funcionar de fato...
Funcionaria se houvesse uma lugar geral onde daí resolveria este problema
como um todo...

abraços,
bráulio


2013/7/3 Rodrigo Souto <rodrigo at colivre.coop.br>

> 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 at 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 at 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 at 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 at 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 at listas.softwarelivre.org
> > http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
>
>
> --
> Rodrigo Souto <rodrigo at colivre.coop.br> :: 55 71 8131-7714
> Colivre - Cooperativa de Tecnologias Livres
> http://www.colivre.coop.br/
>
> _______________________________________________
> Noosfero-br mailing list
> Noosfero-br at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130704/5d451835/attachment-0001.html>


More information about the Noosfero-br mailing list