Pular para o conteúdo principal

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

Comentários

Postagens mais visitadas deste blog

Números Primos + MMC + MDC + Ruby

Segue abaixo um exemplo de implementação de gerador de Números Primos + MMC ( Mínimo Múltiplo Comum ) + MDC ( Máximo Divisor Comum ) em ruby. É um resultado de uma prova de lógica que um amigo meu teve que fazer em java. Colaborações prestimosas de Cirillo Ferreira. require 'Mathn' class Numeric def multiplos(ate = 500) (1..ate).to_a.map{|v| self*v} end def divisores(ate = 500) (1..ate).to_a.map{|v| v if (self%v == 0)}.compact end end module Math def self.mmc(*valor) compara( valor.inject([]){|h, i| h end def self.mdc(*valor) compara( valor.inject([]){|h, i| h end def self.nmr_primos numeros_primos = [] (2..501).each{|i| numeros_primos numeros_primos.uniq! end private def self.compara(arr) arr.inject(arr[0]){|ac, i| ac & i} end end Math::mmc(3,5,8) => 120 Math::mmc(3,5,8,9) => 360 Os métodos mmc e mdc são métodos que aceitam parâmetros indeterminado graças a uma coisa, da linguagem ruby, chamada operador splat, que é aquele asterisco na assinatura do método. ...

Rails: Rotas

Fala rapazeada... Hoje algumas notas sobre rotas: 1º- Diferença entre member e collection: map.resources :notas, :member => { :baixar => :get } map.resources :notas, :collection => { :baixar => :get } A rota para collection será: "/notas/baixar". E para member será necessário informar um id, assim: "/notas/2/baixar" 2º - Herança: Da mesma forma que é preciso informar na model quando uma tabela depende da outra, assim: class Pessoa < ActiveRecord::Base;end class Telefone < ActiveRecord::Base; belongs_to Pessoa; end É necessário fazer suas relações nas rotas, assim: map.resources :pessoas do |pessoa| pessoa.resources :telefones end Ficando assim: --------------------------------------------------------------------------------------------------------------------------------------------- | Método | Rota | Chamada | -------------------------------------------------------------------------------...

Rails3 + Ruby1.9 + Dalli (memcache-client)

Após a revolução  cientifico-tecnológico, vivemos agora a terceira revolução industrial, a revolução feita a partir da informação. Dai a importância dos computadores, do meio técnico (a infraestrutura), e por conseguinte - e reservando suas proporções, a ferramenta mencached -- Gem memcache-client não implementa Rails3 app mais. É necessário, agora, usar a poética gem: Dalli . Caso sua aplicação use muita sessão (como a minha). Com certeza terá um problema com a nova gem do memcached. O serializer do Dalli é o Marshal. (Você pode alterar para o qual você quiser: yajl-ruby , ...).  Loading .... Leia também: bashar3a (in English) Revolução Técnico-ciêntifico-informacional Prof. Milton Santos Salvador Dali Surrealismo