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(':')
|
base, name = name.split(':')
|
||||||
return find_by_namespace(name, base)
|
return find_by_namespace(name, base)
|
||||||
when 0
|
when 0
|
||||||
if base
|
attempts << "#{base}:generators:#{name}" if base
|
||||||
base = base.to_sym
|
|
||||||
attempts << "#{base}:generators:#{name}"
|
|
||||||
attempts << "#{fallbacks[base]}:generators:#{name}" if fallbacks[base]
|
|
||||||
end
|
|
||||||
attempts << "#{name}:generators:#{context}" if context
|
attempts << "#{name}:generators:#{context}" if context
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -179,7 +175,7 @@ module Rails
|
||||||
return klass if klass
|
return klass if klass
|
||||||
end
|
end
|
||||||
|
|
||||||
nil
|
invoke_fallbacks_for(name, base)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Receives a namespace, arguments and the behavior to invoke the generator.
|
# Receives a namespace, arguments and the behavior to invoke the generator.
|
||||||
|
@ -242,6 +238,24 @@ module Rails
|
||||||
end
|
end
|
||||||
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
|
# Receives namespaces in an array and tries to find matching generators
|
||||||
# in the load path. Each path is traversed into directory lookups. For
|
# in the load path. Each path is traversed into directory lookups. For
|
||||||
# example:
|
# example:
|
||||||
|
|
|
@ -116,16 +116,22 @@ class GeneratorsTest < GeneratorsTestCase
|
||||||
rm_rf File.dirname(template)
|
rm_rf File.dirname(template)
|
||||||
end
|
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
|
def test_fallbacks_for_generators_on_find_by_namespace
|
||||||
Rails::Generators.fallbacks[:remarkable] = :test_unit
|
Rails::Generators.fallbacks[:remarkable] = :test_unit
|
||||||
klass = Rails::Generators.find_by_namespace(:plugin, :remarkable)
|
klass = Rails::Generators.find_by_namespace(:plugin, :remarkable)
|
||||||
assert klass
|
assert klass
|
||||||
assert_equal "test_unit:generators:plugin", klass.namespace
|
assert_equal "test_unit:generators:plugin", klass.namespace
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue