Class Array
In: lib/mcollective/monkey_patches.rb
Parent: Object

a method # that walks an array in groups, pass a block to call the block on each sub array

Methods

Public Instance methods

[Source]

    # File lib/mcollective/monkey_patches.rb, line 21
21:   def in_groups_of(chunk_size, padded_with=nil, &block)
22:     arr = self.clone
23: 
24:     # how many to add
25:     padding = chunk_size - (arr.size % chunk_size)
26: 
27:     # pad at the end
28:     arr.concat([padded_with] * padding) unless padding == chunk_size
29: 
30:     # how many chunks we'll make
31:     count = arr.size / chunk_size
32: 
33:     # make that many arrays
34:     result = []
35:     count.times {|s| result <<  arr[s * chunk_size, chunk_size]}
36: 
37:     if block_given?
38:       result.each_with_index do |a, i|
39:         case block.arity
40:           when 1
41:             yield(a)
42:           when 2
43:             yield(a, (i == result.size - 1))
44:           else
45:             raise "Expected 1 or 2 arguments, got #{block.arity}"
46:         end
47:       end
48:     else
49:       result
50:     end
51:   end

[Validate]