SlideShare a Scribd company logo
Rails::Engine




                      @flaviamissi
                flaviamissi.com.br
What is a engine?




                <<
                             slices
engine
What is a engine?
●
    Works exactly as a built-in rails application
●
    Railtie
    ●
        Active Record
    ●
        Active Resource
    ●
        Action Mailer
    ●
        Action Controller
    ●
        Action View
Application -> Engine -> Railtie

   module Rails
         class Application < Engine
         ...
         class Engine < Railtie
         ...
   ...




                        https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb
                        https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb
http://www.flickr.com/photos/imelda/1022089050/sizes/l/in/photostream/
Creating Our Engine App




     $ rails new MyApp
What you don't need


 $ rm -rf log/
 $ rm -rf tmp/
 $ rm -rf doc/
 $ rm -rf vendor/
 $ rm -rf config/enviroments/
 $ rm -rf config/initializers/ *
 $ rm -rf config/boot.rb *
 $ rm -rf script/ *



                                   * = later!
And We Have Now...
A Simple Blog App




$ rails g scaffold Blog::Post title:string post:text



            namespace!
routes.rb


Engine::Application.routes.draw do



 Rails.application.routes.draw do
config/application.rb


module MyApp
  class Application < Rails::Application




module MyApp
  class Engine < Rails::Engine
Integrating With Another App




$ cp -R ~/my_engine ~/my_app/vendor/plugins/
Integrating With Another App


                                    $ rake routes

blog_posts     GET /blog/posts(.:format)         {:action=>"index", :controller=>"blog/posts"}
               POST /blog/posts(.:format)         {:action=>"create",
                                                               :controller=>"blog/posts"}
new_blog_post GET /blog/posts/new(.:format) {:action=>"new", :controller=>"blog/posts"}
edit_blog_post GET /blog/posts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/posts"}
blog_post      GET /blog/posts/:id(.:format)       {:action=>"show",
                                                               :controller=>"blog/posts"}
               PUT /blog/posts/:id(.:format)      {:action=>"update",
                                                               :controller=>"blog/posts"}
               DELETE /blog/posts/:id(.:format) {:action=>"destroy",
                                                               :controller=>"blog/posts"}
Só isso?!




http://www.flickr.com/photos/bee721/5784266118/
A Problem...



Migrations and everything inside public/
are not available to the main application
The Solution


namespace :engine do
  task :create, :engine do |cmd, args|
     puts "Creating symbolic links..."
     system "mkdir #{Rails.root.to_s}/public/#{args[:engin
     system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg
     system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg
     puts "Done!"
  end
end
Some Interesting Links


●
  https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_
●
  http://akitaonrails.com/2010/05/10/rails-3-introducao-a-engines
●
  http://api.rubyonrails.org/classes/Rails/Engine.html
●
  http://api.rubyonrails.org/classes/Rails/Railtie.html

More Related Content

What's hot (20)

PPTX
Rails Engine :: modularize you app
Muntasim Ahmed
 
PPT
Rails engines
Josh Schramm
 
PDF
Using Angular with Rails
Jamie Davidson
 
PPTX
Rails Engine | Modular application
mirrec
 
PDF
Adventurous Merb
Matt Todd
 
KEY
How to set up and test a Rails 3 Engine
nicholasf
 
PPTX
Building a dashboard using AngularJS
RajthilakMCA
 
PPTX
Rails Engine Patterns
Andy Maleh
 
PDF
RoR 101: Session 2
Rory Gianni
 
PDF
Introduction à Ruby
Microsoft
 
PDF
Hello World on Slim Framework 3.x
Ryan Szrama
 
PDF
Bullet: The Functional PHP Micro-Framework
Vance Lucas
 
PDF
Rails 2.3 and Rack - NHRuby Feb 2009
bturnbull
 
PDF
Laravel Restful API and AngularJS
Blake Newman
 
PPTX
Using WordPress as your application stack
Paul Bearne
 
PPTX
Laravel - Website Development in Php Framework.
SWAAM Tech
 
PPTX
Laravel Beginners Tutorial 2
Vikas Chauhan
 
PPTX
Workshop Laravel 5.2
Wahyu Rismawan
 
PDF
Building WordPress Client Side Applications with WP and WP-API - #wcmia
Roy Sivan
 
PDF
How to build Client Side Applications with WordPress and WP-API | #wcmia
Roy Sivan
 
Rails Engine :: modularize you app
Muntasim Ahmed
 
Rails engines
Josh Schramm
 
Using Angular with Rails
Jamie Davidson
 
Rails Engine | Modular application
mirrec
 
Adventurous Merb
Matt Todd
 
How to set up and test a Rails 3 Engine
nicholasf
 
Building a dashboard using AngularJS
RajthilakMCA
 
Rails Engine Patterns
Andy Maleh
 
RoR 101: Session 2
Rory Gianni
 
Introduction à Ruby
Microsoft
 
Hello World on Slim Framework 3.x
Ryan Szrama
 
Bullet: The Functional PHP Micro-Framework
Vance Lucas
 
Rails 2.3 and Rack - NHRuby Feb 2009
bturnbull
 
Laravel Restful API and AngularJS
Blake Newman
 
Using WordPress as your application stack
Paul Bearne
 
Laravel - Website Development in Php Framework.
SWAAM Tech
 
Laravel Beginners Tutorial 2
Vikas Chauhan
 
Workshop Laravel 5.2
Wahyu Rismawan
 
Building WordPress Client Side Applications with WP and WP-API - #wcmia
Roy Sivan
 
How to build Client Side Applications with WordPress and WP-API | #wcmia
Roy Sivan
 

Similar to Rails::Engine (20)

