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