terça-feira, 7 de agosto de 2012

Engine to RAILS 2

No forum do RubyOnbr gerou-se a dúvida de criar um mini app para ser "embutido" em outros projetos Rails2. Para entendermos... o rails 3 possui um conceito de mini app onde você reutiliza esse aplicativo em muitos projetos. Precisei contruir um engine para o RAILS 2, como não tem para esta versão do Rails, precisei carregar minha estrutura MVC no projeto principal da seguinte forma... As gems possuem um padrão de executar o arquivo init.rb do diretorio rails ao ser chamada pelo projeto princinpal. Abaixo a estrutura da minha gem:
   .
   |-app
   |---controllers
       `minha_controller.rb
   |---helpers
       `minha_helper.rb
   |---models
       `minha_model.rb
   |---views
   |-----minha
         `new.rb
   |-config
       `minhas_rotas.rb
   |-lib
   |-rails
       `init.rb
# rails/init.rb
begin
  require File.dirname(__FILE__)+'/../config/minhas_rotas.rb'
  ActionView::Helpers.send :include, ::MinhaHelper
  %w{ models controllers }.each do |dir|
    path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'app', dir))
    ActiveSupport::Dependencies.autoload_paths << path
    ActiveSupport::Dependencies.autoload_once_paths.delete(path)
  end
rescue => e
  raise e.message.inspect
end
Minhas rotas são apenas um module...
#config/minhas_rotas.rb
module RelatorioDinamicoRoutes
  def add(map)
    map.resources :minha_gem
  end
end
... para serem adicionas no arquivo routes.rb do projeto principal
#MyProject/config/routes.rb
ActionController::Routing::Routes.draw do |map|
   MinhasRotas.add( map )
end

Nenhum comentário:

Postar um comentário