diff options
Diffstat (limited to 'activesupport/lib/active_support/core_ext/array.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/array.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/array.rb b/activesupport/lib/active_support/core_ext/array.rb index ddf2a369c1..897d73866c 100644 --- a/activesupport/lib/active_support/core_ext/array.rb +++ b/activesupport/lib/active_support/core_ext/array.rb @@ -2,4 +2,20 @@ require File.dirname(__FILE__) + '/array/conversions' class Array #:nodoc: include ActiveSupport::CoreExtensions::Array::Conversions + + # Iterate over an array in groups of a certain size, padding any remaining + # slots with specified value (<tt>nil</tt> by default). + # + # E.g. + # + # %w(1 2 3 4 5 6 7).in_groups_of(3) {|g| p g} + # ["1", "2", "3"] + # ["4", "5", "6"] + # ["7", nil, nil] + def in_groups_of(number, fill_with = nil, &block) + require 'enumerator' + collection = dup + collection << fill_with until collection.size.modulo(number).zero? + collection.each_slice(number, &block) + end end |