Ruby chunk an enumerable into batches

Ruby
def each_chunk(items, size)
  return enum_for(:each_chunk, items, size) unless block_given?
  raise ArgumentError, 'size must be positive' unless size.is_a?(Integer) && size.positive?

  batch = []
  items.each do |item|
    batch << item
    next unless batch.size == size
    yield batch
    batch = []
  end
  yield batch unless batch.empty?
end