Your SlideShare is downloading. ×
0
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Namespace less engine
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Namespace less engine

691

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
691
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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

    ×