mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Build only one PartialIteration object for loop
This commit is contained in:
parent
9830ebbeaf
commit
9290fc5ce2
2 changed files with 26 additions and 16 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue