aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/renderer/partial_renderer.rb29
-rw-r--r--actionview/test/template/partial_iteration_test.rb13
2 files changed, 26 insertions, 16 deletions
diff --git a/actionview/lib/action_view/renderer/partial_renderer.rb b/actionview/lib/action_view/renderer/partial_renderer.rb
index 6b3c49aa79..bc0215b6c6 100644
--- a/actionview/lib/action_view/renderer/partial_renderer.rb
+++ b/actionview/lib/action_view/renderer/partial_renderer.rb
@@ -4,9 +4,9 @@ module ActionView
class PartialIteration # :nodoc:
attr_reader :size, :index
- def initialize(size, index)
+ def initialize(size)
@size = size
- @index = index
+ @index = 0
end
def first?
@@ -16,6 +16,10 @@ module ActionView
def last?
index == size - 1
end
+
+ def iterate!
+ @index += 1
+ end
end
# = Action View Partials
@@ -412,16 +416,16 @@ module ActionView
layout = find_template(layout, @template_keys)
end
- index = -1
- @collection.map do |object|
- index += 1
+ partial_interation = PartialIteration.new(@collection.size)
+ locals[iteration] = partial_interation
+ @collection.map do |object|
locals[as] = object
- locals[counter] = index
- locals[iteration] = PartialIteration.new(@collection.size, index)
+ locals[counter] = partial_interation.index
content = template.render(view, locals)
content = layout.render(view, locals) { content } if layout
+ partial_interation.iterate!
content
end
end
@@ -431,17 +435,20 @@ module ActionView
cache = {}
keys = @locals.keys
- index = -1
+ partial_interation = PartialIteration.new(@collection.size)
+
@collection.map do |object|
- index += 1
+ index = partial_interation.index
path, as, counter, iteration = collection_data[index]
locals[as] = object
locals[counter] = index
- locals[iteration] = PartialIteration.new(@collection.size, index)
+ locals[iteration] = partial_interation
template = (cache[path] ||= find_template(path, keys + [as, counter]))
- template.render(view, locals)
+ content = template.render(view, locals)
+ partial_interation.iterate!
+ content
end
end
diff --git a/actionview/test/template/partial_iteration_test.rb b/actionview/test/template/partial_iteration_test.rb
index af0dde96c3..695f9f1bef 100644
--- a/actionview/test/template/partial_iteration_test.rb
+++ b/actionview/test/template/partial_iteration_test.rb
@@ -3,28 +3,31 @@ require 'action_view/renderer/partial_renderer'
class PartialIterationTest < ActiveSupport::TestCase
def test_has_size_and_index
- iteration = ActionView::PartialIteration.new 3, 0
+ iteration = ActionView::PartialIteration.new 3
assert_equal 0, iteration.index, "should be at the first index"
assert_equal 3, iteration.size, "should have the size"
end
def test_first_is_true_when_current_is_at_the_first_index
- iteration = ActionView::PartialIteration.new 3, 0
+ iteration = ActionView::PartialIteration.new 3
assert iteration.first?, "first when current is 0"
end
def test_first_is_false_unless_current_is_at_the_first_index
- iteration = ActionView::PartialIteration.new 3, 1
+ iteration = ActionView::PartialIteration.new 3
+ iteration.iterate!
assert !iteration.first?, "not first when current is 1"
end
def test_last_is_true_when_current_is_at_the_last_index
- iteration = ActionView::PartialIteration.new 3, 2
+ iteration = ActionView::PartialIteration.new 3
+ iteration.iterate!
+ iteration.iterate!
assert iteration.last?, "last when current is 2"
end
def test_last_is_false_unless_current_is_at_the_last_index
- iteration = ActionView::PartialIteration.new 3, 0
+ iteration = ActionView::PartialIteration.new 3
assert !iteration.last?, "not last when current is 0"
end
end