From b77a7dcf4d1b072775e4f276ca59e18eaccc84ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 30 Jun 2009 13:25:27 +0200 Subject: Added controller named base. --- railties/lib/generators/named_base.rb | 88 ++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 38 deletions(-) (limited to 'railties/lib/generators/named_base.rb') 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 -- cgit v1.2.3