Rails Engine
An awesome tool to extend your rails application




               Muntasim Ahmed
   Platform Architect @ Tasawr Interactive
         https://github.com/railscash
            muntasim@tasawr.com
Agenda

•   Why Rails Engine
•   What is Rails Engine
•   How it works with Rails Core
•   Who are they
•   Where is your interest
Problems
• Large application without reusable component
• Slow testing ( if any :) )
• Larger app, messy
Solution
• Find common functionalities
• Extract them to module => Gems
• Use railtie to tie with Rails App => Rails Engine
One Thing!

Rails (version>=3.1) is just a “supercharged” engine

               http://edgeguides.rubyonrails.org/engines.html
Rails Engine ?

• pre-packaged application
• able to be run or mounted within another Rails
  application
• can have its own models, views, controllers,
  generators and publicly served static files
Rails Engine ?

•
Rails Engine has




      Image source: Railscasts.com
Rails Engine has




     Image source: Google
Rails Engine has




        Image source: Google
Rails Engine has




         Image source: Google
Rails engine walk-through
•   Create an engine
•   Implement requirements in app, lib etc.
•   Test
•   Mount to main app
•   Override where necessary
•   And done!
Rails engine walk-through

Create
rails plugin new awesome_engine --mountable

Then generate mvc stuffs, test


In App Gemfile
gem "awesome_engine", path => "awesome_engine_path


In App Route
mount AwesomeEngine::Engine => "/awesome_engine_path", as =>
“awesome_engine"
Rails engine walk-through

Hit localhost:3000/awesome_engine_path
                                    (mount point)

It will hit engine's root path



     Welcome to awesome engine
               home!
Rails engine walk-through

Routes:

Use engine routes from main app using
engine_name.route_name

e.g.   awesome_name.root_path
Rails engine walk-through

Routes:

Use main app routes from engine using
main_app.route_name

e.g. main_app.root_path
Who are they

•   Rails Admin
•   Devise
•   Blogit
•   Tolk
•   .....
References

•   http://railscasts.com/episodes/277-mountable-engines
•   http://www.slideshare.net/AndyMaleh/rails-engine-patterns
•   http://www.slideshare.net/mirrec/rails-engine-rubyslava
•   http://edgeguides.rubyonrails.org/engines.html
•   http://edgeapi.rubyonrails.org/classes/Rails/Engine.html
•   http://pivotallabs.com/users/shagemann/blog/articles/1994-
    migrating-rom-a-single-rails-app-to-a-suite-of-rails-engines



                                                    Image source:
                                Google, Railscasts and Dulal Khan
Thanks for your attention :)
???

Question(s)

Rails Engine :: modularize you app

  • 1.
    Rails Engine An awesometool to extend your rails application Muntasim Ahmed Platform Architect @ Tasawr Interactive https://github.com/railscash muntasim@tasawr.com
  • 2.
    Agenda • Why Rails Engine • What is Rails Engine • How it works with Rails Core • Who are they • Where is your interest
  • 3.
    Problems • Large applicationwithout reusable component • Slow testing ( if any :) ) • Larger app, messy
  • 4.
    Solution • Find commonfunctionalities • Extract them to module => Gems • Use railtie to tie with Rails App => Rails Engine
  • 5.
    One Thing! Rails (version>=3.1)is just a “supercharged” engine http://edgeguides.rubyonrails.org/engines.html
  • 6.
    Rails Engine ? •pre-packaged application • able to be run or mounted within another Rails application • can have its own models, views, controllers, generators and publicly served static files
  • 7.
  • 8.
    Rails Engine has Image source: Railscasts.com
  • 9.
    Rails Engine has Image source: Google
  • 10.
    Rails Engine has Image source: Google
  • 11.
    Rails Engine has Image source: Google
  • 12.
    Rails engine walk-through • Create an engine • Implement requirements in app, lib etc. • Test • Mount to main app • Override where necessary • And done!
  • 13.
    Rails engine walk-through Create railsplugin new awesome_engine --mountable Then generate mvc stuffs, test In App Gemfile gem "awesome_engine", path => "awesome_engine_path In App Route mount AwesomeEngine::Engine => "/awesome_engine_path", as => “awesome_engine"
  • 14.
    Rails engine walk-through Hitlocalhost:3000/awesome_engine_path (mount point) It will hit engine's root path Welcome to awesome engine home!
  • 15.
    Rails engine walk-through Routes: Useengine routes from main app using engine_name.route_name e.g. awesome_name.root_path
  • 16.
    Rails engine walk-through Routes: Usemain app routes from engine using main_app.route_name e.g. main_app.root_path
  • 17.
    Who are they • Rails Admin • Devise • Blogit • Tolk • .....
  • 18.
    References • http://railscasts.com/episodes/277-mountable-engines • http://www.slideshare.net/AndyMaleh/rails-engine-patterns • http://www.slideshare.net/mirrec/rails-engine-rubyslava • http://edgeguides.rubyonrails.org/engines.html • http://edgeapi.rubyonrails.org/classes/Rails/Engine.html • http://pivotallabs.com/users/shagemann/blog/articles/1994- migrating-rom-a-single-rails-app-to-a-suite-of-rails-engines Image source: Google, Railscasts and Dulal Khan
  • 19.
    Thanks for yourattention :)
  • 20.