sul-dlss/argo

View on GitHub
app/services/import_tags_csv_converter.rb

Summary

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

# Convert CSV to a hash
class ImportTagsCsvConverter
  # @param [String] csv_string CSV string
  # @return [Hash] a hash of druids and associated tags to import
  def self.convert(csv_string:)
    new(csv_string:).convert
  end

  # @param [String] csv_string CSV string
  def initialize(csv_string:)
    @csv_string = csv_string
  end

  # @return [Hash<String,Array<String>>] a hash of druids and tag arrays to import
  def convert
    # NOTE: Enumerable#filter_map was added in Ruby 2.7
    CSV.parse(csv_string).filter_map do |druid, *tags|
      [druid, tags.compact] if druid.present?
    end.to_h
  end

  private

  attr_reader :csv_string
end