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"