提交 3ce6a10b 编写于 作者: J Jeremy Kemper

Contortions to work around brittle naming dependency

上级 763489ce
......@@ -25,8 +25,11 @@ def initialize(*args) #:nodoc:
# Automatically sets the source root based on the class name.
#
def self.source_root
@_rails_source_root ||= File.expand_path(File.join(File.dirname(__FILE__),
base_name, generator_name, 'templates'))
@_rails_source_root ||= begin
if base_name && generator_name
File.expand_path(File.join(File.dirname(__FILE__), base_name, generator_name, 'templates'))
end
end
end
# Tries to get the description from a USAGE file one folder above the source
......@@ -216,7 +219,7 @@ def self.inherited(base) #:nodoc:
# and can point to wrong directions when inside an specified directory.
base.source_root
if base.name && base.name !~ /Base$/ && defined?(Rails.root) && Rails.root
if base.name && base.name !~ /Base$/ && base.base_name && base.generator_name && defined?(Rails.root) && Rails.root
path = File.expand_path(File.join(Rails.root, 'lib', 'templates'))
if base.name.include?('::')
base.source_paths << File.join(path, base.base_name, base.generator_name)
......@@ -276,8 +279,10 @@ def self.banner
# Sets the base_name taking into account the current class namespace.
#
def self.base_name
if name
@base_name ||= name.split('::').first.underscore
@base_name ||= begin
if base = name.to_s.split('::').first
base.underscore
end
end
end
......@@ -287,9 +292,10 @@ def self.base_name
def self.generator_name
if name
@generator_name ||= begin
klass_name = name.to_s.split('::').last
klass_name.sub!(/Generator$/, '')
klass_name.underscore
if klass_name = name.to_s.split('::').last
klass_name.sub!(/Generator$/, '')
klass_name.underscore
end
end
end
end
......@@ -298,35 +304,27 @@ def self.generator_name
# Rails::Generators.options.
#
def self.default_value_for_option(name, options)
config = Rails::Generators.options
generator, base = generator_name.to_sym, base_name.to_sym
if config[generator] && config[generator].key?(name)
config[generator][name]
elsif config[base] && config[base].key?(name)
config[base][name]
elsif config[:rails].key?(name)
config[:rails][name]
else
options[:default]
end
default_for_option(Rails::Generators.options, name, options, options[:default])
end
# Return default aliases for the option name given doing a lookup in
# Rails::Generators.aliases.
#
def self.default_aliases_for_option(name, options)
config = Rails::Generators.aliases
generator, base = generator_name.to_sym, base_name.to_sym
default_for_option(Rails::Generators.aliases, name, options, options[:aliases])
end
if config[generator] && config[generator].key?(name)
config[generator][name]
elsif config[base] && config[base].key?(name)
config[base][name]
# Return default for the option name given doing a lookup in config.
#
def self.default_for_option(config, name, options, default)
if generator_name and c = config[generator_name.to_sym] and c.key?(name)
c[name]
elsif base_name and c = config[base_name.to_sym] and c.key?(name)
c[name]
elsif config[:rails].key?(name)
config[:rails][name]
else
options[:aliases]
default
end
end
......
......@@ -165,13 +165,12 @@ def test_nested_fallbacks_for_generators
def test_developer_options_are_overwriten_by_user_options
Rails::Generators.options[:new_generator] = { :generate => false }
self.class.class_eval <<-end_eval
class NewGenerator < Rails::Generators::Base
class_option :generate, :default => true
end
end_eval
klass = Class.new(Rails::Generators::Base) do
def self.name() 'NewGenerator' end
class_option :generate, :default => true
end
assert_equal false, NewGenerator.class_options[:generate].default
assert_equal false, klass.class_options[:generate].default
end
def test_source_paths_for_not_namespaced_generators
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册