lib/geoblacklight_admin/tasks/distributions.rake in geoblacklight_admin-0.6.1 vs lib/geoblacklight_admin/tasks/distributions.rake in geoblacklight_admin-0.6.2
- old
+ new
@@ -16,12 +16,49 @@
friendlier_id: distribution[0],
reference_type_id: ReferenceType.find_by(name: distribution[1]).id,
url: distribution[2],
label: distribution[3]
)
+ rescue ActiveRecord::RecordInvalid => e
+ if !distribution[2].nil? && distribution[2].is_a?(Hash)
+ puts "Distribution rescued and skipped: #{distribution.inspect}"
+ else
+ puts "RecordInvalid processing distribution: #{distribution[0]} - #{e.inspect}"
+ end
+ rescue TypeError => e
+ puts "TypeError processing distribution: #{distribution[0]} - #{e.inspect}"
+ puts "Distribution: #{distribution.inspect}"
+
+ # Fix for #<TypeError: can't cast Hash>
+ # These are download links that are not already in an array
+ # ex. "{\"http://schema.org/url\":\"https://datacore.iu.edu/concern/data_sets/hx11xf65s\",\"http://schema.org/downloadUrl\":{\"label\":\"PDF\",\"url\":\"https://datacore.iu.edu/downloads/ms35t9074\"}}"
+ if !distribution[2].nil? && distribution[2].is_a?(Hash)
+ DocumentDistribution.find_or_create_by!(
+ friendlier_id: distribution[0],
+ reference_type_id: ReferenceType.find_by(name: distribution[1]).id,
+ url: distribution[2][:url],
+ label: distribution[2][:label]
+ )
+ puts "Distribution rescued and migrated: #{distribution.inspect}"
+ elsif distribution[2].nil? && distribution[2].is_a?(Array)
+ distribution[2].each do |download|
+ if download.is_a?(Hash) && download[:url].present? && download[:label].present?
+ DocumentDistribution.find_or_create_by!(
+ friendlier_id: distribution[0],
+ reference_type_id: ReferenceType.find_by(name: distribution[1]).id,
+ url: download[:url],
+ label: download[:label]
+ )
+ end
+ end
+ puts "Distribution array rescued and migrated: #{distribution.inspect}"
+ else
+ puts "Distribution not migrated: #{distribution.inspect}"
+ end
+ rescue => e
+ puts "Error processing distribution: #{distribution[0]} - #{e.inspect}"
+ puts "Distribution: #{distribution.inspect}"
end
- rescue => e
- puts "\nError processing distributions for document: #{document.friendlier_id} - #{e.inspect}\n"
end
total_documents_processed += documents.size
puts "Processed #{documents.size} documents in this batch, total processed: #{total_documents_processed}"
end
puts "--- Migration End ---\n"