Skip to content

Commit 8f70e08

Browse files
authored
Merge pull request #19 from UNC-Libraries/excise-derivative-records
Excise derivative records into addon gem
2 parents 488e4ba + e2e3d1c commit 8f70e08

File tree

9 files changed

+88
-255
lines changed

9 files changed

+88
-255
lines changed

lib/sierra_postgres_utilities.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ module Sierra
1818

1919
require_relative 'sierra_postgres_utilities/search'
2020
require_relative 'sierra_postgres_utilities/record'
21-
22-
require_relative 'sierra_postgres_utilities/derivative_bib'
2321
end
2422

2523
require_relative 'sierra_postgres_utilities/spec_support'

lib/sierra_postgres_utilities/data/records/bib.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,14 @@ def call_number_prefixes
7272

7373
alias cat_date cataloging_date_gmt
7474

75+
# Safe navigation is preferable here as weird circumstances (presumably
76+
# errors) can lead bib records in the db to lack a bib_record_property
77+
# entry. (For record, b100002, we had two record_metadata entries with
78+
# that record_type_code and record_num; one was an ncip record. The
79+
# ncip record had a bib_record_property record, the non-ncip bib did
80+
# not.)
7581
def mat_type
76-
property[:material_code]
82+
property&.material_code
7783
end
7884

7985
# @return [Array<String>] record's location code(s) excepting "multi"
@@ -82,11 +88,11 @@ def location_codes
8288
end
8389

8490
def best_title
85-
property.best_title
91+
property&.best_title
8692
end
8793

8894
def best_author
89-
property.best_author
95+
property&.best_author
9096
end
9197

9298
# Returns record's imprint.

