Sha256: 1df7f64eaf9f59b10779fc663323f22e8a6c9329a64ed3e2fb6fc658efa8ddf7

Contents?: true

Size: 1.6 KB

Versions: 13

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Spotlight
  ##
  # Process a CSV upload into new Spotlight::Resource::Upload objects
  class AddUploadsFromCsv < Spotlight::ApplicationJob
    include Spotlight::JobTracking
    with_job_tracking(resource: ->(job) { job.arguments[1] })

    attr_reader :count, :errors

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

    def perform(csv_data, exhibit, _user)
      @count = 0
      @errors = {}

      resources(csv_data, exhibit).each_with_index do |resource, index|
        if resource.save_and_index
          @count += 1
        else
          @errors[index + 1] = resource.errors.full_messages + resource.upload&.errors&.full_messages
        end
      end
    end

    private

    def resources(csv_data, exhibit)
      return to_enum(:resources, csv_data, exhibit) unless block_given?

      encoded_csv(csv_data).each do |row|
        url = row.delete('url')
        next if url.blank?

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

        yield resource
      end
    end

    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

13 entries across 13 versions & 1 rubygems

Version Path
blacklight-spotlight-4.2.0 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.1.2 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.1.1 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.1.0 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.0.3 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.0.2 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.0.1 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-4.0.0 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.6.0.beta10 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.6.0.beta9 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.6.0.beta8 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.6.0.beta7 app/jobs/spotlight/add_uploads_from_csv.rb
blacklight-spotlight-3.6.0.beta6 app/jobs/spotlight/add_uploads_from_csv.rb