From 31c59a4aeb074393a9cbf43ec80abe0f667670d1 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 14 Mar 2009 23:30:51 +0000
Subject: [PATCH] Added name_composer, but still not using it anywhere
---
railties/lib/rails_generator/base.rb | 1 +
railties/lib/rails_generator/name_composer.rb | 44 ++++++++++++++++++
railties/test/generators/name_composer_test.rb | 56 ++++++++++++++++++++++++
3 files changed, 101 insertions(+), 0 deletions(-)
create mode 100644 railties/lib/rails_generator/name_composer.rb
create mode 100644 railties/test/generators/name_composer_test.rb
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index aa7081f..cc9ae78 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -2,6 +2,7 @@ require File.dirname(__FILE__) + '/options'
require File.dirname(__FILE__) + '/manifest'
require File.dirname(__FILE__) + '/spec'
require File.dirname(__FILE__) + '/generated_attribute'
+require File.dirname(__FILE__) + '/name_composer'
module Rails
# Rails::Generator is a code generation platform tailored for the Rails
diff --git a/railties/lib/rails_generator/name_composer.rb b/railties/lib/rails_generator/name_composer.rb
new file mode 100644
index 0000000..8596f33
--- /dev/null
+++ b/railties/lib/rails_generator/name_composer.rb
@@ -0,0 +1,44 @@
+module NameComposer
+
+ # Group together those names that are mutually exclusive
+ NAME_DESCRIPTORS = [
+ ['base'],
+ ['camelized', 'underscored'],
+ ['singular'], ['plural']
+ ].freeze
+
+ def method_missing(sym, *args)
+ if sym.to_s =~ /(.+)_name$/ && args.empty?
+ compose_name($1)
+ else
+ super
+ end
+ end
+
+ def compose_name(description)
+ descriptors = description.split('_')
+ check_name_descriptors_sanity!(descriptors)
+ returned_name = name
+ returned_name = returned_name.split(%r{/|::}).last if descriptors.include?('base')
+ returned_name = returned_name.singularize if descriptors.include?('singular')
+ returned_name = returned_name.pluralize if descriptors.include?('plural')
+
+ # The following need to be messed up with a bit, to avoid problems with
+ # combinations such as name_space::something and NameSpace/Something
+ returned_name = returned_name.underscore.camelize if descriptors.include?('camelized')
+ returned_name = returned_name.camelize.underscore if descriptors.include?('underscored')
+ returned_name
+ end
+
+
+ private
+
+ def check_name_descriptors_sanity!(descriptors)
+ descriptors.each{|desc| raise "Unkown name description '#{desc}'" if !NAME_DESCRIPTORS.flatten.include?(desc)}
+ NAME_DESCRIPTORS.each do |set|
+ incompatibles = descriptors.collect{|desc| set.include?(desc) ? desc : nil}.compact
+ raise "The name cannot be '#{incompatibles.first}' and '#{incompatibles.second}' at the same time" if incompatibles.size > 1
+ end
+ nil
+ end
+end
diff --git a/railties/test/generators/name_composer_test.rb b/railties/test/generators/name_composer_test.rb
new file mode 100644
index 0000000..c3ba8a5
--- /dev/null
+++ b/railties/test/generators/name_composer_test.rb
@@ -0,0 +1,56 @@
+require 'generators/generator_test_helper'
+
+class NameComposerTest < Test::Unit::TestCase
+
+ def test_self_described_names
+ c = Struct.new(:name).new('product_lines').extend(NameComposer)
+ assert_equal 'product_lines', c.name
+ assert_equal 'product_lines', c.underscored_name
+ assert_equal 'product_line', c.underscored_singular_name
+ assert_equal 'product_lines', c.plural_base_name
+ assert_equal 'ProductLines', c.camelized_name
+ assert_equal 'ProductLines', c.camelized_plural_name
+ assert_equal 'ProductLines', c.camelized_base_name
+ assert_equal 'ProductLines', c.camelized_plural_base_name
+ assert_equal 'product_line', c.singular_name
+ end
+
+ def test_namespaced_self_described_names
+ c = Struct.new(:name).new('admin_space/product_line').extend(NameComposer)
+ assert_equal 'admin_space/product_line', c.name
+ assert_equal 'admin_space/product_line', c.underscored_name
+ assert_equal 'admin_space/product_line', c.underscored_singular_name
+ assert_equal 'product_lines', c.plural_base_name
+ assert_equal 'AdminSpace::ProductLine', c.camelized_name
+ assert_equal 'AdminSpace::ProductLines', c.camelized_plural_name
+ assert_equal 'ProductLine', c.camelized_base_name
+ assert_equal 'ProductLines', c.camelized_plural_base_name
+ assert_equal 'admin_space/product_line', c.singular_name
+ end
+
+ def test_self_desribed_names_with_underscores_and_double_colons
+ c = Struct.new(:name).new('admin_space::product_line').extend(NameComposer)
+ assert_equal 'admin_space::product_line', c.name
+ assert_equal 'admin_space/product_line', c.underscored_name
+ assert_equal 'admin_space/product_line', c.underscored_singular_name
+ assert_equal 'product_lines', c.plural_base_name
+ assert_equal 'AdminSpace::ProductLine', c.camelized_name
+ assert_equal 'AdminSpace::ProductLines', c.camelized_plural_name
+ assert_equal 'ProductLine', c.camelized_base_name
+ assert_equal 'ProductLines', c.camelized_plural_base_name
+ assert_equal 'admin_space::product_line', c.singular_name
+ end
+
+ def test_self_described_names_with_camel_case_and_slashes
+ c = Struct.new(:name).new('AdminSpace/ProductLine').extend(NameComposer)
+ assert_equal 'AdminSpace/ProductLine', c.name
+ assert_equal 'admin_space/product_line', c.underscored_name
+ assert_equal 'admin_space/product_line', c.underscored_singular_name
+ assert_equal 'ProductLines', c.plural_base_name
+ assert_equal 'AdminSpace::ProductLine', c.camelized_name
+ assert_equal 'AdminSpace::ProductLines', c.camelized_plural_name
+ assert_equal 'ProductLine', c.camelized_base_name
+ assert_equal 'ProductLines', c.camelized_plural_base_name
+ assert_equal 'AdminSpace/ProductLine', c.singular_name
+ end
+end
--
1.6.0.4
From 28a4a1124b65b7dcf3fa0d6db4bd0744bfa94331 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sun, 15 Mar 2009 03:16:00 +0000
Subject: [PATCH] Rewrote assign_names using name_composer.
---
railties/lib/rails_generator/base.rb | 19 ++++++++++++++-----
1 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index cc9ae78..e73b17a 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -199,11 +199,15 @@ module Rails
# Rails::Generator::Commands::Create for methods available to the manifest,
# and Rails::Generator for a general discussion of generators.
class NamedBase < Base
- attr_reader :name, :class_name, :singular_name, :plural_name, :table_name
+ attr_reader :name, :class_name, :table_name, :file_name
attr_reader :class_path, :file_path, :class_nesting, :class_nesting_depth
- alias_method :file_name, :singular_name
alias_method :actions, :args
+ include NameComposer
+
+ def plural_name; plural_base_name; end
+ def singular_name; singular_base_name; end
+
def initialize(runtime_args, runtime_options = {})
super
@@ -229,11 +233,16 @@ module Rails
private
+
def assign_names!(name)
@name = name
- base_name, @class_path, @file_path, @class_nesting, @class_nesting_depth = extract_modules(@name)
- @class_name_without_nesting, @singular_name, @plural_name = inflect_names(base_name)
- @table_name = (!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names) ? plural_name : singular_name
+ @class_path = underscored_name.include?('/') ? underscored_name.split('/')[0..-2] : []
+ @file_path = underscored_name
+ @file_name = underscored_base_name
+ @class_nesting = camelized_name.include?('::') ? camelized_name.split('::')[0..-2].join('::') : ''
+ @class_nesting_depth = @class_nesting.size
+ @class_name_without_nesting = camelized_base_name
+ @table_name = (!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names) ? underscored_plural_base_name : underscored_singular_base_name
@table_name.gsub! '/', '_'
if @class_nesting.empty?
@class_name = @class_name_without_nesting
--
1.6.0.4
From cfc9a86cf0c6509aa4ab1536025cb76c0583654a Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 02:34:17 +0100
Subject: [PATCH] Removed extract_modules() and all references to it.
---
railties/lib/rails_generator/base.rb | 13 -------------
.../components/resource/resource_generator.rb | 9 +++++----
.../components/scaffold/scaffold_generator.rb | 9 +++++----
3 files changed, 10 insertions(+), 21 deletions(-)
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index e73b17a..f480d84 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -252,19 +252,6 @@ module Rails
end
end
- # Extract modules from filesystem-style or ruby-style path:
- # good/fun/stuff
- # Good::Fun::Stuff
- # produce the same results.
- def extract_modules(name)
- modules = name.include?('/') ? name.split('/') : name.split('::')
- name = modules.pop
- path = modules.map { |m| m.underscore }
- file_path = (path + [name.underscore]).join('/')
- nesting = modules.map { |m| m.camelize }.join('::')
- [name, path, file_path, nesting, modules.size]
- end
-
def inflect_names(name)
camel = name.camelize
under = camel.underscore
diff --git a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
index 4ee2fbf..bacffd7 100644
--- a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
+++ b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
@@ -15,10 +15,11 @@ class ResourceGenerator < Rails::Generator::NamedBase
def initialize(runtime_args, runtime_options = {})
super
- @controller_name = @name.pluralize
-
- base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
- @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name)
+ @controller_name = plural_name
+ @controller_class_path = (plural_name.split('/')[0,-2] || [])
+ @controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
+ @controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
+ @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(plural_base_name)
if @controller_class_nesting.empty?
@controller_class_name = @controller_class_name_without_nesting
diff --git a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
index 2a5edee..9090d58 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
@@ -21,10 +21,11 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
@name = @name.singularize
end
- @controller_name = @name.pluralize
-
- base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
- @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(base_name)
+ @controller_name = plural_name
+ @controller_class_path = (plural_name.split('/')[0,-2] || [])
+ @controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
+ @controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
+ @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(plural_base_name)
@controller_singular_name=base_name.singularize
if @controller_class_nesting.empty?
@controller_class_name = @controller_class_name_without_nesting
--
1.6.0.4
From c091379a03d03a03270d6b21e269faa2946d2d4d Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 02:34:36 +0100
Subject: [PATCH] Removed inflect_names() and all references to it.
---
railties/lib/rails_generator/base.rb | 6 ------
.../components/resource/resource_generator.rb | 4 +++-
.../components/scaffold/scaffold_generator.rb | 4 +++-
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index f480d84..435332a 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -252,12 +252,6 @@ module Rails
end
end
- def inflect_names(name)
- camel = name.camelize
- under = camel.underscore
- plural = under.pluralize
- [camel, under, plural]
- end
end
end
end
diff --git a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
index bacffd7..85769e9 100644
--- a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
+++ b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
@@ -19,7 +19,9 @@ class ResourceGenerator < Rails::Generator::NamedBase
@controller_class_path = (plural_name.split('/')[0,-2] || [])
@controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
@controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
- @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(plural_base_name)
+ @controller_class_name_without_nesting = camelized_plural_base_name
+ @controller_singular_name = underscored_plural_base_name
+ @controller_plural_name = underscored_plural_base_name
if @controller_class_nesting.empty?
@controller_class_name = @controller_class_name_without_nesting
diff --git a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
index 9090d58..38d58ae 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
@@ -25,7 +25,9 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
@controller_class_path = (plural_name.split('/')[0,-2] || [])
@controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
@controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
- @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(plural_base_name)
+ @controller_class_name_without_nesting = camelized_plural_base_name
+ @controller_underscore_name = underscored_plural_base_name
+ @controller_plural_name = underscored_plural_base_name
@controller_singular_name=base_name.singularize
if @controller_class_nesting.empty?
@controller_class_name = @controller_class_name_without_nesting
--
1.6.0.4
From 6a9a1a974e508956dc2fd8c9f93052f707a69e94 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Fri, 29 May 2009 23:52:18 +0100
Subject: [PATCH] Removed references to "nesting" variables, as they are obsolete now.
---
railties/lib/rails_generator/base.rb | 14 +++-----------
.../components/resource/resource_generator.rb | 11 +----------
.../components/scaffold/scaffold_generator.rb | 10 +---------
railties/test/rails_generator_test.rb | 1 -
4 files changed, 5 insertions(+), 31 deletions(-)
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index 435332a..7c81c09 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -200,7 +200,7 @@ module Rails
# and Rails::Generator for a general discussion of generators.
class NamedBase < Base
attr_reader :name, :class_name, :table_name, :file_name
- attr_reader :class_path, :file_path, :class_nesting, :class_nesting_depth
+ attr_reader :class_path, :file_path
alias_method :actions, :args
include NameComposer
@@ -239,17 +239,9 @@ module Rails
@class_path = underscored_name.include?('/') ? underscored_name.split('/')[0..-2] : []
@file_path = underscored_name
@file_name = underscored_base_name
- @class_nesting = camelized_name.include?('::') ? camelized_name.split('::')[0..-2].join('::') : ''
- @class_nesting_depth = @class_nesting.size
- @class_name_without_nesting = camelized_base_name
- @table_name = (!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names) ? underscored_plural_base_name : underscored_singular_base_name
+ @table_name = (!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names) ? underscored_plural_name : underscored_singular_name
@table_name.gsub! '/', '_'
- if @class_nesting.empty?
- @class_name = @class_name_without_nesting
- else
- @table_name = @class_nesting.underscore << "_" << @table_name
- @class_name = "#{@class_nesting}::#{@class_name_without_nesting}"
- end
+ @class_name = camelized_name
end
end
diff --git a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
index 85769e9..964aa35 100644
--- a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
+++ b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
@@ -4,8 +4,6 @@ class ResourceGenerator < Rails::Generator::NamedBase
attr_reader :controller_name,
:controller_class_path,
:controller_file_path,
- :controller_class_nesting,
- :controller_class_nesting_depth,
:controller_class_name,
:controller_singular_name,
:controller_plural_name
@@ -18,16 +16,9 @@ class ResourceGenerator < Rails::Generator::NamedBase
@controller_name = plural_name
@controller_class_path = (plural_name.split('/')[0,-2] || [])
@controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
- @controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
- @controller_class_name_without_nesting = camelized_plural_base_name
@controller_singular_name = underscored_plural_base_name
@controller_plural_name = underscored_plural_base_name
-
- if @controller_class_nesting.empty?
- @controller_class_name = @controller_class_name_without_nesting
- else
- @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
- end
+ @controller_class_name = camelized_plural_base_name
end
def manifest
diff --git a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
index 38d58ae..2cb444b 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
@@ -4,8 +4,6 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
attr_reader :controller_name,
:controller_class_path,
:controller_file_path,
- :controller_class_nesting,
- :controller_class_nesting_depth,
:controller_class_name,
:controller_underscore_name,
:controller_singular_name,
@@ -24,16 +22,10 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
@controller_name = plural_name
@controller_class_path = (plural_name.split('/')[0,-2] || [])
@controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
- @controller_class_nesting = (plural_camelized_name.split('/')[0,-2] || [])
- @controller_class_name_without_nesting = camelized_plural_base_name
@controller_underscore_name = underscored_plural_base_name
@controller_plural_name = underscored_plural_base_name
@controller_singular_name=base_name.singularize
- if @controller_class_nesting.empty?
- @controller_class_name = @controller_class_name_without_nesting
- else
- @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
- end
+ @controller_class_name = camelized_plural_base_name
end
def manifest
diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb
index b2fc2f5..05f8576 100644
--- a/railties/test/rails_generator_test.rb
+++ b/railties/test/rails_generator_test.rb
@@ -115,7 +115,6 @@ class RailsGeneratorTest < Test::Unit::TestCase
g = Rails::Generator::Base.instance('working', %w(admin/foo bar baz))
assert_equal 'admin/foo', g.name
assert_equal %w(admin), g.class_path
- assert_equal 'Admin', g.class_nesting
assert_equal 'Admin::Foo', g.class_name
assert_equal 'foo', g.singular_name
assert_equal 'foos', g.plural_name
--
1.6.0.4
From 553bca364a15f540cb335e4c6b6d8a4ab8b706d4 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 00:18:22 +0100
Subject: [PATCH] Using meaningful variables in resource generator.
---
.../components/resource/resource_generator.rb | 51 ++++++++++---------
.../components/resource/templates/controller.rb | 2 +-
.../resource/templates/functional_test.rb | 2 +-
.../components/resource/templates/helper.rb | 2 +-
.../components/resource/templates/helper_test.rb | 2 +-
5 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
index 964aa35..ac25728 100644
--- a/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
+++ b/railties/lib/rails_generator/generators/components/resource/resource_generator.rb
@@ -1,52 +1,55 @@
class ResourceGenerator < Rails::Generator::NamedBase
default_options :skip_timestamps => false, :skip_migration => false
- attr_reader :controller_name,
- :controller_class_path,
- :controller_file_path,
- :controller_class_name,
- :controller_singular_name,
- :controller_plural_name
- alias_method :controller_file_name, :controller_singular_name
- alias_method :controller_table_name, :controller_plural_name
+ attr_reader :controller_name,
+ :controller_file_path,
+ :controller_test_name,
+ :controller_test_file_path,
+ :helper_name,
+ :helper_file_path,
+ :helper_test_name,
+ :helper_test_file_path
def initialize(runtime_args, runtime_options = {})
super
- @controller_name = plural_name
- @controller_class_path = (plural_name.split('/')[0,-2] || [])
- @controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
- @controller_singular_name = underscored_plural_base_name
- @controller_plural_name = underscored_plural_base_name
- @controller_class_name = camelized_plural_base_name
+ @file_path = underscored_plural_name
+ @controller_name = camelized_plural_name + 'Controller'
+ @controller_file_path = file_path + '_controller.rb'
+ @controller_test_name = controller_name + 'Test'
+ @controller_test_file_path = file_path + '_controller_test.rb'
+ @helper_name = camelized_plural_name + 'Helper'
+ @helper_file_path = file_path + '_helper.rb'
+ @helper_test_name = helper_name + 'Test'
+ @helper_test_file_path = file_path + '_helper_test.rb'
end
def manifest
record do |m|
# Check for class naming collisions.
- m.class_collisions("#{controller_class_name}Controller", "#{controller_class_name}Helper")
+ m.class_collisions(controller_name, helper_name)
m.class_collisions(class_name)
# Controller, helper, views, and test directories.
m.directory(File.join('app/models', class_path))
- m.directory(File.join('app/controllers', controller_class_path))
- m.directory(File.join('app/helpers', controller_class_path))
- m.directory(File.join('app/views', controller_class_path, controller_file_name))
- m.directory(File.join('test/functional', controller_class_path))
+ m.directory(File.join('app/controllers', class_path))
+ m.directory(File.join('app/helpers', class_path))
+ m.directory(File.join('app/views', file_path))
+ m.directory(File.join('test/functional', class_path))
m.directory(File.join('test/unit', class_path))
m.directory(File.join('test/unit/helpers', class_path))
m.dependency 'model', [name] + @args, :collision => :skip
m.template(
- 'controller.rb', File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
+ 'controller.rb', File.join('app/controllers', controller_file_path)
)
- m.template('functional_test.rb', File.join('test/functional', controller_class_path, "#{controller_file_name}_controller_test.rb"))
- m.template('helper.rb', File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb"))
- m.template('helper_test.rb', File.join('test/unit/helpers', controller_class_path, "#{controller_file_name}_helper_test.rb"))
+ m.template('functional_test.rb', File.join('test/functional', controller_test_file_path))
+ m.template('helper.rb', File.join('app/helpers', helper_file_path))
+ m.template('helper_test.rb', File.join('test/unit/helpers', helper_test_file_path))
- m.route_resources controller_file_name
+ m.route_resources file_path
end
end
diff --git a/railties/lib/rails_generator/generators/components/resource/templates/controller.rb b/railties/lib/rails_generator/generators/components/resource/templates/controller.rb
index 765a942..77a7026 100644
--- a/railties/lib/rails_generator/generators/components/resource/templates/controller.rb
+++ b/railties/lib/rails_generator/generators/components/resource/templates/controller.rb
@@ -1,2 +1,2 @@
-class <%= controller_class_name %>Controller < ApplicationController
+class <%= controller_name %> < ApplicationController
end
diff --git a/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb b/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb
index b1bb1da..9617d03 100644
--- a/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb
+++ b/railties/lib/rails_generator/generators/components/resource/templates/functional_test.rb
@@ -1,6 +1,6 @@
require 'test_helper'
-class <%= controller_class_name %>ControllerTest < ActionController::TestCase
+class <%= controller_test_name %> < ActionController::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
diff --git a/railties/lib/rails_generator/generators/components/resource/templates/helper.rb b/railties/lib/rails_generator/generators/components/resource/templates/helper.rb
index 9bd821b..43b6e90 100644
--- a/railties/lib/rails_generator/generators/components/resource/templates/helper.rb
+++ b/railties/lib/rails_generator/generators/components/resource/templates/helper.rb
@@ -1,2 +1,2 @@
-module <%= controller_class_name %>Helper
+module <%= helper_name %>
end
diff --git a/railties/lib/rails_generator/generators/components/resource/templates/helper_test.rb b/railties/lib/rails_generator/generators/components/resource/templates/helper_test.rb
index 061f64a..1d87e42 100644
--- a/railties/lib/rails_generator/generators/components/resource/templates/helper_test.rb
+++ b/railties/lib/rails_generator/generators/components/resource/templates/helper_test.rb
@@ -1,4 +1,4 @@
require 'test_helper'
-class <%= controller_class_name %>HelperTest < ActionView::TestCase
+class <%= helper_test_name %> < ActionView::TestCase
end
--
1.6.0.4
From 21f7554e6fc42cbe6e53cd6db0bcccb3f6af9300 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 00:24:42 +0100
Subject: [PATCH] Using meaningful variables in scaffold generator.
---
.../components/scaffold/scaffold_generator.rb | 88 ++++++++++++--------
.../components/scaffold/templates/controller.rb | 70 ++++++++--------
.../scaffold/templates/functional_test.rb | 32 ++++----
.../components/scaffold/templates/helper.rb | 2 +-
.../components/scaffold/templates/helper_test.rb | 2 +-
.../components/scaffold/templates/layout.html.erb | 2 +-
.../scaffold/templates/view_edit.html.erb | 9 +-
.../scaffold/templates/view_index.html.erb | 15 ++--
.../scaffold/templates/view_new.html.erb | 7 +-
.../scaffold/templates/view_show.html.erb | 7 +-
.../generators/rails_scaffold_generator_test.rb | 53 ++++++++----
railties/test/rails_generator_test.rb | 2 +-
12 files changed, 163 insertions(+), 126 deletions(-)
diff --git a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
index 2cb444b..007d1ab 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
@@ -1,15 +1,18 @@
class ScaffoldGenerator < Rails::Generator::NamedBase
default_options :skip_timestamps => false, :skip_migration => false, :force_plural => false
- attr_reader :controller_name,
- :controller_class_path,
- :controller_file_path,
- :controller_class_name,
- :controller_underscore_name,
- :controller_singular_name,
- :controller_plural_name
- alias_method :controller_file_name, :controller_underscore_name
- alias_method :controller_table_name, :controller_plural_name
+ attr_reader :controller_name,
+ :controller_file_path,
+ :functional_test_file_path,
+ :model_name,
+ :helper_name,
+ :helper_file_path,
+ :helper_test_file_path,
+ :layout_file_path,
+ :instance_name,
+ :instance_long_name,
+ :instances_name,
+ :instances_long_name
def initialize(runtime_args, runtime_options = {})
super
@@ -19,54 +22,71 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
@name = @name.singularize
end
- @controller_name = plural_name
- @controller_class_path = (plural_name.split('/')[0,-2] || [])
- @controller_file_path = (plural_underscored_name.split('/')[0,-2] || [])
- @controller_underscore_name = underscored_plural_base_name
- @controller_plural_name = underscored_plural_base_name
- @controller_singular_name=base_name.singularize
- @controller_class_name = camelized_plural_base_name
+ @file_path = underscored_plural_name
+ @class_path = underscored_plural_name.split('/')[0..-2].join('/') rescue ''
+ @controller_name = camelized_plural_name + 'Controller'
+ @controller_file_path = file_path + '_controller.rb'
+ @functional_test_file_path = file_path + '_controller_test.rb'
+ @layout_file_path = file_path + '.html.erb'
+ @model_name = camelized_base_name
+ @helper_name = camelized_plural_name + 'Helper'
+ @helper_file_path = file_path + '_helper.rb'
+ @helper_test_file_path = file_path + '_helper_test.rb'
+ @instance_name = underscored_base_singular_name
+ @instance_long_name = underscored_singular_name.gsub('/', '_')
+ @instances_name = underscored_plural_base_name
+ @instances_long_name = underscored_plural_name.gsub('/', '_')
+ end
+
+ def instance_location_descriptor(var_type = :instance_variable)
+ parts = class_path.split('/').collect{|i| "'#{i}'"}.join(', ')
+ case var_type
+ when :instance_variable
+ class_path.empty? ? '@' + instance_name : "[#{parts}, @#{instance_name}]"
+ when :local_variable
+ class_path.empty? ? instance_name : "[#{parts}, #{instance_name}]"
+ end
end
def manifest
record do |m|
# Check for class naming collisions.
- m.class_collisions("#{controller_class_name}Controller", "#{controller_class_name}Helper")
- m.class_collisions(class_name)
+ m.class_collisions(controller_name, helper_name)
+ m.class_collisions(model_name)
# Controller, helper, views, test and stylesheets directories.
m.directory(File.join('app/models', class_path))
- m.directory(File.join('app/controllers', controller_class_path))
- m.directory(File.join('app/helpers', controller_class_path))
- m.directory(File.join('app/views', controller_class_path, controller_file_name))
- m.directory(File.join('app/views/layouts', controller_class_path))
- m.directory(File.join('test/functional', controller_class_path))
+ m.directory(File.join('app/controllers', class_path))
+ m.directory(File.join('app/helpers', class_path))
+ m.directory(File.join('app/views', file_path))
+ m.directory(File.join('app/views/layouts', class_path))
+ m.directory(File.join('test/functional', class_path))
m.directory(File.join('test/unit', class_path))
m.directory(File.join('test/unit/helpers', class_path))
- m.directory(File.join('public/stylesheets', class_path))
+ m.directory(File.join('public/stylesheets', file_path))
for action in scaffold_views
m.template(
"view_#{action}.html.erb",
- File.join('app/views', controller_class_path, controller_file_name, "#{action}.html.erb")
+ File.join('app/views', file_path, "#{action}.html.erb")
)
end
# Layout and stylesheet.
- m.template('layout.html.erb', File.join('app/views/layouts', controller_class_path, "#{controller_file_name}.html.erb"))
+ m.template('layout.html.erb', 'app/views/layouts/' + layout_file_path)
m.template('style.css', 'public/stylesheets/scaffold.css')
m.template(
- 'controller.rb', File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
+ 'controller.rb', File.join('app/controllers/' + controller_file_path)
)
- m.template('functional_test.rb', File.join('test/functional', controller_class_path, "#{controller_file_name}_controller_test.rb"))
- m.template('helper.rb', File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb"))
- m.template('helper_test.rb', File.join('test/unit/helpers', controller_class_path, "#{controller_file_name}_helper_test.rb"))
+ m.template('functional_test.rb', 'test/functional/' + functional_test_file_path)
+ m.template('helper.rb', 'app/helpers/' + helper_file_path)
+ m.template('helper_test.rb', 'test/unit/helpers/' + helper_test_file_path)
- m.route_resources controller_file_name
+ m.route_resources file_path
- m.dependency 'model', [name] + @args, :collision => :skip
+ m.dependency 'model', [model_name] + @args, :collision => :skip
end
end
@@ -90,8 +110,4 @@ class ScaffoldGenerator < Rails::Generator::NamedBase
def scaffold_views
%w[ index show new edit ]
end
-
- def model_name
- class_name.demodulize
- end
end
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb
index 4d190b9..d85bcf1 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb
@@ -1,84 +1,84 @@
-class <%= controller_class_name %>Controller < ApplicationController
- # GET /<%= table_name %>
- # GET /<%= table_name %>.xml
+class <%= controller_name %> < ApplicationController
+ # GET /<%= file_path %>
+ # GET /<%= file_path %>.xml
def index
- @<%= table_name %> = <%= class_name %>.all
+ @<%= instances_name %> = <%= model_name %>.all
respond_to do |format|
format.html # index.html.erb
- format.xml { render :xml => @<%= table_name %> }
+ format.xml { render :xml => @<%= instance_name %> }
end
end
- # GET /<%= table_name %>/1
- # GET /<%= table_name %>/1.xml
+ # GET /<%= file_path %>/1
+ # GET /<%= file_path %>/1.xml
def show
- @<%= file_name %> = <%= class_name %>.find(params[:id])
+ @<%= instance_name %> = <%= model_name %>.find(params[:id])
respond_to do |format|
format.html # show.html.erb
- format.xml { render :xml => @<%= file_name %> }
+ format.xml { render :xml => @<%= instance_name %> }
end
end
- # GET /<%= table_name %>/new
- # GET /<%= table_name %>/new.xml
+ # GET /<%= file_path %>/new
+ # GET /<%= file_path %>/new.xml
def new
- @<%= file_name %> = <%= class_name %>.new
+ @<%= instance_name %> = <%= model_name %>.new
respond_to do |format|
format.html # new.html.erb
- format.xml { render :xml => @<%= file_name %> }
+ format.xml { render :xml => @<%= instance_name %> }
end
end
- # GET /<%= table_name %>/1/edit
+ # GET /<%= file_path %>/1/edit
def edit
- @<%= file_name %> = <%= class_name %>.find(params[:id])
+ @<%= instance_name %> = <%= model_name %>.find(params[:id])
end
- # POST /<%= table_name %>
- # POST /<%= table_name %>.xml
+ # POST /<%= file_path %>
+ # POST /<%= file_path %>.xml
def create
- @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
+ @<%= instance_name %> = <%= model_name %>.new(params[:<%= instance_name %>])
respond_to do |format|
- if @<%= file_name %>.save
- flash[:notice] = '<%= class_name %> was successfully created.'
- format.html { redirect_to(@<%= file_name %>) }
- format.xml { render :xml => @<%= file_name %>, :status => :created, :location => @<%= file_name %> }
+ if @<%= instance_name %>.save
+ flash[:notice] = '<%= model_name %> was successfully created.'
+ format.html { redirect_to(<%= instance_location_descriptor %>) }
+ format.xml { render :xml => @<%= instance_name %>, :status => :created, :location => <%= instance_location_descriptor %> }
else
format.html { render :action => "new" }
- format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
+ format.xml { render :xml => @<%= instance_name %>.errors, :status => :unprocessable_entity }
end
end
end
- # PUT /<%= table_name %>/1
- # PUT /<%= table_name %>/1.xml
+ # PUT /<%= file_path %>/1
+ # PUT /<%= file_path %>/1.xml
def update
- @<%= file_name %> = <%= class_name %>.find(params[:id])
+ @<%= instance_name %> = <%= model_name %>.find(params[:id])
respond_to do |format|
- if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
- flash[:notice] = '<%= class_name %> was successfully updated.'
- format.html { redirect_to(@<%= file_name %>) }
+ if @<%= instance_name %>.update_attributes(params[:<%= instance_name %>])
+ flash[:notice] = '<%= model_name %> was successfully updated.'
+ format.html { redirect_to(<%= instance_location_descriptor %>) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
- format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
+ format.xml { render :xml => @<%= instance_name %>.errors, :status => :unprocessable_entity }
end
end
end
- # DELETE /<%= table_name %>/1
- # DELETE /<%= table_name %>/1.xml
+ # DELETE /<%= file_path %>/1
+ # DELETE /<%= file_path %>/1.xml
def destroy
- @<%= file_name %> = <%= class_name %>.find(params[:id])
- @<%= file_name %>.destroy
+ @<%= instance_name %> = <%= model_name %>.find(params[:id])
+ @<%= instance_name %>.destroy
respond_to do |format|
- format.html { redirect_to(<%= table_name %>_url) }
+ format.html { redirect_to(<%= instances_long_name %>_url) }
format.xml { head :ok }
end
end
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb
index cd2fc57..4e0af1f 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb
@@ -1,10 +1,10 @@
require 'test_helper'
-class <%= controller_class_name %>ControllerTest < ActionController::TestCase
+class <%= controller_name %>Test < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
- assert_not_nil assigns(:<%= table_name %>)
+ assert_not_nil assigns(:<%= instances_name %>)
end
test "should get new" do
@@ -12,34 +12,34 @@ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
assert_response :success
end
- test "should create <%= file_name %>" do
- assert_difference('<%= class_name %>.count') do
- post :create, :<%= file_name %> => { }
+ test "should create <%= instance_name %>" do
+ assert_difference('<%= model_name %>.count') do
+ post :create, :<%= instance_name %> => { }
end
- assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
+ assert_redirected_to <%= instance_long_name %>_path(assigns(:<%= instance_name %>))
end
- test "should show <%= file_name %>" do
- get :show, :id => <%= table_name %>(:one).to_param
+ test "should show <%= instance_name %>" do
+ get :show, :id => <%= instances_name %>(:one).to_param
assert_response :success
end
test "should get edit" do
- get :edit, :id => <%= table_name %>(:one).to_param
+ get :edit, :id => <%= instances_name %>(:one).to_param
assert_response :success
end
- test "should update <%= file_name %>" do
- put :update, :id => <%= table_name %>(:one).to_param, :<%= file_name %> => { }
- assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
+ test "should update <%= instance_name %>" do
+ put :update, :id => <%= instances_name %>(:one).to_param, :<%= instance_name %> => { }
+ assert_redirected_to <%= instance_long_name %>_path(assigns(:<%= instance_name %>))
end
- test "should destroy <%= file_name %>" do
- assert_difference('<%= class_name %>.count', -1) do
- delete :destroy, :id => <%= table_name %>(:one).to_param
+ test "should destroy <%= instance_name %>" do
+ assert_difference('<%= model_name %>.count', -1) do
+ delete :destroy, :id => <%= instances_name %>(:one).to_param
end
- assert_redirected_to <%= table_name %>_path
+ assert_redirected_to <%= instances_long_name %>_path
end
end
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb
index 9bd821b..43b6e90 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/helper.rb
@@ -1,2 +1,2 @@
-module <%= controller_class_name %>Helper
+module <%= helper_name %>
end
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb b/railties/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb
index 061f64a..92b6ed3 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb
@@ -1,4 +1,4 @@
require 'test_helper'
-class <%= controller_class_name %>HelperTest < ActionView::TestCase
+class <%= helper_name %>Test < ActionView::TestCase
end
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb b/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb
index ebc97f8..f9087c6 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb
@@ -4,7 +4,7 @@
- <%= controller_class_name %>: <%%= controller.action_name %>
+ <%= controller_name %>: <%%= controller.action_name %>
<%%= stylesheet_link_tag 'scaffold' %>
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb b/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb
index cca1d61..7ec9554 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb
@@ -1,6 +1,6 @@
-Editing <%= singular_name %>
+Editing <%= instance_name %>
-<%% form_for(@<%= singular_name %>) do |f| %>
+<%% form_for(<%= instance_location_descriptor %>) do |f| %>
<%%= f.error_messages %>
<% for attribute in attributes -%>
@@ -14,5 +14,6 @@
<%% end %>
-<%%= link_to 'Show', @<%= singular_name %> %> |
-<%%= link_to 'Back', <%= plural_name %>_path %>
\ No newline at end of file
+<%%= link_to 'Show', <%= instance_location_descriptor %> %> |
+<%%= link_to 'Back', <%= instances_long_name %>_path %>
+
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb b/railties/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb
index 2e603d5..4df075f 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb
@@ -1,4 +1,4 @@
-Listing <%= plural_name %>
+Listing <%= instances_name %>
@@ -7,18 +7,19 @@
<% end -%>
-<%% @<%= plural_name %>.each do |<%= singular_name %>| %>
+<%% @<%= instances_name %>.each do |<%= instance_name %>| %>
<% for attribute in attributes -%>
- <%%=h <%= singular_name %>.<%= attribute.name %> %> |
+ <%%=h <%= instance_name %>.<%= attribute.name %> %> |
<% end -%>
- <%%= link_to 'Show', <%= singular_name %> %> |
- <%%= link_to 'Edit', edit_<%= singular_name %>_path(<%= singular_name %>) %> |
- <%%= link_to 'Destroy', <%= singular_name %>, :confirm => 'Are you sure?', :method => :delete %> |
+ <%%= link_to 'Show', <%= instance_long_name %>_path(<%= instance_name %>) %> |
+ <%%= link_to 'Edit', edit_<%= instance_long_name %>_path(<%= instance_name %>) %> |
+ <%%= link_to 'Destroy', <%= instance_long_name %>_path(<%= instance_name %>), :confirm => 'Are you sure?', :method => :delete %> |
<%% end %>
-<%%= link_to 'New <%= singular_name %>', new_<%= singular_name %>_path %>
\ No newline at end of file
+<%%= link_to 'New <%= instance_name %>', new_<%= instance_long_name %>_path %>
+
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb b/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb
index 96c89fc..1ca975f 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb
@@ -1,6 +1,6 @@
-New <%= singular_name %>
+New <%= instance_name %>
-<%% form_for(@<%= singular_name %>) do |f| %>
+<%% form_for(<%= instance_location_descriptor %>) do |f| %>
<%%= f.error_messages %>
<% for attribute in attributes -%>
@@ -14,4 +14,5 @@
<%% end %>
-<%%= link_to 'Back', <%= plural_name %>_path %>
\ No newline at end of file
+<%%= link_to 'Back', <%= instances_long_name %>_path %>
+
diff --git a/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb b/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb
index adecaf7..eb13749 100644
--- a/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb
+++ b/railties/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb
@@ -1,10 +1,11 @@
<% for attribute in attributes -%>
<%= attribute.column.human_name %>:
- <%%=h @<%= singular_name %>.<%= attribute.name %> %>
+ <%%=h @<%= instance_name %>.<%= attribute.name %> %>
<% end -%>
-<%%= link_to 'Edit', edit_<%= singular_name %>_path(@<%= singular_name %>) %> |
-<%%= link_to 'Back', <%= plural_name %>_path %>
\ No newline at end of file
+<%%= link_to 'Edit', edit_<%= instance_long_name %>_path(@<%= instance_name %>) %> |
+<%%= link_to 'Back', <%= instances_long_name %>_path %>
+
diff --git a/railties/test/generators/rails_scaffold_generator_test.rb b/railties/test/generators/rails_scaffold_generator_test.rb
index 70829a7..b58eec1 100644
--- a/railties/test/generators/rails_scaffold_generator_test.rb
+++ b/railties/test/generators/rails_scaffold_generator_test.rb
@@ -2,14 +2,20 @@ require 'generators/generator_test_helper'
require 'abstract_unit'
class RailsScaffoldGeneratorTest < GeneratorTestCase
- def test_scaffolded_names
+ def test_scaffolded_camel_cased_names
g = Rails::Generator::Base.instance('scaffold', %w(ProductLine))
- assert_equal "ProductLines", g.controller_name
- assert_equal "ProductLines", g.controller_class_name
- assert_equal "ProductLine", g.controller_singular_name
- assert_equal "product_lines", g.controller_plural_name
- assert_equal "product_lines", g.controller_file_name
- assert_equal "product_lines", g.controller_table_name
+ assert_correct_product_lines_generator g
+ end
+
+ def test_scaffolded_undercased_names
+ g = Rails::Generator::Base.instance('scaffold', %w(product_line))
+ assert_correct_product_lines_generator g
+ end
+
+ def test_scaffolded_plural_names
+ Rails::Generator::Base.logger.expects(:warning)
+ g = Rails::Generator::Base.instance('scaffold', %w(ProductLines))
+ assert_correct_product_lines_generator g
end
def test_scaffold_generates_resources
@@ -107,17 +113,6 @@ class RailsScaffoldGeneratorTest < GeneratorTestCase
assert_added_route_for :products
end
- def test_scaffolded_plural_names
- Rails::Generator::Base.logger.expects(:warning)
- g = Rails::Generator::Base.instance('scaffold', %w(ProductLines))
- assert_equal "ProductLines", g.controller_name
- assert_equal "ProductLines", g.controller_class_name
- assert_equal "ProductLine", g.controller_singular_name
- assert_equal "product_lines", g.controller_plural_name
- assert_equal "product_lines", g.controller_file_name
- assert_equal "product_lines", g.controller_table_name
- end
-
def test_scaffold_plural_model_name_without_force_plural_generates_singular_model
run_generator('scaffold', %w(Products name:string))
@@ -147,4 +142,26 @@ class RailsScaffoldGeneratorTest < GeneratorTestCase
assert_skipped_migration :create_products
assert_added_route_for :products
end
+
+
+ private
+
+ def assert_correct_product_lines_generator(g)
+ assert_equal 'product_lines', g.file_path
+ assert_equal '', g.class_path
+ assert_equal 'ProductLinesController', g.controller_name
+ assert_equal 'product_lines_controller.rb', g.controller_file_path
+ assert_equal 'product_lines_controller_test.rb', g.functional_test_file_path
+ assert_equal 'ProductLine', g.model_name
+ assert_equal 'ProductLinesHelper', g.helper_name
+ assert_equal 'product_lines_helper.rb', g.helper_file_path
+ assert_equal 'product_lines_helper_test.rb', g.helper_test_file_path
+ assert_equal 'product_lines.html.erb', g.layout_file_path
+ assert_equal 'product_line', g.instance_name
+ assert_equal 'product_line', g.instance_long_name
+ assert_equal 'product_lines', g.instances_name
+ assert_equal 'product_lines', g.instances_long_name
+ assert_equal '@product_line', g.instance_location_descriptor
+ end
+
end
diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb
index 05f8576..33faa46 100644
--- a/railties/test/rails_generator_test.rb
+++ b/railties/test/rails_generator_test.rb
@@ -139,6 +139,6 @@ class RailsGeneratorTest < Test::Unit::TestCase
def test_scaffold_controller_name
# Default behaviour is use the model name
g = Rails::Generator::Base.instance('scaffold', %w(Product))
- assert_equal "Products", g.controller_name
+ assert_equal "ProductsController", g.controller_name
end
end
--
1.6.0.4
From 419d905059b5a2d82badfa90c147b009d8b79f48 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 00:40:25 +0100
Subject: [PATCH] Removed plural_name() and singular_name(), as they were being referenced only from tests.
---
railties/lib/rails_generator/base.rb | 3 ---
railties/test/rails_generator_test.rb | 10 +++++-----
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/railties/lib/rails_generator/base.rb b/railties/lib/rails_generator/base.rb
index 7c81c09..32dcbd6 100644
--- a/railties/lib/rails_generator/base.rb
+++ b/railties/lib/rails_generator/base.rb
@@ -205,9 +205,6 @@ module Rails
include NameComposer
- def plural_name; plural_base_name; end
- def singular_name; singular_base_name; end
-
def initialize(runtime_args, runtime_options = {})
super
diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb
index 33faa46..91e03cd 100644
--- a/railties/test/rails_generator_test.rb
+++ b/railties/test/rails_generator_test.rb
@@ -116,17 +116,17 @@ class RailsGeneratorTest < Test::Unit::TestCase
assert_equal 'admin/foo', g.name
assert_equal %w(admin), g.class_path
assert_equal 'Admin::Foo', g.class_name
- assert_equal 'foo', g.singular_name
- assert_equal 'foos', g.plural_name
- assert_equal g.singular_name, g.file_name
- assert_equal "admin_#{g.plural_name}", g.table_name
+ assert_equal 'admin/foo', g.singular_name
+ assert_equal 'admin/foos', g.plural_name
+ assert_equal 'foo', g.file_name
+ assert_equal "admin_#{g.plural_base_name}", g.table_name
assert_equal %w(bar baz), g.args
end
def test_named_generator_attributes_without_pluralized
ActiveRecord::Base.pluralize_table_names = false
g = Rails::Generator::Base.instance('working', %w(admin/foo bar baz))
- assert_equal "admin_#{g.singular_name}", g.table_name
+ assert_equal "admin_#{g.singular_base_name}", g.table_name
end
def test_session_migration_generator_with_pluralization
--
1.6.0.4
From bf7f8c06cf41370c0eff2d6eee0b4139d4d13a14 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 01:15:58 +0100
Subject: [PATCH] Test for more useful attributes.
---
railties/test/rails_generator_test.rb | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb
index 91e03cd..0c88e14 100644
--- a/railties/test/rails_generator_test.rb
+++ b/railties/test/rails_generator_test.rb
@@ -116,10 +116,9 @@ class RailsGeneratorTest < Test::Unit::TestCase
assert_equal 'admin/foo', g.name
assert_equal %w(admin), g.class_path
assert_equal 'Admin::Foo', g.class_name
- assert_equal 'admin/foo', g.singular_name
- assert_equal 'admin/foos', g.plural_name
+ assert_equal "admin_foos", g.table_name
+ assert_equal 'admin/foo', g.file_path
assert_equal 'foo', g.file_name
- assert_equal "admin_#{g.plural_base_name}", g.table_name
assert_equal %w(bar baz), g.args
end
--
1.6.0.4
From 5ca81dcff6d8c719013e4f87caaf79edb2c9df33 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 02:28:56 +0100
Subject: [PATCH] Added tests for namespaced names in scaffold generator.
---
.../generators/rails_scaffold_generator_test.rb | 52 ++++++++++++++++++++
1 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/railties/test/generators/rails_scaffold_generator_test.rb b/railties/test/generators/rails_scaffold_generator_test.rb
index b58eec1..1e5dc49 100644
--- a/railties/test/generators/rails_scaffold_generator_test.rb
+++ b/railties/test/generators/rails_scaffold_generator_test.rb
@@ -18,6 +18,22 @@ class RailsScaffoldGeneratorTest < GeneratorTestCase
assert_correct_product_lines_generator g
end
+ def test_scaffolded_namespaced_names
+ g = Rails::Generator::Base.instance('scaffold', %w(admin_space/product_line))
+ assert_correct_admin_space_product_lines_generator g
+ end
+
+ def test_scaffolded_plural_namespaced_names
+ Rails::Generator::Base.logger.expects(:warning)
+ g = Rails::Generator::Base.instance('scaffold', %w(admin_space/product_lines))
+ assert_correct_admin_space_product_lines_generator g
+ end
+
+ def test_scaffolded_overly_namespaced_names
+ g = Rails::Generator::Base.instance('scaffold', %w(admin_space/stuff/product_line))
+ assert_correct_admin_space_stuff_product_lines_generator g
+ end
+
def test_scaffold_generates_resources
run_generator('scaffold', %w(Product name:string))
@@ -164,4 +180,40 @@ class RailsScaffoldGeneratorTest < GeneratorTestCase
assert_equal '@product_line', g.instance_location_descriptor
end
+ def assert_correct_admin_space_product_lines_generator(g)
+ assert_equal 'admin_space/product_lines', g.file_path
+ assert_equal 'admin_space', g.class_path
+ assert_equal 'AdminSpace::ProductLinesController', g.controller_name
+ assert_equal 'admin_space/product_lines_controller.rb', g.controller_file_path
+ assert_equal 'admin_space/product_lines_controller_test.rb', g.functional_test_file_path
+ assert_equal 'ProductLine', g.model_name
+ assert_equal 'AdminSpace::ProductLinesHelper', g.helper_name
+ assert_equal 'admin_space/product_lines_helper.rb', g.helper_file_path
+ assert_equal 'admin_space/product_lines_helper_test.rb', g.helper_test_file_path
+ assert_equal 'admin_space/product_lines.html.erb', g.layout_file_path
+ assert_equal 'product_line', g.instance_name
+ assert_equal 'admin_space_product_line', g.instance_long_name
+ assert_equal 'product_lines', g.instances_name
+ assert_equal 'admin_space_product_lines', g.instances_long_name
+ assert_equal "['admin_space', @product_line]", g.instance_location_descriptor
+ end
+
+ def assert_correct_admin_space_stuff_product_lines_generator(g)
+ assert_equal 'admin_space/stuff/product_lines', g.file_path
+ assert_equal 'admin_space/stuff', g.class_path
+ assert_equal 'AdminSpace::Stuff::ProductLinesController', g.controller_name
+ assert_equal 'admin_space/stuff/product_lines_controller.rb', g.controller_file_path
+ assert_equal 'admin_space/stuff/product_lines_controller_test.rb', g.functional_test_file_path
+ assert_equal 'ProductLine', g.model_name
+ assert_equal 'AdminSpace::Stuff::ProductLinesHelper', g.helper_name
+ assert_equal 'admin_space/stuff/product_lines_helper.rb', g.helper_file_path
+ assert_equal 'admin_space/stuff/product_lines_helper_test.rb', g.helper_test_file_path
+ assert_equal 'admin_space/stuff/product_lines.html.erb', g.layout_file_path
+ assert_equal 'product_line', g.instance_name
+ assert_equal 'admin_space_stuff_product_line', g.instance_long_name
+ assert_equal 'product_lines', g.instances_name
+ assert_equal 'admin_space_stuff_product_lines', g.instances_long_name
+ assert_equal "['admin_space', 'stuff', @product_line]", g.instance_location_descriptor
+ end
+
end
--
1.6.0.4
From d148670deabf732cee23ec1778e38e8e0a669833 Mon Sep 17 00:00:00 2001
From: pablobm
Date: Sat, 30 May 2009 01:16:50 +0100
Subject: [PATCH] Fixed generation of routes for namespaced scaffolds.
---
railties/lib/rails_generator/commands.rb | 36 ++++++++++++++------
railties/test/generators/generator_test_helper.rb | 14 ++++++-
.../generators/rails_scaffold_generator_test.rb | 15 ++++++++
3 files changed, 52 insertions(+), 13 deletions(-)
diff --git a/railties/lib/rails_generator/commands.rb b/railties/lib/rails_generator/commands.rb
index b684dc9..7dfd186 100644
--- a/railties/lib/rails_generator/commands.rb
+++ b/railties/lib/rails_generator/commands.rb
@@ -95,6 +95,19 @@ module Rails
File.open(path, 'wb') { |file| file.write(content) }
end
+ def route_log_line(resource)
+ namespace, resource = namespace_and_resource(resource)
+ line = "#{resource.to_sym.inspect}"
+ line += " in namespace #{namespace}"
+ line
+ end
+
+ def route_line(resource)
+ namespace, resource = namespace_and_resource(resource)
+ arguments = namespace.empty? ? resource.to_sym.inspect : ":#{resource}, :path_prefix => '#{namespace}', :name_prefix => '#{namespace.gsub('/', '_')}_', :controller => '#{namespace}/#{resource}'"
+ "map.resources #{arguments}"
+ end
+
private
# Ask the user interactively whether to force collision.
def force_file_collision?(destination, src, dst, file_options = {}, &block)
@@ -151,6 +164,10 @@ HELP
def template_part_mark(name, id)
"\n"
end
+
+ def namespace_and_resource(namespaced_resource)
+ namespaced_resource.to_s =~ %r{^(.*)/([^/]+)$} ? [$1,$2] : ['',namespaced_resource]
+ end
end
# Base class for commands which handle generator actions in reverse, such as Destroy.
@@ -360,14 +377,13 @@ HELP
template(relative_source, "#{relative_destination}/#{next_migration_string}_#{migration_file_name}.rb", template_options)
end
- def route_resources(*resources)
- resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
+ def route_resources(resource)
sentinel = 'ActionController::Routing::Routes.draw do |map|'
- logger.route "map.resources #{resource_list}"
+ logger.route route_log_line(resource)
unless options[:pretend]
gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
- "#{match}\n map.resources #{resource_list}\n"
+ "#{match}\n #{route_line(resource)}\n"
end
end
end
@@ -529,10 +545,9 @@ end_message
end
end
- def route_resources(*resources)
- resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
- look_for = "\n map.resources #{resource_list}\n"
- logger.route "map.resources #{resource_list}"
+ def route_resources(resource)
+ look_for = "\n #{route_line(resource)}\n"
+ logger.route route_log_line(resource)
gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
end
end
@@ -573,9 +588,8 @@ end_message
logger.migration_template file_name
end
- def route_resources(*resources)
- resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
- logger.route "map.resources #{resource_list}"
+ def route_resources(resource)
+ logger.route route_log_line(resource)
end
end
diff --git a/railties/test/generators/generator_test_helper.rb b/railties/test/generators/generator_test_helper.rb
index 01bf1c9..2ff9955 100644
--- a/railties/test/generators/generator_test_helper.rb
+++ b/railties/test/generators/generator_test_helper.rb
@@ -281,8 +281,18 @@ class GeneratorTestCase < Test::Unit::TestCase
# Asserts that the given resource was added to the routes.
def assert_added_route_for(name)
assert_generated_file("config/routes.rb") do |body|
- assert_match /map.resources :#{name.to_s.underscore}/, body,
- "should add route for :#{name.to_s.underscore}"
+ namespace = name.to_s.underscore.split('/')
+ name = namespace.pop
+ if namespace.empty?
+ assert_match /map.resources :#{name}/, body,
+ "should add route for :#{name}"
+ else
+ underscored_ns = namespace.join('_')
+ slashed_ns = namespace.join('/')
+ assert_match /map.resources :#{name.underscore}, :path_prefix => '#{slashed_ns}', :name_prefix => '#{underscored_ns}_', :controller => '#{slashed_ns}\/#{name}'/,
+ body,
+ "should_add route for #{slashed_ns}/#{name}"
+ end
end
end
diff --git a/railties/test/generators/rails_scaffold_generator_test.rb b/railties/test/generators/rails_scaffold_generator_test.rb
index 1e5dc49..acaf0e9 100644
--- a/railties/test/generators/rails_scaffold_generator_test.rb
+++ b/railties/test/generators/rails_scaffold_generator_test.rb
@@ -159,6 +159,21 @@ class RailsScaffoldGeneratorTest < GeneratorTestCase
assert_added_route_for :products
end
+ def test_namespaced_scaffold
+ run_generator('scaffold', %w(AdminSpace::Products name:string --force-plural))
+
+ assert_generated_model_for :products
+ assert_generated_functional_test_for 'admin_space/products'
+ assert_generated_unit_test_for :products
+ assert_generated_fixtures_for :products
+ assert_generated_helper_for 'admin_space/products'
+ assert_generated_helper_test_for 'admin_space/products'
+ assert_generated_stylesheet :scaffold
+ assert_generated_views_for 'admin_space/products', "index.html.erb","new.html.erb","edit.html.erb","show.html.erb"
+ assert_generated_migration :create_products
+ assert_added_route_for 'admin_space/products'
+ end
+
private
--
1.6.0.4