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