lib/sierra_postgres_utilities/db/query.rb

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,22 @@ def results
1717
# Writes results to file.
1818
#
1919
# Formats: tsv, csv, xlsx (xlsx writable on windows only)
20+
# Headers only need to be specified when they differ from
21+
# the columns of the query results.
2022
#
2123
# @param [String] outfile path for outfile
2224
# - for xlsx only: a relative path is relative to user's windows
2325
# home directory, so using an absolute path may be preferable
2426
# @param [Enumerable<#values>] results (default: Sierra::DB.results)
27+
# @param [Array<String>] headers (default: nil)
2528
# @param [Boolean] include_headers (default: true) write headers to file?
2629
# @param [Symbol] format (default: tsv) format of export: :tsv, :csv,
2730
# :xlsx.
28-
def write_results(outfile, results: self.results,
31+
def write_results(outfile, results: self.results, headers: nil,
2932
include_headers: true, format: :tsv)
3033
Sierra::DB::Query.write_results(outfile,
3134
results: results, format: format,
35+
headers: headers,
3236
include_headers: include_headers)
3337
end
3438

@@ -76,15 +80,11 @@ def self.headers
7680
end
7781

7882
# (see #write_results)
79-
def self.write_results(outfile, results: self.results,
83+
def self.write_results(outfile, results: self.results, headers: nil,
8084
include_headers: true, format: :tsv)
8185
puts 'writing results'
82-
headers =
83-
if include_headers
84-
self.headers
85-
else
86-
''
87-
end
86+
headers ||= self.headers
87+
headers = '' unless include_headers
8888

8989
format = format.to_sym
9090
case format
@@ -159,12 +159,14 @@ def self.write_xlsx(outfile, results, headers)
159159

160160
# Returns cached email "address book" or reads it from 'email.secret'
161161
# yaml file.
162-
def self.emails
162+
def self.emails(file = 'email.secret')
163163
@emails ||=
164164
begin
165-
YAML.load_file('email.secret')
165+
YAML.load_file(file)
166166
rescue Errno::ENOENT
167-
YAML.load_file(File.join(base_dir, '/email.secret'))
167+
YAML.load_file(File.join(Connection.base_dir, file))
168+
rescue TypeError
169+
YAML.load(file)
168170
end
169171
end
170172

@@ -176,12 +178,14 @@ def self.emails=(hsh)
176178
# yaml file.
177179
#
178180
# @return [Hash] smtp server connection details (address, port)
179-
def self.smtp
181+
def self.smtp(file = 'smtp.secret')
180182
@smtp ||=
181183
begin
182-
YAML.load_file('smtp.secret')
184+
YAML.load_file(file)
183185
rescue Errno::ENOENT
184-
YAML.load_file(File.join(base_dir, '/smtp.secret'))
186+
YAML.load_file(File.join(Connection.base_dir, file))
187+
rescue TypeError
188+
YAML.load(file)
185189
end
186190
end
187191

@@ -197,6 +201,7 @@ def self.send_mail(outfile, mail_details, remove_file: false)
197201
Mail.deliver do
198202
from mail_details[:from]
199203
to mail_details[:to]
204+
cc mail_details[:cc]
200205
subject mail_details[:subject]
201206
body mail_details[:body]
202207

lib/sierra_postgres_utilities/derivative_bib.rb

Lines changed: 0 additions & 140 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Sierra
2-
VERSION = '0.3.1'.freeze
2+
VERSION = '0.3.2'.freeze
33
end

spec/data/record/bib_spec.rb

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,6 @@
55
let(:data) { build(:data_b) }
66
let(:bib) { newrec(Sierra::Data::Bib, metadata, data) }
77

8-
let(:property) do
9-
{id: 1076136,
10-
bib_record_id: 420908636160,
11-
best_title: 'Something else : a novel',
12-
bib_level_code: 'm',
13-
material_code: 'a',
14-
publish_year: 1981,
15-
best_title_norm: 'something else a novel',
16-
best_author: 'Fassnidge, Virginia.',
17-
best_author_norm: 'fassnidge virginia'}
18-
end
19-
208
describe '#bnum' do
219
it 'returns rnum (including leading-letter and trailing-a)' do
2210
expect(bib.bnum).to eq(bib.rnum)
@@ -45,7 +33,7 @@
4533

4634
describe '#mat_type' do
4735
it 'returns material type from bib_record_property' do
48-
bib.set_data(:property, property)
36+
bib.set_data(:property, build(:bib_property))
4937
expect(bib.mat_type).to eq('a')
5038
end
5139
end

spec/db_spec.rb

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ module Sierra
1919
Sierra::DB.write_results(io)
2020
expect(io.string[0..1]).to eq('id')
2121
end
22+
23+
it 'uses passed headers when present' do
24+
Sierra::DB.write_results(io, headers: ['ego'])
25+
expect(io.string[0..2]).to eq('ego')
26+
end
2227
end
2328

2429
context 'with include_headers: false' do
@@ -35,23 +40,47 @@ module Sierra
3540
end
3641
end
3742

38-
context 'with format: csv (default)' do
43+
context 'with format: csv' do
3944
it 'writes to a csv' do
4045
Sierra::DB.write_results(io, format: :csv)
4146
expect(io.string.each_line.first.split(',').first).to eq('id')
4247
end
4348
end
4449

45-
context ' with format: xlsx (default)' do
50+
context 'with format: xlsx' do
4651
xit 'writes to an xlsx' do
4752
end
4853
end
54+
55+
context 'when passed an array of objects that respond to :values)' do
56+
it 'writes the values to output as rows' do
57+
Sierra::DB.write_results(io, results: [{a: 'foo', b: 'bar'}],
58+
include_headers: false)
59+
expect(io.string[0..6]).to eq("foo\tbar")
60+
end
61+
end
62+
63+
context 'otherwise' do
64+
it 'writes query results' do
65+
Sierra::DB.write_results(io, include_headers: false)
66+
expect(io.string[0..1]).to match(/[0-9]*/)
67+
end
68+
end
4969
end
5070

5171
describe '.mail_results' do
5272
end
5373

5474
describe '.yield_email' do
75+
it 'returns email address in Query.emails for given key' do
76+
Sierra::DB::Query.emails(StringIO.new("default_email: [email protected]\nother_email: [email protected]"))
77+
expect(Sierra::DB.yield_email('other_email')).to eq('[email protected]')
78+
end
79+
80+
it 'returns email address in Query.emails for "default_email"' do
81+
Sierra::DB::Query.emails(StringIO.new("default_email: [email protected]\nother_email: [email protected]"))
82+
expect(Sierra::DB.yield_email).to eq('[email protected]')
83+
end
5584
end
5685
end
5786
end

0 commit comments

Comments
 (0)