mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Added controller named base.
This commit is contained in:
@@ -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.
|
||||
#
|
||||
def add_prefix_and_suffix(name, hash) #:nodoc:
|
||||
"#{hash[:prefix]}#{name}#{hash[:suffix]}"
|
||||
end
|
||||
# ==== Examples
|
||||
#
|
||||
# check_class_collision :suffix => "Observer"
|
||||
#
|
||||
# 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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user