Skip to content

Commit

Permalink
Write errors to separate columns
Browse files Browse the repository at this point in the history
  • Loading branch information
dmolesUC committed Apr 5, 2023
1 parent 4e1452d commit c3991dd
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 3 deletions.
38 changes: 35 additions & 3 deletions lib/berkeley_library/holdings/xlsx_writer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ class XLSXWriter
COL_NRLF = 'NRLF'.freeze
COL_SRLF = 'SRLF'.freeze
COL_OTHER_UC = 'Other UC'.freeze
COL_WC_ERROR = 'WorldCat Error'.freeze

COL_HATHI_TRUST = 'Hathi Trust'.freeze
COL_HATHI_TRUST_ERROR = "#{COL_HATHI_TRUST} Error".freeze

V_NRLF = 'nrlf'.freeze
V_SRLF = 'srlf'.freeze
Expand All @@ -28,13 +31,22 @@ def initialize(ss, rlf: true, uc: true, hathi_trust: true)

def <<(result)
r_index = row_index_for(result.oclc_number)
write_wc_cols(r_index, result) if rlf || uc
write_ht_cols(r_index, result) if hathi_trust
end

private

def write_wc_cols(r_index, result)
write_wc_error(r_index, result)
write_rlf(r_index, result) if rlf
write_uc(r_index, result) if uc
write_hathi(r_index, result) if hathi_trust
# TODO: should we do anything with wc_error and ht_error?
end

private
def write_ht_cols(r_index, result)
write_ht_error(r_index, result)
write_hathi(r_index, result)
end

def ensure_columns!
if rlf
Expand Down Expand Up @@ -69,6 +81,18 @@ def write_hathi(r_index, result)
ss.set_value_at(r_index, ht_col_index, ht_record_url)
end

def write_wc_error(r_index, result)
return unless (wc_error = result.wc_error)

ss.set_value_at(r_index, wc_err_col_index, wc_error)
end

def write_ht_error(r_index, result)
return unless (ht_error = result.ht_error)

ss.set_value_at(r_index, ht_err_col_index, ht_error)
end

def oclc_col_index
@oclc_col_index ||= ss.find_column_index_by_header!(OCLC_COL_HEADER)
end
Expand All @@ -85,10 +109,18 @@ def uc_col_index
@uc_col_index ||= ss.ensure_column!(COL_OTHER_UC)
end

def wc_err_col_index
@wc_err_col_index ||= ss.ensure_column!(COL_WC_ERROR)
end

def ht_col_index
@ht_col_index ||= ss.ensure_column!(COL_HATHI_TRUST)
end

def ht_err_col_index
@ht_err_col_index ||= ss.ensure_column!(COL_HATHI_TRUST_ERROR)
end

def row_index_by_oclc_number
# Start at 1 to skip header row
@row_index_by_oclc_number ||= (1...ss.row_count).each_with_object({}) do |r_index, r_indices|
Expand Down
60 changes: 60 additions & 0 deletions spec/berkeley_library/holdings/xlsx_writer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,66 @@ module Holdings
end
end

it 'writes a result with WorldCat errors' do
err_msg = '500 Internal Server Error'

result = HoldingsResult.new(
oclc_number,
wc_error: err_msg,
ht_record_url: record_url
)

expected = {
'OCLC Number' => oclc_number.to_i,
'NRLF' => nil,
'SRLF' => nil,
'Other UC' => nil,
'Hathi Trust' => record_url,
'WorldCat Error' => err_msg,
# check that we preserve existing values
'MMSID' => ss.value_at(r_index, c_index_mmsid)
}

writer = XLSXWriter.new(ss)
writer << result

expected.each do |col_header, v_expected|
c_index = ss.find_column_index_by_header!(col_header)
v_actual = ss.value_at(r_index, c_index)
expect(v_actual).to eq(v_expected)
end
end

it 'writes a result with HathiTrust errors' do
err_msg = '500 Internal Server Error'

result = HoldingsResult.new(
oclc_number,
wc_symbols: %w[CLU CUY ZAP ZAS],
ht_error: err_msg
)

expected = {
'OCLC Number' => oclc_number.to_i,
'NRLF' => 'nrlf',
'SRLF' => 'srlf',
'Other UC' => 'CLU,CUY',
'Hathi Trust' => nil,
'Hathi Trust Error' => err_msg,
# check that we preserve existing values
'MMSID' => ss.value_at(r_index, c_index_mmsid)
}

writer = XLSXWriter.new(ss)
writer << result

expected.each do |col_header, v_expected|
c_index = ss.find_column_index_by_header!(col_header)
v_actual = ss.value_at(r_index, c_index)
expect(v_actual).to eq(v_expected)
end
end

it 'writes requested columns even if empty' do
result = HoldingsResult.new(oclc_number, ht_record_url: record_url)
writer = XLSXWriter.new(ss)
Expand Down

0 comments on commit c3991dd

Please sign in to comment.