mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Don't pad remaining places with in_groups_of if specified padding value is false. [Marcel Molina Jr.]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4900 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
03de0cfe7a
commit
9db407f578
3 changed files with 24 additions and 3 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Don't pad remaining places with in_groups_of if specified padding value is false. [Marcel Molina Jr.]
|
||||
|
||||
* Fix cases where empty xml nodes weren't being translated to nil in Hash.create_from_xml [Rick Olson]
|
||||
|
||||
<written-on type="date"></written-on> # => { :type => 'date' } # WRONG
|
||||
|
|
|
@ -3,7 +3,8 @@ module ActiveSupport #:nodoc:
|
|||
module Array #:nodoc:
|
||||
module Grouping
|
||||
# Iterate over an array in groups of a certain size, padding any remaining
|
||||
# slots with specified value (<tt>nil</tt> by default).
|
||||
# slots with specified value (<tt>nil</tt> by default) unless it is
|
||||
# <tt>false</tt>.
|
||||
#
|
||||
# E.g.
|
||||
#
|
||||
|
@ -11,10 +12,18 @@ module ActiveSupport #:nodoc:
|
|||
# ["1", "2", "3"]
|
||||
# ["4", "5", "6"]
|
||||
# ["7", nil, nil]
|
||||
#
|
||||
# %w(1 2 3).in_groups_of(2, ' ') {|g| p g}
|
||||
# ["1", "2"]
|
||||
# ["3", " "]
|
||||
#
|
||||
# %w(1 2 3).in_groups_of(2, false) {|g| p g}
|
||||
# ["1", "2"]
|
||||
# ["3"]
|
||||
def in_groups_of(number, fill_with = nil, &block)
|
||||
require 'enumerator'
|
||||
collection = dup
|
||||
collection << fill_with until collection.size.modulo(number).zero?
|
||||
collection << fill_with until collection.size.modulo(number).zero? unless fill_with == false
|
||||
grouped_collection = [] unless block_given?
|
||||
collection.each_slice(number) do |group|
|
||||
block_given? ? yield(group) : grouped_collection << group
|
||||
|
|
|
@ -74,11 +74,21 @@ class ArrayExtGroupingTests < Test::Unit::TestCase
|
|||
def test_group_by_pads_with_specified_values
|
||||
groups = []
|
||||
|
||||
('a'..'g').to_a.in_groups_of(3, 'foo') do |group|
|
||||
groups << group
|
||||
end
|
||||
|
||||
assert_equal [%w(a b c), %w(d e f), ['g', 'foo', 'foo']], groups
|
||||
end
|
||||
|
||||
def test_group_without_padding
|
||||
groups = []
|
||||
|
||||
('a'..'g').to_a.in_groups_of(3, false) do |group|
|
||||
groups << group
|
||||
end
|
||||
|
||||
assert_equal [%w(a b c), %w(d e f), ['g', false, false]], groups
|
||||
assert_equal [%w(a b c), %w(d e f), ['g']], groups
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue