Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-14 03:10:09 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-14 03:10:09 +0300
commit8aea332821a78e83ce93f5b3bac7de5f95a3c7b8 (patch)
tree722cb345de067f3b62bbe0f849178c74dec657eb /app/services/export_csv
parent4f4b85e1c7f7a5518f12a6981709cf3ef3f0f653 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/export_csv')
-rw-r--r--app/services/export_csv/base_service.rb18
-rw-r--r--app/services/export_csv/map_export_fields_service.rb40
2 files changed, 53 insertions, 5 deletions
diff --git a/app/services/export_csv/base_service.rb b/app/services/export_csv/base_service.rb
index 98ab33d4c33..84d44fd75fc 100644
--- a/app/services/export_csv/base_service.rb
+++ b/app/services/export_csv/base_service.rb
@@ -5,9 +5,10 @@ module ExportCsv
# Target attachment size before base64 encoding
TARGET_FILESIZE = 15.megabytes
- def initialize(relation, resource_parent)
+ def initialize(relation, resource_parent, fields = [])
@objects = relation
@resource_parent = resource_parent
+ @fields = fields
end
def csv_data
@@ -18,18 +19,25 @@ module ExportCsv
raise NotImplementedError
end
+ def invalid_fields
+ ::ExportCsv::MapExportFieldsService.new(fields, header_to_value_hash).invalid_fields
+ end
+
private
- attr_reader :resource_parent, :objects
+ attr_reader :resource_parent, :objects, :fields
# rubocop: disable CodeReuse/ActiveRecord
def csv_builder
- @csv_builder ||=
+ @csv_builder ||= begin
+ data_hash = MapExportFieldsService.new(fields, header_to_value_hash).execute
+
if preload_associations_in_batches?
- CsvBuilder.new(objects, header_to_value_hash, associations_to_preload)
+ CsvBuilder.new(objects, data_hash, associations_to_preload)
else
- CsvBuilder.new(objects.preload(associations_to_preload), header_to_value_hash, [])
+ CsvBuilder.new(objects.preload(associations_to_preload), data_hash, [])
end
+ end
end
# rubocop: enable CodeReuse/ActiveRecord
diff --git a/app/services/export_csv/map_export_fields_service.rb b/app/services/export_csv/map_export_fields_service.rb
new file mode 100644
index 00000000000..d4f46c65328
--- /dev/null
+++ b/app/services/export_csv/map_export_fields_service.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+module ExportCsv
+ class MapExportFieldsService < BaseService
+ attr_reader :fields, :data
+
+ def initialize(fields, data)
+ @fields = fields
+ @data = data
+ end
+
+ def execute
+ return data if fields.empty?
+
+ selected_fields_to_hash
+ end
+
+ def invalid_fields
+ fields.reject { |field| permitted_field?(field) }
+ end
+
+ private
+
+ def selected_fields_to_hash
+ data.select { |key| requested_field?(key) }
+ end
+
+ def requested_field?(field)
+ field.downcase.in?(fields.map(&:downcase))
+ end
+
+ def permitted_field?(field)
+ field.downcase.in?(keys.map(&:downcase))
+ end
+
+ def keys
+ data.keys
+ end
+ end
+end