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?