Namespace less engine
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Namespace less engine

on

  • 985 views

Namespace Less Rails Engine, reuse/inherits/override your projects is a piece of cake.

Namespace Less Rails Engine, reuse/inherits/override your projects is a piece of cake.

Statistics

Views

Total Views
985
Views on SlideShare
985
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Namespace less engine Presentation Transcript

  • 1. Namespace Less Engine reuse your projects should be a piece of cake!! Shaokun Wu shaokun.wu@gmail.com
  • 2. What’s wrong with Namespace
  • 3. • Things like Devise are very very COOL!!!!!!• But we just want to reuse our own projects• And we never will release it as a library for people to use
  • 4. • we need something could be done in your lifeclass User < ActiveRecord::Base devise :database_authenticatable, :registerable, :rememberable, :trackable, :token_authenticatable, :validatable, :recoverable, :rememberable, :trackable, :validatableend• that code costs you >1 week, but you only got paid 100 RMB???????• and you have a whole projects to be rewritten in that way???????????????????????????????????
  • 5. What we get for Namespace less?• reuse your projects (not just a small part of code) • for example, you are a site building company • you have copy/paste your cms, news system, fancy image uploader, wysiwyg editor, navigation config... • but every client just wants a fancy different looking...• easy to inherits & override anything • controllers Hey, I am still copy & paste. • models How is the Engine? • views? • helper• write code without namespace • MyAwsomeEngine::MyAwsomeModel • MyAwsomeModel I am still learning the Devise code structure.• something robust, not monkey hacking It just updates again...
  • 6. How?
  • 7. • Add Namespace less placeholders for models & controllers• Do inline Namespace::ClassName definition• Write code without Namespace• That’s probably all...
  • 8. in your engine:/app/models/department.rbin your project:/app/models/department.rb Which one will be used?
  • 9. in your engine:/app/models/hr/department.rbin your project:/app/models/department.rbclass department < Hr::Departmentend To fix it!
  • 10. in your engine:/app/models/hr/department.rb/app/models/department.rbin your project:/app/models/department.rbclass department < Hr::Departmentend To fix it, also make engine not complain!
  • 11. module Hr class DepartmentsController < ApplicationController def index @departments = Department.all # Hr::Department end endendclass Hr::DepartmentsController < ApplicationController def index @departments = Department.all # Department endend
  • 12. A model override sampleclass Hr::Employee < ActiveRecord::Base def full_name [first_name, last_name].join(" ") # Shaokun Wu endendclass Employee < Hr::Employee def full_name [last_name, first_name].join # 伍少坤 end
  • 13. Controllers• The same as models...
  • 14. What a about View?• You cannot inherits your view• But you could override them
  • 15. Helper• Not so sure, perhaps something like... Module Hr::ApplicationHelper def hello_world; end end Module ApplicationHelper include Hr::ApplicationHelper def hello_world end end
  • 16. Find a better place for the placeholder filesclass MyEngine < Rails::Engine paths["app/controllers"] << "lib/placeholders/controllers"end
  • 17. How to use the engine• in your Gemfile gem hr, :path => "../hr"• then $ bundle install• copy the migration files $ rake hr_engine:install:migrations
  • 18. Some Tips• add your engine as a submodule instead of a pure Gem • your engine is not perfect • bundle still cannot handle same name of gem in different group??• write engine rake task to generate models & controllers in your projects• try with mongoid, but be careful of the namespace • class Department < Hr::Department • # still get hr_departments as the collection name... • # of course, you could set the collection name in mongoid :)
  • 19. Read this carefully• http://api.rubyonrails.org/classes/Rails/ Engine.html
  • 20. The code here• https://github.com/shaokun/nl-engine