No Rails 2.1, gems passaram a poder ser usadas como plugins em nossos projetos. Para isto bastava criar uma pasta chamada rails dentro do projeto do gem e incluir um arquivo init.rb.
Isto acrescentou um leque de novidades como config.gem e rake:gems. Mas isto nos faz pensar, já que agora eu posso carregar gems dentro da minha aplicação Rails, seria apenas uma questão de tempo até que plugins deixassem de existir.
E parece que isto realmente pode acontecer. No edge rails, por exemplo, foi incluída uma alteração que permite inicializar plugins tanto pelo arquivo init.rb na raiz do plugin, como em um arquivo em um diretório rails/init.rb (da mesma forma como fazemos com os gems), sendo esta segunda opção a prioritária.
Assim, eu poderia por exemplo criar um gem (que funcionaria como um plugin) e instalar de duas maneiras:
./script/plugin install git://github.com/user/plugin.git
sudo gem install user-plugin --source=http://gems.github.com
Isto sem precisar manter dois arquivos init.rb (um na raiz e outro no diretório rails).
6 Comentários em "Edge Rails: Está chegando o fim dos plugins?"
Excelente! Mas não sou favorável à criação do diretório rails/ e seu conteúdo. Normalmente, uma gem é para ser utilizada no desenvolvimento Ruby, não somente Rails. O que estou tentando dizer, é que se a gem é criada somente para utilização do Rails, então não é gem! A motivação das gems é o reaproveitamento do código em outros projetos Ruby… não vale a pena criar uma gem com o objetivo de utilizar somente em Rails … e se a gem não for compatível com Merb, por exemplo?
Um abraço.
Na verdade isto continua sendo uma verdade. Gems tem de ser compatíveis com Ruby, independente de qual sistema você está usando. Mas a inclusão do diretório rails, permite que você leve a gem junto com seu projeto.
Creio que seria melhor criar um inicializador de plugins gems … dentro do diretório config/initializers/plugins.rb. Este inicializador seria responsável por vascular os diretórios de plugins e inicializá-los. Isso funcionar, senão não haveria o diretório lib/ na estrutura do Rails.
Creio que uma solução seria, se você lembra do about.yml, inclusão das instruções de iniciliazação neste arquivo.
É uma idéia … seria legal mostrá-la para a equipe de desenvolvimento do Rails … meu inglês é péssimo, se você puder ajudar.
Um abraço.
PS: Estou na metade do arquivo poignant-50.yml … o arquivo tem muito conteúdo e código.
Não é bem assim Hallison. O rails já “carrega” todos os plugins automaticamente.
Mas, cada plugin precisa ser iniciado de alguma forma, é por isto que existe o arquivo init.rb no plugin. O código deste arquivo é chamado pelo rails no momento em que ele está carregando os plugins.
Basicamente o init.rb é usado para integrar de alguma forma o gem ou plugin ao Rails. Por isto ele é necessário.
Puts Carlos … não me expressei bem! Esse seu último comentário relacionou bem o que eu queria dizer …
O inicializador de plugins do qual me referia, era para os gems “congelados”. Não lembro bem, mas parece que as gems (plugins) devem ser configuradas no environment.rb … pelo menos para auto instalação, como exemplo do will_paginate:
config.gem ‘mislav-will_paginate’, :version => ‘~>2.3′, :lib => ‘will_paginate’,
:source => ‘http://gems.github.com/’
Como funciona os gems congelados?
Deixe o seu comentário!