1
0
Fork 0
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:
Marcel Molina 2006-09-02 18:02:36 +00:00
parent 03de0cfe7a
commit 9db407f578
3 changed files with 24 additions and 3 deletions

View file

@ -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

View file

@ -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, '&nbsp;') {|g| p g}
# ["1", "2"]
# ["3", "&nbsp;"]
#
# %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

View file

@ -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