debian-mirror-gitlab/app/services/export_csv/base_service.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

57 lines
1.3 KiB
Ruby
Raw Normal View History

2023-04-23 21:23:45 +05:30
# frozen_string_literal: true
module ExportCsv
class BaseService
# Target attachment size before base64 encoding
TARGET_FILESIZE = 15.megabytes
def initialize(relation, resource_parent, 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