aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/generators/named_base.rb88
-rw-r--r--railties/lib/generators/rails/resource/resource_generator.rb6
-rw-r--r--railties/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb4
3 files changed, 56 insertions, 42 deletions
diff --git a/railties/lib/generators/named_base.rb b/railties/lib/generators/named_base.rb
index 9538931a6e..553850fec5 100644
--- a/railties/lib/generators/named_base.rb
+++ b/railties/lib/generators/named_base.rb
@@ -7,49 +7,21 @@ module Rails
argument :name, :type => :string
attr_reader :class_name, :singular_name, :plural_name, :table_name,
- :class_path, :file_path, :class_nesting, :class_nesting_depth
+ :class_path, :file_path, :class_nesting_depth
alias :file_name :singular_name
- class << self
- # Add a class collisions name to be checked on class initialization. You
- # can supply a hash with a :prefix or :suffix to be tested.
- #
- # ==== Examples
- #
- # check_class_collision :suffix => "Observer"
- #
- # If the generator is invoked with class name Admin, it will check for
- # the presence of "AdminObserver".
- #
- def check_class_collision(options={})
- @class_collisions = options
- end
-
- # Returns the class collisions for this class and retreives one from
- # superclass. The from_superclass method used below is from Thor.
- #
- def class_collisions #:nodoc:
- @class_collisions ||= from_superclass(:class_collisions, nil)
- end
- end
-
def initialize(*args) #:nodoc:
super
assign_names!(self.name)
parse_attributes! if respond_to?(:attributes)
-
- if self.class.class_collisions
- value = add_prefix_and_suffix(class_name, self.class.class_collisions)
- class_collisions(value)
- end
end
protected
def assign_names!(given_name) #:nodoc:
- self.name, @class_path, @file_path, @class_nesting, @class_nesting_depth = extract_modules(given_name)
- @class_name_without_nesting, @singular_name, @plural_name = inflect_names(self.name)
+ base_name, @class_path, @file_path, class_nesting, @class_nesting_depth = extract_modules(given_name)
+ class_name_without_nesting, @singular_name, @plural_name = inflect_names(base_name)
@table_name = if !defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names
plural_name
@@ -58,11 +30,11 @@ module Rails
end
@table_name.gsub! '/', '_'
- if @class_nesting.empty?
- @class_name = @class_name_without_nesting
+ 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}"
+ @table_name = class_nesting.underscore << "_" << @table_name
+ @class_name = "#{class_nesting}::#{class_name_without_nesting}"
end
end
@@ -97,12 +69,52 @@ module Rails
[camel, under, plural]
end
- # Receives a name and add suffix and prefix values frrm hash.
+ # Add a class collisions name to be checked on class initialization. You
+ # can supply a hash with a :prefix or :suffix to be tested.
+ #
+ # ==== Examples
+ #
+ # check_class_collision :suffix => "Observer"
#
- def add_prefix_and_suffix(name, hash) #:nodoc:
- "#{hash[:prefix]}#{name}#{hash[:suffix]}"
+ # If the generator is invoked with class name Admin, it will check for
+ # the presence of "AdminObserver".
+ #
+ def self.check_class_collision(options={})
+ define_method :check_class_collision do
+ name = if self.respond_to?(:controller_class_name) # for ControllerNamedBase
+ controller_class_name
+ else
+ class_name
+ end
+
+ class_collisions "#{options[:prefix]}#{name}#{options[:suffix]}"
+ end
end
+ end
+
+ # Deal with controller named base on scaffold
+ #
+ module ControllerNamedBase
+ def self.included(base) #:nodoc:
+ base.send :attr_reader, :controller_name, :controller_class_name, :controller_file_name
+ end
+
+ # Set controller variables on initialization.
+ #
+ def initialize(*args)
+ super
+ @controller_name = name.pluralize
+ base_name, class_path, file_path, class_nesting, class_nesting_depth = extract_modules(@controller_name)
+ class_name_without_nesting, @controller_file_name, controller_plural_name = inflect_names(base_name)
+
+ @controller_class_name = if class_nesting.empty?
+ class_name_without_nesting
+ else
+ "#{class_nesting}::#{class_name_without_nesting}"
+ end
+ end
end
+
end
end
diff --git a/railties/lib/generators/rails/resource/resource_generator.rb b/railties/lib/generators/rails/resource/resource_generator.rb
index 37aca18758..c8748aecf4 100644
--- a/railties/lib/generators/rails/resource/resource_generator.rb
+++ b/railties/lib/generators/rails/resource/resource_generator.rb
@@ -13,11 +13,11 @@ module Rails
class_option :singleton, :type => :boolean, :desc => "Supply to create a singleton controller"
class_option :force_plural, :type => :boolean, :desc => "Forces the use of a plural ModelName"
- def initialize(args=[], options={}, config={})
+ def initialize(*args)
super
- if args[0] == args[0].pluralize && !self.options[:force_plural]
+ if name == name.pluralize && !options[:force_plural]
say "Plural version of the model detected, using singularized version. Override with --force-plural."
- args[0] = args[0].singularize
+ name.replace name.singularize
end
end
diff --git a/railties/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb b/railties/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb
index 3a6620ae70..e7f4fdde89 100644
--- a/railties/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb
+++ b/railties/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb
@@ -1,8 +1,10 @@
module Rails
module Generators
class ScaffoldControllerGenerator < NamedBase
- class_option :singleton, :type => :boolean, :desc => "Supply to create a singleton controller"
+ include ControllerNamedBase
+
check_class_collision :suffix => "Controller"
+ class_option :singleton, :type => :boolean, :desc => "Supply to create a singleton controller"
def create_controller_files
template 'controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb")