aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/generators/base.rb15
-rw-r--r--railties/lib/generators/rails/resource/resource_generator.rb11
-rw-r--r--railties/lib/generators/rails/scaffold/USAGE29
-rw-r--r--railties/lib/generators/rails/scaffold/scaffold_generator.rb9
-rw-r--r--railties/test/generators/resource_generator_test.rb14
5 files changed, 78 insertions, 0 deletions
diff --git a/railties/lib/generators/base.rb b/railties/lib/generators/base.rb
index c1a384647c..a734ab764f 100644
--- a/railties/lib/generators/base.rb
+++ b/railties/lib/generators/base.rb
@@ -188,6 +188,21 @@ module Rails
end
end
+ # Remove a previously added hook.
+ #
+ # ==== Examples
+ #
+ # remove_hook_for :orm
+ #
+ def self.remove_hook_for(*names)
+ names.each do |name|
+ remove_class_option name
+ remove_task name
+ invocations.delete_if { |i| i[0] == name }
+ invocation_blocks.delete(name)
+ end
+ end
+
protected
# This is the common method that both hook_for and invoke_if use to
diff --git a/railties/lib/generators/rails/resource/resource_generator.rb b/railties/lib/generators/rails/resource/resource_generator.rb
index 8d787aaa75..9c57eda7de 100644
--- a/railties/lib/generators/rails/resource/resource_generator.rb
+++ b/railties/lib/generators/rails/resource/resource_generator.rb
@@ -13,6 +13,17 @@ module Rails
class_option :singleton, :type => :boolean, :default => false, :aliases => "-i",
:desc => "Supply to create a singleton controller"
+ class_option :force_plural, :type => :boolean, :default => false, :aliases => "-u",
+ :desc => "Forces the use of a plural ModelName"
+
+ def initialize(args=[], options={}, config={})
+ super
+ if args[0] == args[0].pluralize && !self.options[:force_plural]
+ say "Plural version of the model detected, using singularized version. Override with --force-plural."
+ args[0] = args[0].singularize
+ end
+ end
+
def add_resource_route
route "map.resource#{:s unless options[:singleton]} :#{pluralize?(file_name)}"
end
diff --git a/railties/lib/generators/rails/scaffold/USAGE b/railties/lib/generators/rails/scaffold/USAGE
new file mode 100644
index 0000000000..71edd2f469
--- /dev/null
+++ b/railties/lib/generators/rails/scaffold/USAGE
@@ -0,0 +1,29 @@
+Description:
+ Scaffolds an entire resource, from model and migration to controller and
+ views, along with a full test suite. The resource is ready to use as a
+ starting point for your RESTful, resource-oriented application.
+
+ Pass the name of the model (in singular form), either CamelCased or
+ under_scored, as the first argument, and an optional list of attribute
+ pairs.
+
+ Attribute pairs are field:type arguments specifying the
+ model's attributes. Timestamps are added by default, so you don't have to
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
+
+ You don't have to think up every attribute up front, but it helps to
+ sketch out a few so you can start working with the resource immediately.
+
+ For example, 'scaffold post title:string body:text published:boolean'
+ gives you a model with those three attributes, a controller that handles
+ the create/show/update/destroy, forms to create and edit your posts, and
+ an index that lists them all, as well as a map.resources :posts
+ declaration in config/routes.rb.
+
+ If you want to remove all the generated files, run
+ 'script/destroy scaffold ModelName'.
+
+Examples:
+ `./script/generate scaffold post`
+ `./script/generate scaffold post title:string body:text published:boolean`
+ `./script/generate scaffold purchase order_id:integer amount:decimal`
diff --git a/railties/lib/generators/rails/scaffold/scaffold_generator.rb b/railties/lib/generators/rails/scaffold/scaffold_generator.rb
new file mode 100644
index 0000000000..1386000d9b
--- /dev/null
+++ b/railties/lib/generators/rails/scaffold/scaffold_generator.rb
@@ -0,0 +1,9 @@
+require 'generators/rails/resource/resource_generator'
+
+module Rails
+ module Generators
+ class ScaffoldGenerator < ResourceGenerator
+ remove_hook_for :actions, :resource_controller
+ end
+ end
+end
diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb
index 456e6ff3ea..53e9a1e817 100644
--- a/railties/test/generators/resource_generator_test.rb
+++ b/railties/test/generators/resource_generator_test.rb
@@ -86,6 +86,20 @@ class ResourceGeneratorTest < GeneratorsTestCase
end
end
+ def test_plural_names_are_singularized
+ content = run_generator ["accounts"]
+ assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/
+ assert_file "test/unit/account_test.rb", /class AccountTest/
+ assert_match /Plural version of the model detected, using singularized version. Override with --force-plural./, content
+ end
+
+ def test_plural_names_can_be_forced
+ content = run_generator ["accounts", "--force-plural"]
+ assert_file "app/models/accounts.rb", /class Accounts < ActiveRecord::Base/
+ assert_file "test/unit/accounts_test.rb", /class AccountsTest/
+ assert_no_match /Plural version of the model detected/, content
+ end
+
protected
def run_generator(args=["account"])