rails::engine
DESCRIPTION
Introduction to Rails EnginesTRANSCRIPT
Rails::Engine
@flaviamissiflaviamissi.com.br
What is a engine?
<<slices
engine
● Works exactly as a built-in rails application● Railtie
● Active Record● Active Resource● Action Mailer● Action Controller● Action View
What is a engine?
module Rails
...
class Application < Engine
https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb
Application -> Engine -> Railtie
https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb
class Engine < Railtie
...
...
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
Rails.application.routes.draw do
Engine::Application.routes.draw do
config/application.rb
module MyAppclass Application < Rails::Application
module MyAppclass 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 dotask :create, :engine do |cmd, args|
puts "Creating symbolic links..."system "mkdir #{Rails.root.to_s}/public/#{args[:engine]}"system "ln -s #{Rails.root.to_s}/vendor/plugins/#{args[:engine]}/public/* #{Rails.root.to_s}/public/#{args[:engine]}"system "ln -s #{Rails.root.to_s}/vendor/plugins/#{args[:engine]}/db/migrate/* #{Rails.root.to_s}/db/migrate/"puts "Done!"
endend
Some Interesting Links
● https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_value=1● 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