pennmarc 1.0.5 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/pennmarc/helpers/access.rb +22 -6
- data/lib/pennmarc/helpers/language.rb +3 -3
- data/lib/pennmarc/helpers/link.rb +45 -2
- data/lib/pennmarc/helpers/title.rb +92 -20
- data/lib/pennmarc/version.rb +1 -1
- data/spec/lib/pennmarc/helpers/access_spec.rb +29 -9
- data/spec/lib/pennmarc/helpers/link_spec.rb +37 -0
- data/spec/lib/pennmarc/helpers/title_spec.rb +80 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11dd403cd5a0f964db340be6258d2cc510c99ccc0fc6d43a65b236853cb5b87c
|
4
|
+
data.tar.gz: 85eed79f3e637121cce8be8b0f0509d26e3fa9b6283b7f5bc48b0b321259e3f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90a59eaf167d985b596663d6b8d1eab0c3263724da550babfb28fa253df326b07b72bbb5aac1cf1d4150efd2eaecce84686b2de9e99801ff178bbfabc982b765
|
7
|
+
data.tar.gz: 5e0a4fdc1518af2b3a52bc137f76a30430d025f58f5cd46b9d0347a7a6a08f901e72e45917cc9a52d0352a6dbb0213725fd5a6e22650cfedb00d534fb72b44f2
|
data/README.md
CHANGED
@@ -71,7 +71,7 @@ rspec
|
|
71
71
|
|
72
72
|
## Publishing the Gem
|
73
73
|
|
74
|
-
1. Update the
|
74
|
+
1. Update the `VERSION` constant in `lib/pennmarc/version.rb`.
|
75
75
|
2. Run `gem build pennmarc.gemspec` with the latest code
|
76
76
|
3. Run `gem push pennmarc-{version number here}.gem`(e.g. `gem push pennmarc-1.0.0.gem`) to push to RubyGems. You will need access and MFA setup with RubyGems.
|
77
77
|
|
@@ -5,20 +5,22 @@ module PennMARC
|
|
5
5
|
class Access < Helper
|
6
6
|
ONLINE = 'Online'
|
7
7
|
AT_THE_LIBRARY = 'At the library'
|
8
|
+
ELEC_AVAILABILITY_TAG = 'AVE'
|
9
|
+
PHYS_AVAILABILITY_TAG = 'AVA'
|
8
10
|
|
9
11
|
class << self
|
10
|
-
# Based
|
11
|
-
# electronic access or has physical
|
12
|
-
# library", but has a link to a finding aid in the 856 field (matching certain criteria), also add 'Online' as
|
13
|
-
# access method.
|
12
|
+
# Based on enhanced metadata fields added by Alma publishing process or API, determine if the record has
|
13
|
+
# electronic access or has physical holdings, and is therefore "Online" or "At the library". If a record is "At
|
14
|
+
# the library", but has a link to a finding aid in the 856 field (matching certain criteria), also add 'Online' as
|
15
|
+
# an access method.
|
14
16
|
# @todo What if none of these criteria match? Should we include "At the library" by default? Records with no value
|
15
17
|
# in this field would be lost if the user selects a facet value.
|
16
18
|
# @param [MARC::Record] record
|
17
19
|
# @return [Array]
|
18
20
|
def facet(record)
|
19
21
|
acc = record.filter_map do |field|
|
20
|
-
next AT_THE_LIBRARY if field
|
21
|
-
next ONLINE if field
|
22
|
+
next AT_THE_LIBRARY if physical_holding_tag?(field)
|
23
|
+
next ONLINE if electronic_holding_tag?(field)
|
22
24
|
end
|
23
25
|
|
24
26
|
return acc if acc.size == 2 # return early if all values are already present
|
@@ -29,6 +31,20 @@ module PennMARC
|
|
29
31
|
|
30
32
|
private
|
31
33
|
|
34
|
+
# Does the record have added electronic holding info?
|
35
|
+
# @param [MARC::Field] field
|
36
|
+
# @return [Boolean]
|
37
|
+
def electronic_holding_tag?(field)
|
38
|
+
field.tag.in? [EnrichedMarc::TAG_ELECTRONIC_INVENTORY, ELEC_AVAILABILITY_TAG]
|
39
|
+
end
|
40
|
+
|
41
|
+
# Does the record have added physical holding info?
|
42
|
+
# @param [MARC::Field] field
|
43
|
+
# @return [Boolean]
|
44
|
+
def physical_holding_tag?(field)
|
45
|
+
field.tag.in? [EnrichedMarc::TAG_HOLDING, PHYS_AVAILABILITY_TAG]
|
46
|
+
end
|
47
|
+
|
32
48
|
# Check if a record contains an 856 entry for an online finding aid, meeting these criteria:
|
33
49
|
# 1. Indicator 1 is 4 (HTTP resource)
|
34
50
|
# 2. Indicator 2 is NOT 2 (indicating the linkage is to a "related" thing)
|
@@ -26,9 +26,9 @@ module PennMARC
|
|
26
26
|
# when no linguistic content is found.
|
27
27
|
#
|
28
28
|
# @note In franklin, we extracted the language code from the 008 control field. After engaging cataloging unit
|
29
|
-
# representatives, we decided to extract these values from the 041 field: Includes records for
|
30
|
-
# items, items that involve translation, and items where the medium of communication is a sign
|
31
|
-
# https://www.loc.gov/marc/bibliographic/bd041.html
|
29
|
+
# representatives, we decided to also extract these values from the 041 field: Includes records for
|
30
|
+
# multilingual items, items that involve translation, and items where the medium of communication is a sign
|
31
|
+
# language. https://www.loc.gov/marc/bibliographic/bd041.html
|
32
32
|
#
|
33
33
|
# @param [MARC::Record] record
|
34
34
|
# @param [Hash] iso_639_2_mapping iso-639-2 spec hash for language code translation
|
@@ -10,9 +10,52 @@ module PennMARC
|
|
10
10
|
# @return [Object]
|
11
11
|
def offsite(record); end
|
12
12
|
|
13
|
-
|
13
|
+
# Full text links from MARC 856 fields.
|
14
|
+
# @param [MARC::Record] record
|
15
|
+
# @return [Array] array of hashes
|
16
|
+
def full_text(record:)
|
17
|
+
indicator2_options = %w[0 1]
|
18
|
+
links_from_record(record, indicator2_options)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Web text links from MARC 856 fields.
|
22
|
+
# @param [MARC::Record] record
|
23
|
+
# @return [Array] array of hashes
|
24
|
+
def web(record:)
|
25
|
+
indicator2_options = ['2', ' ', '']
|
26
|
+
links_from_record(record, indicator2_options)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Extract subfield 3 and z/y depending on the presence of either. Extract link url and assemble array
|
32
|
+
# with text and link.
|
33
|
+
# @param [MARC::Field] field
|
34
|
+
# @return [Array]
|
35
|
+
def link_text_and_url(field)
|
36
|
+
subfield3 = subfield_values(field, 3)
|
37
|
+
subfield_zy = field.find_all(&subfield_in?(%w[z y])).map(&:value)
|
38
|
+
link_text = [subfield3, subfield_zy.first].compact.join(' ')
|
39
|
+
link_url = subfield_values(field, 'u')&.first || ''
|
40
|
+
[link_text, link_url.sub(' target=_blank', '')]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Assemble array of link text, link URL values from 856 fields. Ensure indicator1 (access method)
|
44
|
+
# is always 4 (HTTP) and indicator2 (relationship) can be specified by caller method.
|
45
|
+
# @param [MARC::Record] record
|
46
|
+
# @param [Array] indicator2_options
|
47
|
+
# @return [Array]
|
48
|
+
def links_from_record(record, indicator2_options)
|
49
|
+
record.fields('856').filter_map do |field|
|
50
|
+
next unless field.indicator1 == '4' && indicator2_options.include?(field.indicator2)
|
14
51
|
|
15
|
-
|
52
|
+
link_text, link_url = link_text_and_url(field)
|
53
|
+
{
|
54
|
+
link_text: link_text.present? ? link_text : link_url,
|
55
|
+
link_url: link_url
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
16
59
|
end
|
17
60
|
end
|
18
61
|
end
|
@@ -4,46 +4,81 @@ module PennMARC
|
|
4
4
|
# This helper contains logic for parsing out Title and Title-related fields.
|
5
5
|
class Title < Helper
|
6
6
|
class << self
|
7
|
-
#
|
7
|
+
# We use these fields when retrieving auxiliary titles in the *search_aux methods:
|
8
|
+
# {https://www.loc.gov/marc/bibliographic/bd130.html 130},
|
9
|
+
# {https://www.loc.gov/marc/bibliographic/bd210.html 210},
|
10
|
+
# {https://www.loc.gov/marc/bibliographic/bd245.html 245},
|
11
|
+
# {https://www.loc.gov/marc/bibliographic/bd246.html 246},
|
12
|
+
# {https://www.loc.gov/marc/bibliographic/bd247.html 247},
|
13
|
+
# {https://www.loc.gov/marc/bibliographic/bd440.html 440},
|
14
|
+
# {https://www.loc.gov/marc/bibliographic/bd490.html 490},
|
15
|
+
# {https://www.loc.gov/marc/bibliographic/bd730.html 730},
|
16
|
+
# {https://www.loc.gov/marc/bibliographic/bd740.html 740},
|
17
|
+
# {https://www.loc.gov/marc/bibliographic/bd830.html 830},
|
18
|
+
# {https://www.loc.gov/marc/bibliographic/bd773.html 773},
|
19
|
+
# {https://www.loc.gov/marc/bibliographic/bd774.html 774},
|
20
|
+
# {https://www.loc.gov/marc/bibliographic/bd780.html 780},
|
21
|
+
# {https://www.loc.gov/marc/bibliographic/bd785.html 785},
|
22
|
+
# {https://www.loc.gov/marc/bibliographic/bd700.html 700},
|
23
|
+
# {https://www.loc.gov/marc/bibliographic/bd710.html 710},
|
24
|
+
# {https://www.loc.gov/marc/bibliographic/bd711.html 711},
|
25
|
+
# {https://www.loc.gov/marc/bibliographic/bd505.html 505}
|
8
26
|
AUX_TITLE_TAGS = {
|
9
27
|
main: %w[130 210 240 245 246 247 440 490 730 740 830],
|
10
28
|
related: %w[773 774 780 785],
|
11
|
-
entity: %w[700 710 711]
|
29
|
+
entity: %w[700 710 711],
|
30
|
+
note: %w[505]
|
12
31
|
}.freeze
|
13
32
|
|
14
|
-
# Main Title Search field. Takes from 245 and linked 880.
|
33
|
+
# Main Title Search field. Takes from {https://www.loc.gov/marc/bibliographic/bd245.html 245} and linked 880.
|
15
34
|
# @note Ported from get_title_1_search_values.
|
16
35
|
# @param [MARC::Record] record
|
17
36
|
# @return [Array<String>] array of title values for search
|
18
37
|
def search(record)
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
titles + record.fields('880').filter_map do |field|
|
23
|
-
next unless subfield_value?(field, '6', /245/)
|
38
|
+
record.fields(%w[245 880]).filter_map do |field|
|
39
|
+
next if field.tag == '880' && subfield_value_not_in?(field, '6', %w[245])
|
24
40
|
|
25
41
|
join_subfields(field, &subfield_not_in?(%w[c 6 8 h]))
|
26
42
|
end
|
27
43
|
end
|
28
44
|
|
29
|
-
# Auxiliary Title Search field. Takes from many fields that contain title-like
|
30
|
-
#
|
31
|
-
# @todo port this, it is way complicated but essential for relevance
|
45
|
+
# Auxiliary Title Search field. Takes from many fields defined in {AUX_TITLE_TAGS} that contain title-like
|
46
|
+
# information.
|
32
47
|
# @param [MARC::Record] record
|
33
|
-
# @return [Array<String>] array of title values for search
|
34
|
-
def search_aux(record)
|
48
|
+
# @return [Array<String>] array of auxiliary title values for search
|
49
|
+
def search_aux(record)
|
50
|
+
search_aux_values(record: record, title_type: :main, &subfield_not_in?(%w[c 6 8])) +
|
51
|
+
search_aux_values(record: record, title_type: :related, &subfield_not_in?(%w[s t])) +
|
52
|
+
search_aux_values(record: record, title_type: :entity, &subfield_in?(%w[t])) +
|
53
|
+
search_aux_values(record: record, title_type: :note, &subfield_in?(%w[t]))
|
54
|
+
end
|
35
55
|
|
36
|
-
# Journal Title Search field.
|
37
|
-
#
|
56
|
+
# Journal Title Search field. Takes from {https://www.loc.gov/marc/bibliographic/bd245.html 245} and linked 880.
|
57
|
+
# We do not return any values if the {https://www.loc.gov/marc/bibliographic/bdleader.html MARC leader}
|
58
|
+
# indicates that the record is not a serial.
|
38
59
|
# @param [MARC::Record] record
|
39
60
|
# @return [Array<String>] journal title information for search
|
40
|
-
def journal_search(record)
|
61
|
+
def journal_search(record)
|
62
|
+
return [] if not_a_serial?(record)
|
63
|
+
|
64
|
+
record.fields(%w[245 880]).filter_map do |field|
|
65
|
+
next if field.tag == '880' && subfield_value_not_in?(field, '6', %w[245])
|
66
|
+
|
67
|
+
join_subfields(field, &subfield_not_in?(%w[c 6 8 h]))
|
68
|
+
end
|
69
|
+
end
|
41
70
|
|
42
|
-
# Auxiliary Journal Title Search field.
|
43
|
-
#
|
71
|
+
# Auxiliary Journal Title Search field. Takes from many fields defined in {AUX_TITLE_TAGS} that contain title-like
|
72
|
+
# information. Does not return any titles if the {https://www.loc.gov/marc/bibliographic/bdleader.html MARC leader}
|
73
|
+
# indicates that the record is not a serial.
|
44
74
|
# @param [MARC::Record] record
|
45
|
-
# @return [Array<String>] journal title information for search
|
46
|
-
def journal_search_aux(record)
|
75
|
+
# @return [Array<String>] auxiliary journal title information for search
|
76
|
+
def journal_search_aux(record)
|
77
|
+
search_aux_values(record: record, title_type: :main, journal: true, &subfield_not_in?(%w[c 6 8])) +
|
78
|
+
search_aux_values(record: record, title_type: :related, journal: true, &subfield_not_in?(%w[s t])) +
|
79
|
+
search_aux_values(record: record, title_type: :entity, journal: true, &subfield_in?(%w[t])) +
|
80
|
+
search_aux_values(record: record, title_type: :note, journal: true, &subfield_in?(%w[t]))
|
81
|
+
end
|
47
82
|
|
48
83
|
# Single-valued Title, for use in headings. Takes the first {https://www.oclc.org/bibformats/en/2xx/245.html 245}
|
49
84
|
# value. Special consideration for
|
@@ -192,6 +227,43 @@ module PennMARC
|
|
192
227
|
{ prefix: '', filing: title.strip }
|
193
228
|
end
|
194
229
|
end
|
230
|
+
|
231
|
+
# Evaluate {https://www.loc.gov/marc/bibliographic/bdleader.html MARC leader} to determine if record is a serial.
|
232
|
+
# @param [MARC::Record] record
|
233
|
+
# @return [Boolean]
|
234
|
+
def not_a_serial?(record)
|
235
|
+
!record.leader[6..7].ends_with?('s')
|
236
|
+
end
|
237
|
+
|
238
|
+
# @param [MARC::DataField] field
|
239
|
+
# @param [String] value
|
240
|
+
# @return [Boolean]
|
241
|
+
def indicators_are_not_value?(field, value)
|
242
|
+
field.indicator1 != value && field.indicator2 != value
|
243
|
+
end
|
244
|
+
|
245
|
+
# Retrieve auxiliary title values. Returns no values if a journal is expected but the
|
246
|
+
# {https://www.loc.gov/marc/bibliographic/bdleader.html MARC leader} indicates that the record is not a serial.
|
247
|
+
# We take special consideration for the {https://www.loc.gov/marc/bibliographic/bd505.html 505 field}, extracting
|
248
|
+
# values only when indicator1 and indicator2 are both '0'.
|
249
|
+
# @param [MARC::Record] record
|
250
|
+
# @param [Symbol] title_type
|
251
|
+
# @param [Boolean] journal
|
252
|
+
# @bloc [Proc] join_selector
|
253
|
+
# @return [Array<String>]
|
254
|
+
def search_aux_values(record:, title_type:, journal: false, &join_selector)
|
255
|
+
return [] if journal && not_a_serial?(record)
|
256
|
+
|
257
|
+
tags = AUX_TITLE_TAGS[title_type] + ['880']
|
258
|
+
|
259
|
+
record.fields(tags).filter_map do |field|
|
260
|
+
next if field.tag == '505' && indicators_are_not_value?(field, '0')
|
261
|
+
|
262
|
+
next if field.tag == '880' && subfield_value_not_in?(field, '6', tags)
|
263
|
+
|
264
|
+
join_subfields(field, &join_selector)
|
265
|
+
end
|
266
|
+
end
|
195
267
|
end
|
196
268
|
end
|
197
269
|
end
|
data/lib/pennmarc/version.rb
CHANGED
@@ -7,28 +7,48 @@ describe 'PennMARC::Access' do
|
|
7
7
|
|
8
8
|
describe '.facet' do
|
9
9
|
context 'with an electronic record' do
|
10
|
-
let(:record)
|
11
|
-
|
10
|
+
let(:record) { marc_record fields: [marc_field(tag: tag)] }
|
11
|
+
|
12
|
+
context 'with enrichment via the Alma publishing process' do
|
13
|
+
let(:tag) { PennMARC::EnrichedMarc::TAG_ELECTRONIC_INVENTORY }
|
14
|
+
|
15
|
+
it 'returns expected access value' do
|
16
|
+
expect(helper.facet(record)).to contain_exactly(PennMARC::Access::ONLINE)
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
|
-
|
15
|
-
|
20
|
+
context 'with enrichment with availability info via the Alma API' do
|
21
|
+
let(:tag) { PennMARC::Access::ELEC_AVAILABILITY_TAG }
|
22
|
+
|
23
|
+
it 'returns expected access value' do
|
24
|
+
expect(helper.facet(record)).to contain_exactly(PennMARC::Access::ONLINE)
|
25
|
+
end
|
16
26
|
end
|
17
27
|
end
|
18
28
|
|
19
29
|
context 'with a print record' do
|
20
|
-
let(:record)
|
21
|
-
|
30
|
+
let(:record) { marc_record fields: [marc_field(tag: tag)] }
|
31
|
+
|
32
|
+
context 'with enrichment via the Alma publishing process' do
|
33
|
+
let(:tag) { PennMARC::EnrichedMarc::TAG_HOLDING }
|
34
|
+
|
35
|
+
it 'returns expected access value' do
|
36
|
+
expect(helper.facet(record)).to contain_exactly(PennMARC::Access::AT_THE_LIBRARY)
|
37
|
+
end
|
22
38
|
end
|
23
39
|
|
24
|
-
|
25
|
-
|
40
|
+
context 'with enrichment with availability info via the Alma API' do
|
41
|
+
let(:tag) { PennMARC::Access::PHYS_AVAILABILITY_TAG }
|
42
|
+
|
43
|
+
it 'returns expected access value' do
|
44
|
+
expect(helper.facet(record)).to contain_exactly(PennMARC::Access::AT_THE_LIBRARY)
|
45
|
+
end
|
26
46
|
end
|
27
47
|
end
|
28
48
|
|
29
49
|
context 'with a record containing a link to a finding aid (as a handle link)' do
|
30
50
|
let(:record) do
|
31
|
-
marc_record fields: [marc_field(tag:
|
51
|
+
marc_record fields: [marc_field(tag: PennMARC::EnrichedMarc::TAG_HOLDING),
|
32
52
|
marc_field(tag: '856', subfields: location_and_access_subfields, **indicators)]
|
33
53
|
end
|
34
54
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe 'PennMARC::Link' do
|
4
|
+
include MarcSpecHelpers
|
5
|
+
|
6
|
+
let(:helper) { PennMARC::Link }
|
7
|
+
|
8
|
+
describe '.full_text' do
|
9
|
+
let(:record) do
|
10
|
+
marc_record fields: [marc_field(tag: '856', subfields: { '3': 'Materials specified',
|
11
|
+
z: 'Public note',
|
12
|
+
y: 'Link text',
|
13
|
+
u: 'https://www.test-uri.com/' },
|
14
|
+
indicator1: '4', indicator2: '0')]
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns full text link text and url' do
|
18
|
+
expect(helper.full_text(record: record)).to contain_exactly({ link_text: 'Materials specified Public note',
|
19
|
+
link_url: 'https://www.test-uri.com/' })
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.web' do
|
24
|
+
let(:record) do
|
25
|
+
marc_record fields: [marc_field(tag: '856', subfields: { '3': 'Materials specified',
|
26
|
+
z: 'Public note',
|
27
|
+
y: 'Link text',
|
28
|
+
u: 'https://www.test-uri.com/' },
|
29
|
+
indicator1: '4', indicator2: '')]
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns web link text and url' do
|
33
|
+
expect(helper.web(record: record)).to contain_exactly({ link_text: 'Materials specified Public note',
|
34
|
+
link_url: 'https://www.test-uri.com/' })
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -21,7 +21,86 @@ describe 'PennMARC::Title' do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe '.search_aux' do
|
24
|
-
|
24
|
+
let(:leader) { 'ZZZZZnaaZa22ZZZZZzZZ4500' }
|
25
|
+
let(:record) do
|
26
|
+
marc_record fields: [
|
27
|
+
marc_field(tag: '130', subfields: { a: 'Uniform Title', c: '130 not included' }),
|
28
|
+
marc_field(tag: '880', subfields: { '6': '130', a: 'Alternative Uniform Title' }),
|
29
|
+
marc_field(tag: '773', subfields: { a: 'Host Uniform Title', s: '773 not included' }),
|
30
|
+
marc_field(tag: '700', subfields: { t: 'Personal Entry Title', s: '700 not included' }),
|
31
|
+
marc_field(tag: '505', subfields: { t: 'Invalid Formatted Contents Note Title' }, indicator1: 'invalid'),
|
32
|
+
marc_field(tag: '505', subfields: { t: 'Formatted Contents Note Title', s: '505 not included' },
|
33
|
+
indicator1: '0', indicator2: '0')
|
34
|
+
], leader: leader
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns auxiliary titles' do
|
38
|
+
expect(helper.search_aux(record)).to contain_exactly('Uniform Title', 'Host Uniform Title',
|
39
|
+
'Alternative Uniform Title', 'Personal Entry Title',
|
40
|
+
'Formatted Contents Note Title')
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when the leader indicates the record is a serial' do
|
44
|
+
let(:leader) { 'ZZZZZnasZa22ZZZZZzZZ4500' }
|
45
|
+
|
46
|
+
it 'returns auxiliary titles' do
|
47
|
+
expect(helper.search_aux(record)).to contain_exactly('Uniform Title', 'Host Uniform Title',
|
48
|
+
'Alternative Uniform Title', 'Personal Entry Title',
|
49
|
+
'Formatted Contents Note Title')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.journal_search' do
|
55
|
+
let(:leader) { 'ZZZZZnasZa22ZZZZZzZZ4500' }
|
56
|
+
let(:record) do
|
57
|
+
marc_record fields: [
|
58
|
+
marc_field(tag: '245', subfields: { a: 'Some Journal Title' }),
|
59
|
+
marc_field(tag: '880', subfields: { a: 'Alternative Script', '6': '245' }),
|
60
|
+
marc_field(tag: '880', subfields: { a: 'Unrelated 880', '6': 'invalid' })
|
61
|
+
], leader: leader
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'returns journal search titles' do
|
65
|
+
expect(helper.journal_search(record)).to contain_exactly('Some Journal Title', 'Alternative Script')
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when the record is not a serial' do
|
69
|
+
let(:leader) { 'ZZZZZnaaZa22ZZZZZzZZ4500' }
|
70
|
+
|
71
|
+
it 'returns an empty array' do
|
72
|
+
expect(helper.journal_search_aux(record)).to be_empty
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '.journal_search_aux' do
|
78
|
+
let(:leader) { 'ZZZZZnasZa22ZZZZZzZZ4500' }
|
79
|
+
let(:record) do
|
80
|
+
marc_record fields: [
|
81
|
+
marc_field(tag: '130', subfields: { a: 'Uniform Title', c: '130 not included' }),
|
82
|
+
marc_field(tag: '880', subfields: { '6': '130', a: 'Alternative Uniform Title' }),
|
83
|
+
marc_field(tag: '773', subfields: { a: 'Host Uniform Title', s: '773 not included' }),
|
84
|
+
marc_field(tag: '700', subfields: { t: 'Personal Entry Title', s: '700 not included' }),
|
85
|
+
marc_field(tag: '505', subfields: { t: 'Invalid Formatted Contents Note Title' }, indicator1: 'invalid'),
|
86
|
+
marc_field(tag: '505', subfields: { t: 'Formatted Contents Note Title', s: '505 not included' },
|
87
|
+
indicator1: '0', indicator2: '0')
|
88
|
+
], leader: leader
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'returns auxiliary journal search titles' do
|
92
|
+
expect(helper.journal_search_aux(record)).to contain_exactly('Uniform Title', 'Alternative Uniform Title',
|
93
|
+
'Host Uniform Title', 'Personal Entry Title',
|
94
|
+
'Formatted Contents Note Title')
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when the record is not a serial' do
|
98
|
+
let(:leader) { 'ZZZZZnaaZa22ZZZZZzZZ4500' }
|
99
|
+
|
100
|
+
it 'returns an empty array' do
|
101
|
+
expect(helper.journal_search_aux(record)).to be_empty
|
102
|
+
end
|
103
|
+
end
|
25
104
|
end
|
26
105
|
|
27
106
|
describe '.show' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pennmarc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Kanning
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-12-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- spec/lib/pennmarc/helpers/genre_spec.rb
|
129
129
|
- spec/lib/pennmarc/helpers/identifer_spec.rb
|
130
130
|
- spec/lib/pennmarc/helpers/language_spec.rb
|
131
|
+
- spec/lib/pennmarc/helpers/link_spec.rb
|
131
132
|
- spec/lib/pennmarc/helpers/location_spec.rb
|
132
133
|
- spec/lib/pennmarc/helpers/note_spec.rb
|
133
134
|
- spec/lib/pennmarc/helpers/production_spec.rb
|