18 lines
426 B
Ruby
18 lines
426 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module CsvBuilders
|
||
|
class Stream < CsvBuilder
|
||
|
def render(max_rows = 100_000)
|
||
|
max_rows_including_header = max_rows + 1
|
||
|
|
||
|
Enumerator.new do |csv|
|
||
|
csv << CSV.generate_line(headers)
|
||
|
|
||
|
each do |object|
|
||
|
csv << CSV.generate_line(row(object))
|
||
|
end
|
||
|
end.lazy.take(max_rows_including_header) # rubocop: disable CodeReuse/ActiveRecord
|
||
|
end
|
||
|
end
|
||
|
end
|