app/models/bulkrax/csv_entry.rb in bulkrax-1.0.1 vs app/models/bulkrax/csv_entry.rb in bulkrax-1.0.2

- old
+ new

@@ -95,13 +95,21 @@ def build_mapping_metadata mapping.each do |key, value| next if Bulkrax.reserved_properties.include?(key) && !field_supported?(key) next if key == "model" - next unless hyrax_record.respond_to?(key.to_s) - data = hyrax_record.send(key.to_s) - if data.is_a?(ActiveTriples::Relation) + + object_key = key if value.key?('object') + next unless hyrax_record.respond_to?(key.to_s) || object_key.present? + + data = object_key.present? ? hyrax_record.send(value['object']) : hyrax_record.send(key.to_s) + if object_key.present? + next self.parsed_metadata[key] = '' if data.empty? + data = data.first if data.is_a?(ActiveTriples::Relation) + + object_metadata(data, object_key) + elsif data.is_a?(ActiveTriples::Relation) self.parsed_metadata[key] = data.map { |d| prepare_export_data(d) }.join('; ').to_s unless value[:excluded] else self.parsed_metadata[key] = prepare_export_data(data) end end @@ -111,9 +119,35 @@ if datum.is_a?(ActiveTriples::Resource) datum.to_uri.to_s else datum end + end + + def object_metadata(data, object_key) + data = convert_to_hash(data) + + data.each_with_index do |obj, index| + next unless obj[object_key] + + next self.parsed_metadata["#{object_key}_#{index + 1}"] = prepare_export_data(obj[object_key]) unless obj[object_key].is_a?(Array) + + obj[object_key].each_with_index do |_nested_item, nested_index| + self.parsed_metadata["#{object_key}_#{index + 1}_#{nested_index + 1}"] = prepare_export_data(obj[object_key][nested_index]) + end + end + end + + def convert_to_hash(data) + # converts data from `'[{}]'` to `[{}]` + gsub_data = data.gsub(/\[{/, '{') + .gsub(/}\]/, '}') + .gsub('=>', ':') + .gsub(/},\s?{/, "}},{{") + .split("},{") + gsub_data = [gsub_data] if gsub_data.is_a?(String) + + return gsub_data.map { |d| JSON.parse(d) } 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