sul-dlss/argo

View on GitHub
app/jobs/set_catalog_record_ids_and_barcodes_csv_job.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

##
# Job to update/add catalog record IDs/barcodes to objects
class SetCatalogRecordIdsAndBarcodesCsvJob < SetCatalogRecordIdsAndBarcodesJob
  ##
  # A job that allows a user to specify a list of druids and a list of catalog record IDs to be associated with these druids
  # @param [Integer] bulk_action_id GlobalID for a BulkAction object
  # @param [Hash] params additional parameters that an Argo job may need
  # @option params [String] :csv_file CSV string

  protected

  def params_from(params)
    update_druids = []
    catalog_record_ids = nil
    barcodes = nil
    refresh = nil
    CSV.parse(params[:csv_file], headers: true).each do |row|
      update_druids << row['Druid']
      if row.header?(CatalogRecordId.label)
        catalog_record_ids ||= []
        refresh ||= []
        catalog_record_ids << catalog_record_id_cols(row)
        refresh << refresh?(row)
      end
      if row.header?('Barcode')
        barcodes ||= []
        barcodes << row['Barcode'].presence
      end
    end
    [update_druids, catalog_record_ids, barcodes, refresh]
  end

  def refresh?(row)
    (row['Refresh']&.downcase != 'false')
  end

  def catalog_record_id_cols(row)
    catalog_record_id_cols = row.headers.flat_map.with_index do |header, index|
      index if header == CatalogRecordId.label
    end.compact
    row.values_at(*catalog_record_id_cols).compact
  end
end