module Enumerable
  def chunk(chunk_size, new_array = [], *block)
    new_array << ((self.size < chunk_size) ? self : self.inject([]) { |a,b| (a.size == chunk_size) ? (new_array << a.compact;[b]) : (a << b) })
    block_given? ? new_array.each { |a| yield a } : new_array
  end
end

Also available in: HTML TXT