提交 6c5a3bb3 编写于 作者: A artemave 提交者: wycats

all tests pass

上级 ce21ea78
...@@ -232,8 +232,8 @@ def controller_path ...@@ -232,8 +232,8 @@ def controller_path
@controller_path ||= controller && controller.controller_path @controller_path ||= controller && controller.controller_path
end end
def controller_prefix def controller_prefixes
@controller_prefix ||= controller && controller._prefix @controller_prefixes ||= controller && controller._prefixes
end end
ActiveSupport.run_load_hooks(:action_view, self) ActiveSupport.run_load_hooks(:action_view, self)
......
...@@ -119,7 +119,7 @@ def normalize_name(name, prefixes) #:nodoc: ...@@ -119,7 +119,7 @@ def normalize_name(name, prefixes) #:nodoc:
name = name.to_s.gsub(handlers_regexp, '') name = name.to_s.gsub(handlers_regexp, '')
parts = name.split('/') parts = name.split('/')
name = parts.pop name = parts.pop
prx = if not prefixes or prefixes.empty? prx = if prefixes.blank?
[parts.compact.join('/')] [parts.compact.join('/')]
else else
prefixes.map {|prefix| [prefix, *parts].compact.join('/') } prefixes.map {|prefix| [prefix, *parts].compact.join('/') }
......
...@@ -152,7 +152,7 @@ def partial_path(object = @object) ...@@ -152,7 +152,7 @@ def partial_path(object = @object)
object = object.to_model if object.respond_to?(:to_model) object = object.to_model if object.respond_to?(:to_model)
object.class.model_name.partial_path.dup.tap do |partial| object.class.model_name.partial_path.dup.tap do |partial|
path = @view.controller_prefix path = @view.controller_prefixes.first
partial.insert(0, "#{File.dirname(path)}/") if partial.include?(?/) && path.include?(?/) partial.insert(0, "#{File.dirname(path)}/") if partial.include?(?/) && path.include?(?/)
end end
end end
......
...@@ -22,14 +22,14 @@ def render(options) ...@@ -22,14 +22,14 @@ def render(options)
def render_once(options) def render_once(options)
paths, locals = options[:once], options[:locals] || {} paths, locals = options[:once], options[:locals] || {}
layout, keys = options[:layout], locals.keys layout, keys = options[:layout], locals.keys
prefix = options.fetch(:prefix, @view.controller_prefix) prefixes = options.fetch(:prefixes, @view.controller_prefixes)
raise "render :once expects a String or an Array to be given" unless paths raise "render :once expects a String or an Array to be given" unless paths
render_with_layout(layout, locals) do render_with_layout(layout, locals) do
contents = [] contents = []
Array.wrap(paths).each do |path| Array.wrap(paths).each do |path|
template = find_template(path, prefix, false, keys) template = find_template(path, prefixes, false, keys)
contents << render_template(template, nil, locals) if @rendered.add?(template) contents << render_template(template, nil, locals) if @rendered.add?(template)
end end
contents.join("\n") contents.join("\n")
......
...@@ -163,7 +163,7 @@ def refresh(view) ...@@ -163,7 +163,7 @@ def refresh(view)
name = pieces.pop name = pieces.pop
partial = !!name.sub!(/^_/, "") partial = !!name.sub!(/^_/, "")
lookup.disable_cache do lookup.disable_cache do
lookup.find_template(name, pieces.join('/'), partial, @locals) lookup.find_template(name, [ pieces.join('/') ], partial, @locals)
end end
end end
......
...@@ -18,8 +18,8 @@ class RenderOnceController < ActionController::Base ...@@ -18,8 +18,8 @@ class RenderOnceController < ActionController::Base
self.view_paths = [RESOLVER] self.view_paths = [RESOLVER]
def _prefix def _prefixes
"test" %w(test)
end end
def multiple def multiple
...@@ -39,11 +39,11 @@ def with_layout ...@@ -39,11 +39,11 @@ def with_layout
end end
def with_prefix def with_prefix
render :once => "result", :prefix => "other" render :once => "result", :prefixes => %w(other)
end end
def with_nil_prefix def with_nil_prefix
render :once => "test/result", :prefix => nil render :once => "test/result", :prefixes => []
end end
end end
......
...@@ -57,7 +57,7 @@ def test_render_partial_template ...@@ -57,7 +57,7 @@ def test_render_partial_template
end end
def test_render_partial_with_implicit_path def test_render_partial_with_implicit_path
@view.stubs(:controller_prefix).returns("test") @view.stubs(:controller_prefixes).returns(%w(test))
@view.render(Customer.new("david"), :greeting => "hi") @view.render(Customer.new("david"), :greeting => "hi")
wait wait
...@@ -74,7 +74,7 @@ def test_render_collection_template ...@@ -74,7 +74,7 @@ def test_render_collection_template
end end
def test_render_collection_with_implicit_path def test_render_collection_with_implicit_path
@view.stubs(:controller_prefix).returns("test") @view.stubs(:controller_prefixes).returns(%w(test))
@view.render([ Customer.new("david"), Customer.new("mary") ], :greeting => "hi") @view.render([ Customer.new("david"), Customer.new("mary") ], :greeting => "hi")
wait wait
...@@ -83,7 +83,7 @@ def test_render_collection_with_implicit_path ...@@ -83,7 +83,7 @@ def test_render_collection_with_implicit_path
end end
def test_render_collection_template_without_path def test_render_collection_template_without_path
@view.stubs(:controller_prefix).returns("test") @view.stubs(:controller_prefixes).returns(%w(test))
@view.render([ GoodCustomer.new("david"), Customer.new("mary") ], :greeting => "hi") @view.render([ GoodCustomer.new("david"), Customer.new("mary") ], :greeting => "hi")
wait wait
......
...@@ -80,18 +80,18 @@ def teardown ...@@ -80,18 +80,18 @@ def teardown
end end
test "find templates using the given view paths and configured details" do test "find templates using the given view paths and configured details" do
template = @lookup_context.find("hello_world", "test") template = @lookup_context.find("hello_world", %w(test))
assert_equal "Hello world!", template.source assert_equal "Hello world!", template.source
@lookup_context.locale = :da @lookup_context.locale = :da
template = @lookup_context.find("hello_world", "test") template = @lookup_context.find("hello_world", %w(test))
assert_equal "Hey verden", template.source assert_equal "Hey verden", template.source
end end
test "found templates respects given formats if one cannot be found from template or handler" do test "found templates respects given formats if one cannot be found from template or handler" do
ActionView::Template::Handlers::ERB.expects(:default_format).returns(nil) ActionView::Template::Handlers::ERB.expects(:default_format).returns(nil)
@lookup_context.formats = [:text] @lookup_context.formats = [:text]
template = @lookup_context.find("hello_world", "test") template = @lookup_context.find("hello_world", %w(test))
assert_equal [:text], template.formats assert_equal [:text], template.formats
end end
...@@ -137,44 +137,44 @@ def teardown ...@@ -137,44 +137,44 @@ def teardown
test "gives the key forward to the resolver, so it can be used as cache key" do test "gives the key forward to the resolver, so it can be used as cache key" do
@lookup_context.view_paths = ActionView::FixtureResolver.new("test/_foo.erb" => "Foo") @lookup_context.view_paths = ActionView::FixtureResolver.new("test/_foo.erb" => "Foo")
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
# Now we are going to change the template, but it won't change the returned template # Now we are going to change the template, but it won't change the returned template
# since we will hit the cache. # since we will hit the cache.
@lookup_context.view_paths.first.hash["test/_foo.erb"] = "Bar" @lookup_context.view_paths.first.hash["test/_foo.erb"] = "Bar"
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
# This time we will change the locale. The updated template should be picked since # This time we will change the locale. The updated template should be picked since
# lookup_context generated a new key after we changed the locale. # lookup_context generated a new key after we changed the locale.
@lookup_context.locale = :da @lookup_context.locale = :da
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Bar", template.source assert_equal "Bar", template.source
# Now we will change back the locale and it will still pick the old template. # Now we will change back the locale and it will still pick the old template.
# This is expected because lookup_context will reuse the previous key for :en locale. # This is expected because lookup_context will reuse the previous key for :en locale.
@lookup_context.locale = :en @lookup_context.locale = :en
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
# Finally, we can expire the cache. And the expected template will be used. # Finally, we can expire the cache. And the expected template will be used.
@lookup_context.view_paths.first.clear_cache @lookup_context.view_paths.first.clear_cache
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Bar", template.source assert_equal "Bar", template.source
end end
test "can disable the cache on demand" do test "can disable the cache on demand" do
@lookup_context.view_paths = ActionView::FixtureResolver.new("test/_foo.erb" => "Foo") @lookup_context.view_paths = ActionView::FixtureResolver.new("test/_foo.erb" => "Foo")
old_template = @lookup_context.find("foo", "test", true) old_template = @lookup_context.find("foo", %w(test), true)
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal template, old_template assert_equal template, old_template
assert @lookup_context.cache assert @lookup_context.cache
template = @lookup_context.disable_cache do template = @lookup_context.disable_cache do
assert !@lookup_context.cache assert !@lookup_context.cache
@lookup_context.find("foo", "test", true) @lookup_context.find("foo", %w(test), true)
end end
assert @lookup_context.cache assert @lookup_context.cache
...@@ -182,11 +182,11 @@ def teardown ...@@ -182,11 +182,11 @@ def teardown
end end
test "data can be stored in cached templates" do test "data can be stored in cached templates" do
template = @lookup_context.find("hello_world", "test") template = @lookup_context.find("hello_world", %w(test))
template.data["cached"] = "data" template.data["cached"] = "data"
assert_equal "Hello world!", template.source assert_equal "Hello world!", template.source
template = @lookup_context.find("hello_world", "test") template = @lookup_context.find("hello_world", %w(test))
assert_equal "data", template.data["cached"] assert_equal "data", template.data["cached"]
assert_equal "Hello world!", template.source assert_equal "Hello world!", template.source
end end
...@@ -200,54 +200,54 @@ def setup ...@@ -200,54 +200,54 @@ def setup
end end
test "templates are always found in the resolver but timestamp is checked before being compiled" do test "templates are always found in the resolver but timestamp is checked before being compiled" do
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
# Now we are going to change the template, but it won't change the returned template # Now we are going to change the template, but it won't change the returned template
# since the timestamp is the same. # since the timestamp is the same.
@resolver.hash["test/_foo.erb"][0] = "Bar" @resolver.hash["test/_foo.erb"][0] = "Bar"
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
# Now update the timestamp. # Now update the timestamp.
@resolver.hash["test/_foo.erb"][1] = Time.now.utc @resolver.hash["test/_foo.erb"][1] = Time.now.utc
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Bar", template.source assert_equal "Bar", template.source
end end
test "if no template was found in the second lookup, with no cache, raise error" do test "if no template was found in the second lookup, with no cache, raise error" do
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
@resolver.hash.clear @resolver.hash.clear
assert_raise ActionView::MissingTemplate do assert_raise ActionView::MissingTemplate do
@lookup_context.find("foo", "test", true) @lookup_context.find("foo", %w(test), true)
end end
end end
test "if no template was cached in the first lookup, retrieval should work in the second call" do test "if no template was cached in the first lookup, retrieval should work in the second call" do
@resolver.hash.clear @resolver.hash.clear
assert_raise ActionView::MissingTemplate do assert_raise ActionView::MissingTemplate do
@lookup_context.find("foo", "test", true) @lookup_context.find("foo", %w(test), true)
end end
@resolver.hash["test/_foo.erb"] = ["Foo", Time.utc(2000)] @resolver.hash["test/_foo.erb"] = ["Foo", Time.utc(2000)]
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "Foo", template.source assert_equal "Foo", template.source
end end
test "data can be stored as long as template was not updated" do test "data can be stored as long as template was not updated" do
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
template.data["cached"] = "data" template.data["cached"] = "data"
assert_equal "Foo", template.source assert_equal "Foo", template.source
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_equal "data", template.data["cached"] assert_equal "data", template.data["cached"]
assert_equal "Foo", template.source assert_equal "Foo", template.source
@resolver.hash["test/_foo.erb"][1] = Time.now.utc @resolver.hash["test/_foo.erb"][1] = Time.now.utc
template = @lookup_context.find("foo", "test", true) template = @lookup_context.find("foo", %w(test), true)
assert_nil template.data["cached"] assert_nil template.data["cached"]
assert_equal "Foo", template.source assert_equal "Foo", template.source
end end
end end
\ No newline at end of file
...@@ -95,14 +95,14 @@ def test_virtual_path ...@@ -95,14 +95,14 @@ def test_virtual_path
def test_refresh_with_templates def test_refresh_with_templates
@template = new_template("Hello", :virtual_path => "test/foo/bar") @template = new_template("Hello", :virtual_path => "test/foo/bar")
@template.locals = [:key] @template.locals = [:key]
@context.lookup_context.expects(:find_template).with("bar", "test/foo", false, [:key]).returns("template") @context.lookup_context.expects(:find_template).with("bar", %w(test/foo), false, [:key]).returns("template")
assert_equal "template", @template.refresh(@context) assert_equal "template", @template.refresh(@context)
end end
def test_refresh_with_partials def test_refresh_with_partials
@template = new_template("Hello", :virtual_path => "test/_foo") @template = new_template("Hello", :virtual_path => "test/_foo")
@template.locals = [:key] @template.locals = [:key]
@context.lookup_context.expects(:find_template).with("foo", "test", true, [:key]).returns("partial") @context.lookup_context.expects(:find_template).with("foo", %w(test), true, [:key]).returns("partial")
assert_equal "partial", @template.refresh(@context) assert_equal "partial", @template.refresh(@context)
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册