Sha256: c60678e104408bd545ac9468c399cf0c6b3a7eb5f5376e7f7e7a81d7edd21fad

Contents?: true

Size: 1023 Bytes

Versions: 8

Compression:

Stored size: 1023 Bytes

Contents

# frozen_string_literal: true

module Spotlight
  ##
  # Process a CSV upload into new Spotlight::Resource::Upload objects
  class AddUploadsFromCSV < ActiveJob::Base
    queue_as :default

    after_perform do |job|
      csv_data, exhibit, user = job.arguments
      Spotlight::IndexingCompleteMailer.documents_indexed(csv_data, exhibit, user).deliver_now
    end

    def perform(csv_data, exhibit, _user)
      encoded_csv(csv_data).each do |row|
        url = row.delete('url')
        next unless url.present?

        resource = Spotlight::Resources::Upload.new(
          data: row,
          exhibit: exhibit
        )
        resource.build_upload(remote_image_url: url) unless url == '~'
        resource.save_and_index
      end
    end

    private

    def encoded_csv(csv)
      csv.map do |row|
        row.map do |label, column|
          [label, column.encode('UTF-8', invalid: :replace, undef: :replace, replace: "\uFFFD")] if column.present?
        end.compact.to_h
      end.compact
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
blacklight-spotlight-3.0.0.alpha.10 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.9 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.8 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.7 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.6 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.5 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.4 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.0.0.alpha.3 app/jobs/spotlight/add_uploads_from_csv.rb