diff --git a/railties/lib/generators/rails/resource/resource_generator.rb b/railties/lib/generators/rails/resource/resource_generator.rb index 938fd6298c..f61e55a01e 100644 --- a/railties/lib/generators/rails/resource/resource_generator.rb +++ b/railties/lib/generators/rails/resource/resource_generator.rb @@ -8,6 +8,9 @@ module Rails class_option :actions, :type => :array, :default => [], :banner => "ACTION ACTION", :desc => "Actions for the resource controller", :aliases => "-a" + class_option :singleton, :type => :boolean, :default => false, :aliases => "-i", + :desc => "Supply to create a singleton controller" + def invoke_for_resource_controller return unless options[:resource_controller] @@ -15,7 +18,7 @@ module Rails if klass args = [] - args << class_name.pluralize + args << pluralize?(class_name) args << options[:actions] say_status :invoke, options[:resource_controller], :blue @@ -25,11 +28,20 @@ module Rails end end - # TODO Add singleton support def add_resource_route - route "map.resources :#{file_name.pluralize}" + route "map.resource#{"s" unless options[:singleton]} :#{pluralize?(file_name)}" end + protected + + def pluralize?(name) + if options[:singleton] + name + else + name.pluralize + end + end + end end end diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index aed45f190d..3d856f519b 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -78,6 +78,20 @@ class ResourceGeneratorTest < GeneratorsTestCase end end + def test_singleton_resource + run_generator ["account", "--singleton"] + + assert_file "app/controllers/account_controller.rb", /class AccountController < ApplicationController/ + assert_file "test/functional/account_controller_test.rb", /class AccountControllerTest < ActionController::TestCase/ + + assert_file "app/helpers/account_helper.rb", /module AccountHelper/ + assert_file "test/unit/helpers/account_helper_test.rb", /class AccountHelperTest < ActionView::TestCase/ + + assert_file "config/routes.rb" do |route| + assert_match /map\.resource :account$/, route + end + end + protected def run_generator(args=["account"])