PDF
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
Masakuni Kato
 
PDF
Django Vs Rails
Sérgio Santos
 
PDF
Ruby on Rails - Introduction
Vagmi Mudumbai
 
PDF
Rails Engines - A presentation for the 22nd Athens Ruby Meetup
Skroutz S.A.
 
PDF
Rails 3 overview
Yehuda Katz
 
PDF
Rails MVC by Sergiy Koshovyi
Pivorak MeetUp
 
PPT
Useful Rails Plugins
navjeet
 
PDF
ElggCamp Santiago - Dev Edition
Brett Profitt
 
PDF
ElggCamp Santiago> For Developers!
Condiminds
 
PPT
GHC
AidIQ
 
PDF
using Mithril.js + postgREST to build and consume API's
Antônio Roberto Silva
 
PDF
Rails 3: Dashing to the Finish
Yehuda Katz
 
PDF
Ride on the Fast Track of Web with Ruby on Rails- Part 2
A.K.M. Ahsrafuzzaman
 
PDF
The Rails Way
Michał Orman
 
PDF
Client Side Measurement & Performance With Rails
Eric Falcao
 
PDF
Generators
Allan Davis
 
ODP
Passo a Passo para criar uma aplicação Móvel Híbrida
Juliano Martins
 
PDF
Writing Software not Code with Cucumber
Ben Mabey
 
PDF
Intro To Mvc Development In Php
funkatron
 
PPTX
React django
Heber Silva
 
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
Masakuni Kato
 
Django Vs Rails
Sérgio Santos
 
Ruby on Rails - Introduction
Vagmi Mudumbai
 
Rails Engines - A presentation for the 22nd Athens Ruby Meetup
Skroutz S.A.
 
Rails 3 overview
Yehuda Katz
 
Rails MVC by Sergiy Koshovyi
Pivorak MeetUp
 
Useful Rails Plugins
navjeet
 
ElggCamp Santiago - Dev Edition
Brett Profitt
 
ElggCamp Santiago> For Developers!
Condiminds
 
GHC
AidIQ
 
using Mithril.js + postgREST to build and consume API's
Antônio Roberto Silva
 
Rails 3: Dashing to the Finish
Yehuda Katz
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
A.K.M. Ahsrafuzzaman
 
The Rails Way
Michał Orman
 
Client Side Measurement & Performance With Rails
Eric Falcao
 
Generators
Allan Davis
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Juliano Martins
 
Writing Software not Code with Cucumber
Ben Mabey
 
Intro To Mvc Development In Php
funkatron
 
React django
Heber Silva
 
Ad

More from Flavian Missi (6)

PDF
Tdd with-python-and-django
Flavian Missi
 
PDF
Profiling em Python
Flavian Missi
 
PDF
Tsuru - plataforma de cloud computing open source
Flavian Missi
 
PDF
Django class based-views
Flavian Missi
 
ODP
Modularizing Rails Apps with Cells
Flavian Missi
 
PDF
Capybara
Flavian Missi
 
Tdd with-python-and-django
Flavian Missi
 
Profiling em Python
Flavian Missi
 
Tsuru - plataforma de cloud computing open source
Flavian Missi
 
Django class based-views
Flavian Missi
 
Modularizing Rails Apps with Cells
Flavian Missi
 
Capybara
Flavian Missi
 
Ad

Rails::Engine

  • 1. Rails::Engine @flaviamissi flaviamissi.com.br
  • 2. What is a engine? << slices engine
  • 3. What is a engine? ● Works exactly as a built-in rails application ● Railtie ● Active Record ● Active Resource ● Action Mailer ● Action Controller ● Action View
  • 4. Application -> Engine -> Railtie module Rails class Application < Engine ... class Engine < Railtie ... ... https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb
  • 6. Creating Our Engine App $ rails new MyApp
  • 7. What you don't need $ rm -rf log/ $ rm -rf tmp/ $ rm -rf doc/ $ rm -rf vendor/ $ rm -rf config/enviroments/ $ rm -rf config/initializers/ * $ rm -rf config/boot.rb * $ rm -rf script/ * * = later!
  • 8. And We Have Now...
  • 9. A Simple Blog App $ rails g scaffold Blog::Post title:string post:text namespace!
  • 11. config/application.rb module MyApp class Application < Rails::Application module MyApp class Engine < Rails::Engine
  • 12. Integrating With Another App $ cp -R ~/my_engine ~/my_app/vendor/plugins/
  • 13. Integrating With Another App $ rake routes blog_posts GET /blog/posts(.:format) {:action=>"index", :controller=>"blog/posts"} POST /blog/posts(.:format) {:action=>"create", :controller=>"blog/posts"} new_blog_post GET /blog/posts/new(.:format) {:action=>"new", :controller=>"blog/posts"} edit_blog_post GET /blog/posts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/posts"} blog_post GET /blog/posts/:id(.:format) {:action=>"show", :controller=>"blog/posts"} PUT /blog/posts/:id(.:format) {:action=>"update", :controller=>"blog/posts"} DELETE /blog/posts/:id(.:format) {:action=>"destroy", :controller=>"blog/posts"}
  • 15. A Problem... Migrations and everything inside public/ are not available to the main application
  • 16. The Solution namespace :engine do task :create, :engine do |cmd, args| puts "Creating symbolic links..." system "mkdir #{Rails.root.to_s}/public/#{args[:engin system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg puts "Done!" end end
  • 17. Some Interesting Links ● https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_ ● http://akitaonrails.com/2010/05/10/rails-3-introducao-a-engines ● http://api.rubyonrails.org/classes/Rails/Engine.html ● http://api.rubyonrails.org/classes/Rails/Railtie.html