1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# frozen_string_literal: true
module ExportCsv
class BaseService
# Target attachment size before base64 encoding
TARGET_FILESIZE = 15.megabytes
def initialize(relation, resource_parent = nil, fields = [])
@objects = relation
@resource_parent = resource_parent
@fields = fields
end
def csv_data
csv_builder.render(TARGET_FILESIZE)
end
def email(user)
raise NotImplementedError
end
def invalid_fields
::ExportCsv::MapExportFieldsService.new(fields, header_to_value_hash).invalid_fields
end
private
attr_reader :resource_parent, :objects, :fields
# rubocop: disable CodeReuse/ActiveRecord
def csv_builder
@csv_builder ||= begin
data_hash = MapExportFieldsService.new(fields, header_to_value_hash).execute
if preload_associations_in_batches?
CsvBuilder.new(objects, data_hash, associations_to_preload)
else
CsvBuilder.new(objects.preload(associations_to_preload), data_hash, [])
end
end
end
# rubocop: enable CodeReuse/ActiveRecord
def associations_to_preload
[]
end
def header_to_value_hash
raise NotImplementedError
end
def preload_associations_in_batches?
false
end
end
end
|