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

Bráulio Bhavamitra braulio at eita.org.br
Tue Jul 2 14:21:55 BRT 2013


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130702/b9f0bde3/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: logoColivre_p.gif
Type: image/gif
Size: 5576 bytes
Desc: not available
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130702/b9f0bde3/attachment.gif>


More information about the Noosfero-br mailing list