with a mighty hammer
DESCRIPTION
Presentation on Rails 3 generators, given at Red Dirt Ruby Conference in Oklahoma City on May 6, 2010TRANSCRIPT
![Page 1: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/1.jpg)
bensco'ield – viget labs
With a Mighty Hammerred dirt rubyconf6 may 2010
![Page 2: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/2.jpg)
Changes
![Page 3: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/3.jpg)
Model
![Page 4: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/4.jpg)
[rails2] > ./script/generate model Viking name:string exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/viking.rb create test/unit/viking_test.rb create test/fixtures/vikings.yml exists db/migrate create db/migrate/20100505095300_create_vikings.rb
![Page 5: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/5.jpg)
[rails3] > rails g model Viking name:string invoke active_record create db/migrate/20100505095405_create_vikings.rb create app/models/viking.rb invoke test_unit create test/unit/viking_test.rb create test/fixtures/vikings.yml
![Page 6: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/6.jpg)
[rails3] > rails g model Viking name:string invoke active_record create db/migrate/20100505095405_create_vikings.rb create app/models/viking.rb invoke test_unit create test/unit/viking_test.rb create test/fixtures/vikings.yml
![Page 7: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/7.jpg)
Controller
![Page 8: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/8.jpg)
[rails2] > ./script/generate controller Vikings new create exists app/controllers/ exists app/helpers/ create app/views/vikings exists test/functional/ exists test/unit/helpers/ create app/controllers/vikings_controller.rb create test/functional/vikings_controller_test.rb create app/helpers/vikings_helper.rb create test/unit/helpers/vikings_helper_test.rb create app/views/vikings/new.html.erb create app/views/vikings/create.html.erb
![Page 9: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/9.jpg)
[rails3] > rails g controller Vikings new create create app/controllers/vikings_controller.rb route get "vikings/create" route get "vikings/new" invoke erb create app/views/vikings create app/views/vikings/new.html.erb create app/views/vikings/create.html.erb invoke test_unit create test/functional/vikings_controller_test.rb invoke helper create app/helpers/vikings_helper.rb invoke test_unit create test/unit/helpers/vikings_helper_test.rb
![Page 10: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/10.jpg)
[rails3] > rails g controller Vikings new create create app/controllers/vikings_controller.rb route get "vikings/create" route get "vikings/new" invoke erb create app/views/vikings create app/views/vikings/new.html.erb create app/views/vikings/create.html.erb invoke test_unit create test/functional/vikings_controller_test.rb invoke helper create app/helpers/vikings_helper.rb invoke test_unit create test/unit/helpers/vikings_helper_test.rb
![Page 11: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/11.jpg)
Resource
![Page 12: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/12.jpg)
[rails2] > ./script/generate resource Viking name:string exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/vikings exists test/functional/ exists test/unit/ exists test/unit/helpers/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/viking.rb create test/unit/viking_test.rb create test/fixtures/vikings.yml exists db/migrate create db/migrate/20100505095850_create_vikings.rb create app/controllers/vikings_controller.rb create test/functional/vikings_controller_test.rb create app/helpers/vikings_helper.rb create test/unit/helpers/vikings_helper_test.rb route map.resources :vikings
![Page 13: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/13.jpg)
[rails3] > rails g resource Viking name:string invoke active_record create db/migrate/20100505095729_create_vikings.rb create app/models/viking.rb invoke test_unit create test/unit/viking_test.rb create test/fixtures/vikings.yml invoke controller create app/controllers/vikings_controller.rb invoke erb create app/views/vikings invoke test_unit create test/functional/vikings_controller_test.rb invoke helper create app/helpers/vikings_helper.rb invoke test_unit create test/unit/helpers/vikings_helper_test.rb route resources :vikings
![Page 14: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/14.jpg)
[rails3] > rails g resource Viking name:string invoke active_record create db/migrate/20100505095729_create_vikings.rb create app/models/viking.rb invoke test_unit create test/unit/viking_test.rb create test/fixtures/vikings.yml invoke controller create app/controllers/vikings_controller.rb invoke erb create app/views/vikings invoke test_unit create test/functional/vikings_controller_test.rb invoke helper create app/helpers/vikings_helper.rb invoke test_unit create test/unit/helpers/vikings_helper_test.rb route resources :vikings
![Page 15: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/15.jpg)
Options
![Page 16: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/16.jpg)
[rails2] > ./script/generate modelOptions: --skip-timestamps --skip-migration --skip-fixture
Rails Info: -v, --version -h, --help
General Options: -p, --pretend -f, --force -s, --skip -q, --quiet -t, --backtrace -c, --svn -g, --git
![Page 17: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/17.jpg)
[rails3] > rails g modelOptions: -o, --orm=NAME
Runtime options: -q, [--quiet] -p, [--pretend] -f, [--force] -s, [--skip]
TestUnit options: [--fixture] -r, [--fixture-replacement=NAME]
ActiveRecord options: [--migration] [--parent=PARENT] [--timestamps] -t, [--test-framework=NAME]
![Page 18: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/18.jpg)
Additions
![Page 19: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/19.jpg)
[rails3] > rails g modelOptions: -o, --orm=NAME
Runtime options: -q, [--quiet] -p, [--pretend] -f, [--force] -s, [--skip]
TestUnit options: [--fixture] -r, [--fixture-replacement=NAME]
ActiveRecord options: [--migration] [--parent=PARENT] [--timestamps] -t, [--test-framework=NAME]
![Page 20: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/20.jpg)
[rails3] > rails g resourceOptions: [--singleton] -c, --resource-controller=NAME -o, --orm=NAME -a, [--actions=ACTION ACTION] [--force-plural]
Runtime options: ...
TestUnit options: ...
ActiveRecord options: ...
Controller options: -e, [--template-engine=NAME] [--helper] -t, [--test-framework=NAME]
![Page 21: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/21.jpg)
Hooks
![Page 22: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/22.jpg)
[rails3] > rails g modelOptions: -o, --orm=NAME
Runtime options: ...
TestUnit options: [--fixture] -r, [--fixture-replacement=NAME]
ActiveRecord options: [--migration] [--parent=PARENT] [--timestamps] -t, [--test-framework=NAME]
![Page 23: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/23.jpg)
[rails3] > rails g resourceOptions: [--singleton] -c, --resource-controller=NAME -o, --orm=NAME -a, [--actions=ACTION ACTION] [--force-plural]
Runtime options: ...
TestUnit options: ...
ActiveRecord options: ...
Controller options: -e, [--template-engine=NAME] [--helper] -t, [--test-framework=NAME]
![Page 24: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/24.jpg)
Replacements
![Page 25: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/25.jpg)
On the Fly
![Page 26: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/26.jpg)
[rails3] > rails g model Ninja name:string -o mongo_mapper
[rails3] > rails g model Ninja name:string -t shoulda
[rails3] > rails g model Ninja name:string -r factory_girl
![Page 27: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/27.jpg)
[rails3] > rails g model Ninja name:string -o mongo_mapper error mongo_mapper [not found]
[rails3] > rails g model Ninja name:string -t shoulda invoke active_record create db/migrate/20100505102902_create_ninjas.rb create app/models/ninja.rb error shoulda [not found]
[rails3] > rails g model Ninja name:string -r factory_girl invoke active_record create db/migrate/20100505102902_create_ninjas.rb create app/models/ninja.rb invoke test_unit create test/unit/ninja_test.rb error factory_girl [not found]
![Page 28: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/28.jpg)
[rails3] > rails g generator FactoryGirl create lib/generators/factory_girl create lib/generators/factory_girl/factory_girl_generator.rb create lib/generators/factory_girl/USAGE create lib/generators/factory_girl/templates
NO
![Page 29: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/29.jpg)
![Page 30: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/30.jpg)
module FactoryGirl class ModelGenerator < Rails::Generators::NamedBase argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
def create_fixture_file template 'factory.rb', File.join('test', 'factories', "#{singular_name}.rb") end
def self.source_root @source_root ||= File.expand_path('../templates', __FILE__) end endend
![Page 31: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/31.jpg)
Factory.define :<%= singular_name %> do |f|<% attributes.each do |attribute| -%><% if attribute.type == :references -%> f.association :<%= attribute.name %><% else -%> f.<%= attribute.name %> <%= attribute.default.inspect %><% end -%><% end -%>end
![Page 32: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/32.jpg)
[rails3] > rails g model Ninja name:string clan:references -r factory_girl invoke active_record create db/migrate/20100505102902_create_ninjas.rb create app/models/ninja.rb invoke test_unit create test/unit/ninja_test.rb invoke factory_girl create test/factories/ninja.rb
![Page 33: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/33.jpg)
Factory.define :ninja do |f| f.name "MyString" f.association :clanend
![Page 34: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/34.jpg)
Changing the Default
![Page 35: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/35.jpg)
module TestApp class Application < Rails::Application config.generators do |g| g.test_framework :test_unit, :fixture_replacement => :factory_girl end endend
![Page 36: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/36.jpg)
[rails3] > rails g model Ninja name:string clan:references invoke active_record create db/migrate/20100505102902_create_ninjas.rb create app/models/ninja.rb invoke test_unit create test/unit/ninja_test.rb invoke factory_girl create test/factories/ninja.rb
![Page 37: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/37.jpg)
Hooking
![Page 38: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/38.jpg)
Typus
![Page 39: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/39.jpg)
![Page 40: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/40.jpg)
[rails3] > rails g resource Cowboy name:string invoke active_record create db/migrate/20100506031815_create_cowboys.rb create app/models/cowboy.rb invoke test_unit create test/unit/cowboy_test.rb invoke factory_girl create test/factories/cowboy.rb invoke controller create app/controllers/cowboys_controller.rb invoke erb create app/views/cowboys invoke test_unit create test/functional/cowboys_controller_test.rb invoke helper create app/helpers/cowboys_helper.rb invoke test_unit create test/unit/helpers/cowboys_helper_test.rb route resources :cowboys
![Page 41: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/41.jpg)
[rails3] > rails g resource Cowboy name:string invoke active_record create db/migrate/20100506031815_create_cowboys.rb create app/models/cowboy.rb invoke test_unit create test/unit/cowboy_test.rb invoke factory_girl create test/factories/cowboy.rb invoke controller create app/controllers/cowboys_controller.rb invoke erb create app/views/cowboys invoke test_unit create test/functional/cowboys_controller_test.rb invoke helper create app/helpers/cowboys_helper.rb invoke test_unit create test/unit/helpers/cowboys_helper_test.rb route resources :cowboys
![Page 42: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/42.jpg)
module Typus class ResourceGenerator < Rails::Generators::NamedBase def initialize(args, *options) #:nodoc: args[0] = args[0].dup if args[0].is_a?(String) && args[0].frozen? args[0] = "Admin::#{args[0]}"
super end
def create_controller template 'typus_controller.rb', File.join('app', 'controllers', class_path, "#{file_name}_controller.rb") end
hook_for :template_engine, :as => :controller hook_for :test_framework, :as => :controller
# continued ...
![Page 43: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/43.jpg)
# continued ...
hook_for(:controller, :as => :controller, :in => :rails) do |instance, controller| instance.instance_eval do @_invocations.delete(Erb::Generators::ControllerGener...) @_invocations.delete(TestUnit::Generators::Controller...) end
instance.invoke controller, [instance.name.demodulize] end
def self.source_root @source_root ||= File.expand_path('../templates', __FILE__) end endend
![Page 44: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/44.jpg)
module TestApp class Application < Rails::Application config.generators do |g| g.resource_controller :typus, :controller => :controller end endend
![Page 45: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/45.jpg)
[rails3] > rails g resource Cowboy name:string invoke active_record create db/migrate/20100505231238_create_cowboys.rb create app/models/cowboy.rb invoke test_unit create test/unit/cowboy_test.rb invoke factory_girl create test/factories/cowboy.rb invoke typus create app/controllers/admin/cowboys_controller.rb invoke erb create app/views/admin/cowboys invoke test_unit create test/functional/admin/cowboys_controller_test.rb invoke controller create app/controllers/cowboys_controller.rb invoke erb create app/views/cowboys invoke test_unit create test/functional/cowboys_controller_test.rb invoke helper create app/helpers/cowboys_helper.rb invoke test_unit create test/unit/helpers/cowboys_helper_test.rb route resources :cowboys
![Page 46: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/46.jpg)
![Page 47: With a Mighty Hammer](https://reader033.vdocument.in/reader033/viewer/2022052410/55584547d8b42ac6078b527f/html5/thumbnails/47.jpg)
@bsco'ieldben.sco'[email protected]://spkr8.com/bsco'ieldhttp://viget.com/extendhttp: //bensco'ield.com
bensco'ield