提交 b77a7dcf 编写于 作者: J José Valim

Added controller named base.

上级 d5d0b8ea
......@@ -7,49 +7,21 @@ class NamedBase < Base
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 @@ def assign_names!(given_name) #:nodoc:
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 @@ def inflect_names(name) #:nodoc:
[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
......@@ -13,11 +13,11 @@ class ResourceGenerator < ModelGenerator #metagenerator
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
......
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")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册