Skip to content

Commit 4001b62

Browse files
committed
Stream CSV. First working commit
1 parent e182893 commit 4001b62

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

app/controllers/distributions_controller.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class DistributionsController < ApplicationController
77
include DateRangeHelper
88
include DistributionHelper
99
include Validatable
10+
include ActionController::Live
1011

1112
before_action :enable_turbo!, only: %i[new show]
1213
skip_before_action :authenticate_user!, only: %i(calendar)
@@ -74,7 +75,11 @@ def index
7475
respond_to do |format|
7576
format.html
7677
format.csv do
77-
send_data Exports::ExportDistributionsCSVService.new(distributions: @distributions.includes(line_items: :item), organization: current_organization, filters: scope_filters).generate_csv, filename: "Distributions-#{Time.zone.today}.csv"
78+
send_stream filename: "Distributions-#{Time.zone.today}.csv" do |stream|
79+
Exports::ExportDistributionsCSVService.new(distributions: @distributions.includes(line_items: :item), organization: current_organization, filters: scope_filters).generate_csv_stream do |row|
80+
stream.write(row)
81+
end
82+
end
7883
end
7984
end
8085
end

app/services/exports/export_distributions_csv_service.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ def generate_csv_data
3939
csv_data
4040
end
4141

42+
def generate_csv_stream
43+
yield CSV.generate_line(base_headers + item_headers)
44+
45+
distributions.find_each(batch_size: 500) do |distribution|
46+
yield CSV.generate_line(build_row_data(distribution))
47+
end
48+
end
49+
4250
private
4351

4452
attr_reader :distributions

0 commit comments

Comments
 (0)