Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Don't pad remaining places with in_groups_of if specified padding val…

…ue is false. [Marcel Molina Jr.]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4900 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 9db407f5786d96373d1534faa79c3220685b8ae0 1 parent 03de0cf
Marcel Molina authored
View
2  activesupport/CHANGELOG
@@ -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
13 activesupport/lib/active_support/core_ext/array/grouping.rb
@@ -3,7 +3,8 @@ module CoreExtensions #: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 Grouping
# ["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
12 activesupport/test/core_ext/array_ext_test.rb
@@ -74,11 +74,21 @@ def test_group_by_with_padding
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
Please sign in to comment.
Something went wrong with that request. Please try again.