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
Comentários
Postar um comentário