app/models/bulkrax/csv_entry.rb in bulkrax-3.1.2 vs app/models/bulkrax/csv_entry.rb in bulkrax-3.2.0
- old
+ new
@@ -91,21 +91,35 @@
path_to_file(f.tr(' ', '_'))
end.compact
end
def build_export_metadata
- # make_round_trippable
self.parsed_metadata = {}
- self.parsed_metadata['id'] = hyrax_record.id
- self.parsed_metadata[source_identifier] = hyrax_record.send(work_identifier)
- self.parsed_metadata['model'] = hyrax_record.has_model.first
+
+ build_system_metadata
+ build_files_metadata unless hyrax_record.is_a?(Collection)
build_relationship_metadata
build_mapping_metadata
- build_files unless hyrax_record.is_a?(Collection)
+
self.parsed_metadata
end
+ # Metadata required by Bulkrax for round-tripping
+ def build_system_metadata
+ self.parsed_metadata['id'] = hyrax_record.id
+ self.parsed_metadata[source_identifier] = hyrax_record.send(work_identifier)
+ self.parsed_metadata[key_for_export('model')] = hyrax_record.has_model.first
+ end
+
+ def build_files_metadata
+ file_mapping = key_for_export('file')
+ file_sets = hyrax_record.file_set? ? Array.wrap(hyrax_record) : hyrax_record.file_sets
+ filenames = file_sets.map { |fs| filename(fs).to_s if filename(fs).present? }.compact
+
+ handle_join_on_export(file_mapping, filenames, mapping['file']&.[]('join')&.present?)
+ end
+
def build_relationship_metadata
# Includes all relationship methods for all exportable record types (works, Collections, FileSets)
relationship_methods = {
related_parents_parsed_mapping => %i[member_of_collection_ids member_of_work_ids in_work_ids],
related_children_parsed_mapping => %i[member_collection_ids member_work_ids file_set_ids]
@@ -125,16 +139,14 @@
end
end
def build_mapping_metadata
mapping.each do |key, value|
- next if Bulkrax.reserved_properties.include?(key) && !field_supported?(key)
- next if key == "model"
- # relationships handled by #build_relationship_metadata
- next if [related_parents_parsed_mapping, related_children_parsed_mapping].include?(key)
- next if key == 'file' # handled by #build_files
+ # these keys are handled by other methods
+ next if ['model', 'file', related_parents_parsed_mapping, related_children_parsed_mapping].include?(key)
next if value['excluded']
+ next if Bulkrax.reserved_properties.include?(key) && !field_supported?(key)
object_key = key if value.key?('object')
next unless hyrax_record.respond_to?(key.to_s) || object_key.present?
if object_key.present?
@@ -203,18 +215,10 @@
end
end
end
end
- def build_files
- file_mapping = mapping['file']&.[]('from')&.first || 'file'
- file_sets = hyrax_record.file_set? ? Array.wrap(hyrax_record) : hyrax_record.file_sets
-
- filenames = file_sets.map { |fs| filename(fs).to_s if filename(fs).present? }.compact
- handle_join_on_export(file_mapping, filenames, mapping['file']&.[]('join')&.present?)
- end
-
def handle_join_on_export(key, values, join)
if join
parsed_metadata[key] = values.join(' | ') # TODO: make split char dynamic
else
values.each_with_index do |value, i|
@@ -222,20 +226,10 @@
end
parsed_metadata.delete(key)
end
end
- # In order for the existing exported hyrax_record, to be updated by a re-import
- # we need a unique value in system_identifier
- # add the existing hyrax_record id to system_identifier
- def make_round_trippable
- values = hyrax_record.send(work_identifier.to_s).to_a
- values << hyrax_record.id
- hyrax_record.send("#{work_identifier}=", values)
- hyrax_record.save
- end
-
def record
@record ||= raw_metadata
end
def self.matcher_class
@@ -261,10 +255,11 @@
@collection_identifiers = identifiers.compact.presence || []
end
def collections_created?
- collection_identifiers.length == self.collection_ids.length
+ # TODO: look into if this method is still needed after new relationships code
+ true
end
def find_collection_ids
return self.collection_ids if collections_created?
if collection_identifiers.present?