mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Allow nested and multiple fallbacks for generators.
This commit is contained in:
parent
10fd021789
commit
edda0bfe76
2 changed files with 32 additions and 12 deletions
|
@ -162,11 +162,7 @@ module Rails
|
|||
base, name = name.split(':')
|
||||
return find_by_namespace(name, base)
|
||||
when 0
|
||||
if base
|
||||
base = base.to_sym
|
||||
attempts << "#{base}:generators:#{name}"
|
||||
attempts << "#{fallbacks[base]}:generators:#{name}" if fallbacks[base]
|
||||
end
|
||||
attempts << "#{base}:generators:#{name}" if base
|
||||
attempts << "#{name}:generators:#{context}" if context
|
||||
end
|
||||
|
||||
|
@ -179,7 +175,7 @@ module Rails
|
|||
return klass if klass
|
||||
end
|
||||
|
||||
nil
|
||||
invoke_fallbacks_for(name, base)
|
||||
end
|
||||
|
||||
# Receives a namespace, arguments and the behavior to invoke the generator.
|
||||
|
@ -242,6 +238,24 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
# Try callbacks for the given base.
|
||||
#
|
||||
def self.invoke_fallbacks_for(name, base)
|
||||
return nil unless base && fallbacks[base.to_sym]
|
||||
|
||||
invoked_fallbacks = []
|
||||
|
||||
Array(fallbacks[base.to_sym]).each do |fallback|
|
||||
next if invoked_fallbacks.include?(fallback)
|
||||
invoked_fallbacks << fallback
|
||||
|
||||
klass = find_by_namespace(name, fallback)
|
||||
return klass if klass
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
# Receives namespaces in an array and tries to find matching generators
|
||||
# in the load path. Each path is traversed into directory lookups. For
|
||||
# example:
|
||||
|
|
|
@ -116,16 +116,22 @@ class GeneratorsTest < GeneratorsTestCase
|
|||
rm_rf File.dirname(template)
|
||||
end
|
||||
|
||||
def test_fallbacks_for_generators_on_invoke
|
||||
Rails::Generators.fallbacks[:shoulda] = :test_unit
|
||||
TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {})
|
||||
Rails::Generators.invoke "shoulda:model", ["Account"]
|
||||
end
|
||||
|
||||
def test_fallbacks_for_generators_on_find_by_namespace
|
||||
Rails::Generators.fallbacks[:remarkable] = :test_unit
|
||||
klass = Rails::Generators.find_by_namespace(:plugin, :remarkable)
|
||||
assert klass
|
||||
assert_equal "test_unit:generators:plugin", klass.namespace
|
||||
end
|
||||
|
||||
def test_fallbacks_for_generators_on_invoke
|
||||
Rails::Generators.fallbacks[:shoulda] = :test_unit
|
||||
TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {})
|
||||
Rails::Generators.invoke "shoulda:model", ["Account"]
|
||||
end
|
||||
|
||||
def test_nested_fallbacks_for_generators
|
||||
Rails::Generators.fallbacks[:super_shoulda] = :shoulda
|
||||
TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {})
|
||||
Rails::Generators.invoke "super_shoulda:model", ["Account"]
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue