pennmarc 1.0.12 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -173,9 +173,9 @@ module PennMARC
173
173
 
174
174
  case type.to_sym
175
175
  when :facet
176
- "#{term[:parts].join('--')} #{term[:lasts].join(' ')}".strip
176
+ term[:parts].join('--').strip
177
177
  when :display
178
- "#{term[:parts].join('--')} #{term[:lasts].join(' ')} #{term[:append].join(' ')}".strip
178
+ "#{term[:parts].join('--')} #{term[:append].join(' ')}".strip
179
179
  end
180
180
  end
181
181
 
@@ -227,9 +227,9 @@ module PennMARC
227
227
  # @todo do i need all this?
228
228
  # @todo do i need to handle punctuation? see append_new_part
229
229
  # @param [MARC::DataField] field
230
- # @return [Hash{Symbol->Integer | Array}]
230
+ # @return [Hash{Symbol => Integer, Array}, Nil]
231
231
  def build_subject_hash(field)
232
- term_info = { count: 0, parts: [], append: [], lasts: [], uri: nil,
232
+ term_info = { count: 0, parts: [], append: [], uri: nil,
233
233
  local: field.indicator2 == '4' || field.tag.starts_with?('69'), # local subject heading
234
234
  vernacular: field.tag == '880' }
235
235
  field.each do |subfield|
@@ -251,8 +251,8 @@ module PennMARC
251
251
  # 'e' is relator term; not sure what 'w' is. These are used to append for record-view display only
252
252
  term_info[:append] << subfield.value.strip # TODO: map relator code?
253
253
  when 'b', 'c', 'd', 'p', 'q', 't'
254
- # these are appended to the last component if possible (i.e., when joined, should have no delimiter)
255
- term_info[:lasts] << subfield.value.strip
254
+ # these are appended to the last component (part) if possible (i.e., when joined, should have no delimiter)
255
+ term_info[:parts].last << ", #{subfield.value.strip}"
256
256
  term_info[:count] += 1
257
257
  else
258
258
  # the usual case; add a new component to `parts`
@@ -588,6 +588,10 @@ finecore:
588
588
  specific_location: Fisher Fine Arts Library - Core Reading Collection
589
589
  library: Fisher Fine Arts Library
590
590
  display: Fine Arts Library - Core Reading Collection
591
+ fineexhib:
592
+ specific_location: Fisher Fine Arts Library - Exhibitions Corridor
593
+ library: Fisher Fine Arts Library
594
+ display: Fine Arts Library - Exhibitions Corridor
591
595
  finelock:
592
596
  specific_location: Fisher Fine Arts Library - Locked Case
593
597
  library:
data/lib/pennmarc/util.rb CHANGED
@@ -14,7 +14,7 @@ module PennMARC
14
14
  end
15
15
 
16
16
  # Join subfields from a field selected based on a provided proc
17
- # @param [MARC::DataField] field
17
+ # @param [MARC::DataField, nil] field
18
18
  # @param [Proc] selector
19
19
  # @return [String]
20
20
  def join_subfields(field, &selector)
@@ -125,6 +125,21 @@ module PennMARC
125
125
  string.sub map[trailer.to_sym], ''
126
126
  end
127
127
 
128
+ # Intelligently append given punctuation to the end of a string
129
+ # @param [Symbol] trailer
130
+ # @param [String] string
131
+ # @return [String]
132
+ def append_trailing(trailer, string)
133
+ return string if string.end_with?('.', '-')
134
+
135
+ map = { semicolon: ';',
136
+ colon: ':',
137
+ slash: '/',
138
+ comma: ',',
139
+ period: '.' }
140
+ string + map[trailer.to_sym]
141
+ end
142
+
128
143
  # MARC 880 field "Alternate Graphic Representation" contains text "linked" to another
129
144
  # field (e.g., 254 [Title]) used as an alternate representation. Often used to hold
130
145
  # translations of title values. A common need is to extract subfields as selected by
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PennMARC
4
- VERSION = '1.0.12'
4
+ VERSION = '1.0.14'
5
5
  end
@@ -10,7 +10,7 @@ describe 'PennMARC::Access' do
10
10
  let(:record) { marc_record fields: [marc_field(tag: tag)] }
11
11
 
12
12
  context 'with enrichment via the Alma publishing process' do
13
- let(:tag) { PennMARC::EnrichedMarc::TAG_ELECTRONIC_INVENTORY }
13
+ let(:tag) { PennMARC::Enriched::Pub::ELEC_INVENTORY_TAG }
14
14
 
15
15
  it 'returns expected access value' do
16
16
  expect(helper.facet(record)).to contain_exactly(PennMARC::Access::ONLINE)
@@ -18,7 +18,7 @@ describe 'PennMARC::Access' do
18
18
  end
19
19
 
20
20
  context 'with enrichment with availability info via the Alma API' do
21
- let(:tag) { PennMARC::EnrichedMarc::AlmaApi::TAG_ELECTRONIC_INVENTORY }
21
+ let(:tag) { PennMARC::Enriched::Api::ELEC_INVENTORY_TAG }
22
22
 
23
23
  it 'returns expected access value' do
24
24
  expect(helper.facet(record)).to contain_exactly(PennMARC::Access::ONLINE)
@@ -30,7 +30,7 @@ describe 'PennMARC::Access' do
30
30
  let(:record) { marc_record fields: [marc_field(tag: tag)] }
31
31
 
32
32
  context 'with enrichment via the Alma publishing process' do
33
- let(:tag) { PennMARC::EnrichedMarc::TAG_HOLDING }
33
+ let(:tag) { PennMARC::Enriched::Pub::PHYS_INVENTORY_TAG }
34
34
 
35
35
  it 'returns expected access value' do
36
36
  expect(helper.facet(record)).to contain_exactly(PennMARC::Access::AT_THE_LIBRARY)
@@ -38,7 +38,7 @@ describe 'PennMARC::Access' do
38
38
  end
39
39
 
40
40
  context 'with enrichment with availability info via the Alma API' do
41
- let(:tag) { PennMARC::EnrichedMarc::AlmaApi::TAG_PHYSICAL_INVENTORY }
41
+ let(:tag) { PennMARC::Enriched::Api::PHYS_INVENTORY_TAG }
42
42
 
43
43
  it 'returns expected access value' do
44
44
  expect(helper.facet(record)).to contain_exactly(PennMARC::Access::AT_THE_LIBRARY)
@@ -48,7 +48,7 @@ describe 'PennMARC::Access' do
48
48
 
49
49
  context 'with a record containing a link to a finding aid (as a handle link)' do
50
50
  let(:record) do
51
- marc_record fields: [marc_field(tag: PennMARC::EnrichedMarc::TAG_HOLDING),
51
+ marc_record fields: [marc_field(tag: PennMARC::Enriched::Pub::PHYS_INVENTORY_TAG),
52
52
  marc_field(tag: '856', subfields: location_and_access_subfields, **indicators)]
53
53
  end
54
54
 
@@ -17,9 +17,9 @@ describe 'PennMARC::Classification' do
17
17
 
18
18
  describe '.facet' do
19
19
  context 'with enrichment via the Alma publishing process' do
20
- let(:tag) { PennMARC::EnrichedMarc::TAG_ITEM }
21
- let(:call_number_type_sf) { PennMARC::EnrichedMarc::SUB_ITEM_CALL_NUMBER_TYPE }
22
- let(:call_number_sf) { PennMARC::EnrichedMarc::SUB_ITEM_CALL_NUMBER }
20
+ let(:tag) { PennMARC::Enriched::Pub::ITEM_TAG }
21
+ let(:call_number_type_sf) { PennMARC::Enriched::Pub::ITEM_CALL_NUMBER_TYPE }
22
+ let(:call_number_sf) { PennMARC::Enriched::Pub::ITEM_CALL_NUMBER }
23
23
 
24
24
  it 'returns expected values' do
25
25
  expect(helper.facet(record)).to contain_exactly('T - Technology', '600 - Technology',
@@ -28,9 +28,9 @@ describe 'PennMARC::Classification' do
28
28
  end
29
29
 
30
30
  context 'with enrichment with availability info via Alma Api' do
31
- let(:tag) { PennMARC::EnrichedMarc::AlmaApi::TAG_PHYSICAL_INVENTORY }
32
- let(:call_number_type_sf) { PennMARC::EnrichedMarc::AlmaApi::SUB_PHYSICAL_CALL_NUMBER_TYPE }
33
- let(:call_number_sf) { PennMARC::EnrichedMarc::AlmaApi::SUB_PHYSICAL_CALL_NUMBER }
31
+ let(:tag) { PennMARC::Enriched::Api::PHYS_INVENTORY_TAG }
32
+ let(:call_number_type_sf) { PennMARC::Enriched::Api::PHYS_CALL_NUMBER_TYPE }
33
+ let(:call_number_sf) { PennMARC::Enriched::Api::PHYS_CALL_NUMBER }
34
34
 
35
35
  it 'returns expected values' do
36
36
  expect(helper.facet(record)).to contain_exactly('T - Technology', '600 - Technology',
@@ -17,11 +17,11 @@ describe 'PennMARC::Creator' do
17
17
  end
18
18
 
19
19
  it 'contains the expected search field values for a single author work' do
20
- expect(helper.search(record, relator_map: mapping)).to eq [
20
+ expect(helper.search(record, relator_map: mapping)).to contain_exactly(
21
21
  'Name Surname http://cool.uri/12345 author 1900-2000.',
22
22
  'Surname, Name http://cool.uri/12345 author 1900-2000.',
23
23
  'Alternative Surname'
24
- ]
24
+ )
25
25
  end
26
26
  end
27
27
 
@@ -32,8 +32,33 @@ describe 'PennMARC::Creator' do
32
32
  end
33
33
 
34
34
  it 'contains the expected search field values for a corporate author work' do
35
- expect(helper.search(record, relator_map: mapping)).to eq ['Group of People Annual Meeting Author.',
36
- 'Alt. Group Name Alt. Annual Meeting']
35
+ expect(helper.search(record, relator_map: mapping)).to contain_exactly(
36
+ 'Group of People Annual Meeting, Author.',
37
+ 'Alt. Group Name Alt. Annual Meeting'
38
+ )
39
+ end
40
+ end
41
+ end
42
+
43
+ describe '.search_aux' do
44
+ let(:record) { marc_record fields: fields }
45
+
46
+ context 'with a record that has an added name in the 7xx field' do
47
+ let(:fields) do
48
+ [marc_field(tag: '100', subfields: { a: 'Author', c: 'Fancy', d: 'active 24th century AD', '4': 'aut' }),
49
+ marc_field(tag: '700', subfields: { a: 'Author, Added' }),
50
+ marc_field(tag: '880', subfields: { '6': '100', a: 'Alt Author', c: 'Alt Fanciness' }),
51
+ marc_field(tag: '880', subfields: { '6': '700', a: 'Alt Added Author' })]
52
+ end
53
+
54
+ it 'contains the expected search_aux field values for a single author work' do
55
+ expect(helper.search_aux(record, relator_map: mapping)).to contain_exactly(
56
+ 'Author Fancy active 24th century AD, Author.',
57
+ 'Author, Added.',
58
+ 'Added Author.',
59
+ 'Alt Author Alt Fanciness',
60
+ 'Alt Added Author'
61
+ )
37
62
  end
38
63
  end
39
64
  end
@@ -187,6 +212,18 @@ describe 'PennMARC::Creator' do
187
212
  end
188
213
  end
189
214
 
215
+ describe '.conference_search' do
216
+ let(:record) do
217
+ marc_record fields: [
218
+ marc_field(tag: '111', subfields: { a: 'MARC History Symposium', c: 'Moscow', '4': 'aut' })
219
+ ]
220
+ end
221
+
222
+ it 'returns conference name information for searching without relator value' do
223
+ expect(helper.conference_search(record)).to eq ['MARC History Symposium Moscow']
224
+ end
225
+ end
226
+
190
227
  describe '.contributor_show' do
191
228
  let(:record) do
192
229
  marc_record fields: [
@@ -217,7 +254,4 @@ describe 'PennMARC::Creator' do
217
254
  )
218
255
  end
219
256
  end
220
-
221
- # describe '.conference_search'
222
- # describe '.search_aux'
223
257
  end
@@ -68,9 +68,9 @@ describe 'PennMARC::Format' do
68
68
  context 'with API enriched fields' do
69
69
  let(:record) do
70
70
  marc_record fields: [
71
- marc_field(tag: PennMARC::EnrichedMarc::AlmaApi::TAG_PHYSICAL_INVENTORY, subfields: {
71
+ marc_field(tag: PennMARC::Enriched::Api::PHYS_INVENTORY_TAG, subfields: {
72
72
  :h => 'AB123',
73
- PennMARC::EnrichedMarc::AlmaApi::SUB_PHYSICAL_CALL_NUMBER_TYPE => '.456 Microfilm'
73
+ PennMARC::Enriched::Api::PHYS_CALL_NUMBER_TYPE => '.456 Microfilm'
74
74
  })
75
75
  ]
76
76
  end
@@ -83,9 +83,9 @@ describe 'PennMARC::Format' do
83
83
  context 'with publishing enriched fields' do
84
84
  let(:record) do
85
85
  marc_record fields: [
86
- marc_field(tag: PennMARC::EnrichedMarc::TAG_HOLDING,
86
+ marc_field(tag: PennMARC::Enriched::Pub::PHYS_INVENTORY_TAG,
87
87
  subfields: { :h => 'AB123',
88
- PennMARC::EnrichedMarc::SUB_ITEM_CALL_NUMBER_TYPE => '.456 Microfilm' })
88
+ PennMARC::Enriched::Pub::ITEM_CALL_NUMBER_TYPE => '.456 Microfilm' })
89
89
  ]
90
90
  end
91
91
 
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'PennMARC::Inventory' do
4
+ include MarcSpecHelpers
5
+
6
+ let(:helper) { PennMARC::Inventory }
7
+ let(:record) do
8
+ marc_record fields: fields
9
+ end
10
+
11
+ describe 'physical' do
12
+ let(:fields) do
13
+ [marc_field(tag: mapper::PHYS_INVENTORY_TAG,
14
+ subfields: subfields)]
15
+ end
16
+
17
+ context 'with API enrichment fields' do
18
+ let(:mapper) { PennMARC::Enriched::Api }
19
+ let(:subfields) do
20
+ { mapper::PHYS_CALL_NUMBER => 'AB123.4',
21
+ mapper::PHYS_HOLDING_ID => '123456789',
22
+ mapper::PHYS_LOCATION_CODE => 'vanpelt',
23
+ mapper::PHYS_LOCATION_NAME => 'Van Pelt Library',
24
+ mapper::PHYS_PRIORITY => '1' }
25
+ end
26
+
27
+ it 'returns expected array of hash values' do
28
+ expect(helper.physical(record)).to contain_exactly(
29
+ { call_num: 'AB123.4', holding_id: '123456789', location_code: 'vanpelt',
30
+ location_name: 'Van Pelt Library', priority: '1' }
31
+ )
32
+ end
33
+ end
34
+
35
+ context 'with Pub enrichment fields' do
36
+ let(:mapper) { PennMARC::Enriched::Pub }
37
+ let(:subfields) do
38
+ { mapper::HOLDING_CLASSIFICATION_PART => 'AB123',
39
+ mapper::HOLDING_ITEM_PART => '.4',
40
+ mapper::PHYS_HOLDING_ID => '123456789',
41
+ mapper::PHYS_LOCATION_CODE => 'vanpelt',
42
+ mapper::PHYS_LOCATION_NAME => 'Van Pelt Library' }
43
+ end
44
+
45
+ it 'returns expected array of hash values' do
46
+ expect(helper.physical(record)).to contain_exactly(
47
+ { call_num: 'AB123.4', holding_id: '123456789', location_code: 'vanpelt',
48
+ location_name: 'Van Pelt Library', priority: nil }
49
+ )
50
+ end
51
+ end
52
+ end
53
+
54
+ describe 'electronic' do
55
+ let(:fields) do
56
+ [marc_field(tag: mapper::ELEC_INVENTORY_TAG,
57
+ subfields: subfields)]
58
+ end
59
+ let(:subfields) do
60
+ { mapper::ELEC_PORTFOLIO_ID => '234567890',
61
+ mapper::ELEC_SERVICE_URL => 'https://www.iwish.com',
62
+ mapper::ELEC_COLLECTION_NAME => 'All Articles Repo',
63
+ mapper::ELEC_COVERAGE_STMT => 'All time',
64
+ mapper::ELEC_PUBLIC_NOTE => 'Portfolio public note' }
65
+ end
66
+
67
+ context 'with API enrichment fields' do
68
+ let(:mapper) { PennMARC::Enriched::Api }
69
+
70
+ it 'returns expected array of hash values' do
71
+ expect(helper.electronic(record)).to contain_exactly(
72
+ { portfolio_id: '234567890', url: 'https://www.iwish.com', collection_name: 'All Articles Repo',
73
+ coverage: 'All time', note: 'Portfolio public note' }
74
+ )
75
+ end
76
+ end
77
+
78
+ context 'with Pub enrichment fields' do
79
+ let(:mapper) { PennMARC::Enriched::Pub }
80
+
81
+ it 'returns expected array of hash values' do
82
+ expect(helper.electronic(record)).to contain_exactly(
83
+ { portfolio_id: '234567890', url: 'https://www.iwish.com', collection_name: 'All Articles Repo',
84
+ coverage: 'All time', note: 'Portfolio public note' }
85
+ )
86
+ end
87
+ end
88
+ end
89
+
90
+ describe 'electronic_portfolio_count' do
91
+ let(:fields) { [marc_field(tag: inventory_tag), marc_field(tag: inventory_tag)] }
92
+
93
+ context 'with API enrichment fields' do
94
+ let(:inventory_tag) { PennMARC::Enriched::Api::ELEC_INVENTORY_TAG }
95
+
96
+ it 'returns the correct count' do
97
+ expect(helper.electronic_portfolio_count(record)).to eq 2
98
+ end
99
+ end
100
+
101
+ context 'with Pub enrichment fields' do
102
+ let(:inventory_tag) { PennMARC::Enriched::Pub::ELEC_INVENTORY_TAG }
103
+
104
+ it 'returns the correct count' do
105
+ expect(helper.electronic_portfolio_count(record)).to eq 2
106
+ end
107
+ end
108
+ end
109
+
110
+ describe 'physical_holding_count' do
111
+ let(:fields) { [marc_field(tag: inventory_tag), marc_field(tag: inventory_tag)] }
112
+
113
+ context 'with API enrichment fields' do
114
+ let(:inventory_tag) { PennMARC::Enriched::Api::PHYS_INVENTORY_TAG }
115
+
116
+ it 'returns the correct count' do
117
+ expect(helper.physical_holding_count(record)).to eq 2
118
+ end
119
+ end
120
+
121
+ context 'with Pub enrichment fields' do
122
+ let(:inventory_tag) { PennMARC::Enriched::Pub::PHYS_INVENTORY_TAG }
123
+
124
+ it 'returns the correct count' do
125
+ expect(helper.physical_holding_count(record)).to eq 2
126
+ end
127
+ end
128
+ end
129
+ end
@@ -4,11 +4,15 @@ describe 'PennMARC::Location' do
4
4
  include MarcSpecHelpers
5
5
 
6
6
  let(:helper) { PennMARC::Location }
7
+ let(:enriched_marc) { PennMARC::Enriched }
7
8
  let(:mapping) { location_map }
8
9
 
9
10
  describe 'location' do
10
11
  context "with only 'itm' field present" do
11
- let(:record) { marc_record(fields: [marc_field(tag: 'itm', subfields: { g: 'stor' })]) }
12
+ let(:record) do
13
+ marc_record(fields: [marc_field(tag: enriched_marc::Pub::ITEM_TAG,
14
+ subfields: { enriched_marc::Pub::ITEM_CURRENT_LOCATION => 'stor' })])
15
+ end
12
16
 
13
17
  it 'returns expected value' do
14
18
  expect(helper.location(record: record, location_map: mapping,
@@ -19,7 +23,10 @@ describe 'PennMARC::Location' do
19
23
  end
20
24
 
21
25
  context "with only 'hld' field present" do
22
- let(:record) { marc_record(fields: [marc_field(tag: 'hld', subfields: { c: 'stor' })]) }
26
+ let(:record) do
27
+ marc_record(fields: [marc_field(tag: enriched_marc::Pub::PHYS_INVENTORY_TAG,
28
+ subfields: { enriched_marc::Pub::PHYS_LOCATION_CODE => 'stor' })])
29
+ end
23
30
 
24
31
  it 'returns expected value' do
25
32
  expect(helper.location(record: record, location_map: mapping,
@@ -29,10 +36,12 @@ describe 'PennMARC::Location' do
29
36
  end
30
37
  end
31
38
 
32
- context "with both 'hld' and 'itm' fields present" do
39
+ context 'with both holding and item tag fields present=' do
33
40
  let(:record) do
34
- marc_record(fields: [marc_field(tag: 'itm', subfields: { g: 'stor' }),
35
- marc_field(tag: 'hld', subfields: { c: 'dent' })])
41
+ marc_record(fields: [marc_field(tag: enriched_marc::Pub::ITEM_TAG,
42
+ subfields: { enriched_marc::Pub::ITEM_CURRENT_LOCATION => 'stor' }),
43
+ marc_field(tag: enriched_marc::Pub::PHYS_INVENTORY_TAG,
44
+ subfields: { enriched_marc::Pub::PHYS_LOCATION_CODE => 'dent' })])
36
45
  end
37
46
 
38
47
  it 'returns item location' do
@@ -42,7 +51,7 @@ describe 'PennMARC::Location' do
42
51
  end
43
52
 
44
53
  context 'with multiple library locations' do
45
- let(:record) { marc_record(fields: [marc_field(tag: 'itm', subfields: { g: %w[dent] })]) }
54
+ let(:record) { marc_record(fields: [marc_field(tag: enriched_marc::Pub::ITEM_TAG, subfields: { g: %w[dent] })]) }
46
55
 
47
56
  it 'returns expected value' do
48
57
  expect(helper.location(record: record, location_map: mapping,
@@ -60,17 +69,26 @@ describe 'PennMARC::Location' do
60
69
  end
61
70
 
62
71
  context 'with electronic inventory tag' do
63
- let(:record) { marc_record(fields: [marc_field(tag: 'itm', subfields: { g: 'stor' }), marc_field(tag: 'prt')]) }
72
+ let(:record) do
73
+ marc_record(fields: [marc_field(tag: enriched_marc::Pub::ITEM_TAG,
74
+ subfields: { enriched_marc::Pub::ITEM_CURRENT_LOCATION => 'stor' }),
75
+ marc_field(tag: enriched_marc::Pub::ELEC_INVENTORY_TAG)])
76
+ end
64
77
 
65
78
  it 'returns expected value' do
66
79
  expect(helper.location(record: record, location_map: mapping,
67
- display_value: :library)).to contain_exactly('LIBRA', 'Online library')
80
+ display_value: :library)).to contain_exactly('LIBRA', helper::ONLINE_LIBRARY)
68
81
  end
69
82
  end
70
83
 
71
84
  context 'with AVA fields' do
72
85
  let(:record) do
73
- marc_record(fields: [marc_field(tag: 'AVA', subfields: { b: 'Libra', c: 'LIBRA', j: 'stor' })])
86
+ marc_record(fields: [marc_field(tag: enriched_marc::Api::PHYS_INVENTORY_TAG,
87
+ subfields: {
88
+ enriched_marc::Api::PHYS_LIBRARY_CODE => 'Libra',
89
+ enriched_marc::Api::PHYS_LOCATION_NAME => 'LIBRA',
90
+ enriched_marc::Api::PHYS_LOCATION_CODE => 'stor'
91
+ })])
74
92
  end
75
93
 
76
94
  it 'returns expected values' do
@@ -79,5 +97,18 @@ describe 'PennMARC::Location' do
79
97
  )
80
98
  end
81
99
  end
100
+
101
+ context 'with AVE fields' do
102
+ let(:record) do
103
+ marc_record(fields: [marc_field(tag: enriched_marc::Api::ELEC_INVENTORY_TAG,
104
+ subfields: { enriched_marc::Api::ELEC_COLLECTION_NAME => 'Nature' })])
105
+ end
106
+
107
+ it 'returns expected values' do
108
+ expect(helper.location(record: record, location_map: mapping, display_value: :library)).to(
109
+ contain_exactly(helper::ONLINE_LIBRARY)
110
+ )
111
+ end
112
+ end
82
113
  end
83
114
  end
@@ -101,13 +101,14 @@ describe 'PennMARC::Subject' do
101
101
  let(:fields) do
102
102
  [marc_field(tag: '650', indicator2: '7',
103
103
  subfields: {
104
- a: 'Libraries', x: 'History', e: 'relator', d: '22nd Century',
104
+ a: 'Libraries', d: '22nd Century', x: 'History', e: 'relator',
105
105
  '2': 'fast', '0': 'http://fast.org/libraries'
106
106
  })]
107
107
  end
108
108
 
109
109
  it 'properly concatenates heading components' do
110
- expect(values.first).to include 'Libraries--History'
110
+ expect(values.first).to start_with 'Libraries'
111
+ expect(values.first).to end_with '--History'
111
112
  end
112
113
 
113
114
  it 'excludes URI values from ǂ0 or ǂ1' do
@@ -123,14 +124,14 @@ describe 'PennMARC::Subject' do
123
124
  end
124
125
 
125
126
  it 'joins all values in the expected way' do
126
- expect(values.first).to eq 'Libraries--History 22nd Century'
127
+ expect(values.first).to eq 'Libraries, 22nd Century--History'
127
128
  end
128
129
  end
129
130
  end
130
131
 
131
132
  describe '.show' do
132
133
  let(:record) { marc_record fields: fields }
133
- let(:values) { helper.facet(record) }
134
+ let(:values) { helper.show(record) }
134
135
 
135
136
  context 'with a variety of headings' do
136
137
  let(:fields) do
@@ -162,8 +163,28 @@ describe 'PennMARC::Subject' do
162
163
  end
163
164
 
164
165
  it 'properly formats the heading parts' do
165
- expect(values.first).to eq 'Subways--Pennsylvania--Philadelphia Metropolitan Area--Maps--1989'
166
- expect(values.first).not_to include 'relator'
166
+ expect(values.first).to eq 'Subways--Pennsylvania--Philadelphia Metropolitan Area--Maps--1989 relator'
167
+ end
168
+ end
169
+
170
+ context 'with the record including trailing punctuation in the parts' do
171
+ let(:fields) do
172
+ [marc_field(tag: '600', indicator2: '7', subfields: {
173
+ a: 'Franklin, Benjamin,',
174
+ d: '1706-1790',
175
+ '2': 'fast',
176
+ '0': 'http://id.worldcat.org/fast/34115'
177
+ }),
178
+ marc_field(tag: '600', indicator1: '1', indicator2: '0', subfields: {
179
+ a: 'Franklin, Benjamin,',
180
+ d: '1706-1790.',
181
+ x: 'As inventor.'
182
+ })]
183
+ end
184
+
185
+ it 'returns what Franklin shows', pending: 'proper handling of punctuation in subject parts' do
186
+ expect(values).to contain_exactly 'Franklin, Benjamin, 1706-1790.',
187
+ 'Franklin, Benjamin, 1706-1790--As inventor.'
167
188
  end
168
189
  end
169
190
 
@@ -187,14 +208,14 @@ describe 'PennMARC::Subject' do
187
208
  let(:fields) do
188
209
  [marc_field(tag: '611', indicator2: '0', subfields: {
189
210
  a: 'Conference',
190
- d: '(2002',
191
- n: '2nd',
192
- c: ['Johannesburg, South Africa', 'Cape Town, South Africa)']
211
+ c: ['(Johannesburg, South Africa', 'Cape Town, South Africa'],
212
+ d: '2002)',
213
+ n: '2nd'
193
214
  })]
194
215
  end
195
216
 
196
217
  it 'properly formats the heading parts' do
197
- expect(values.first).to eq 'Conference--2nd (2002 Johannesburg, South Africa Cape Town, South Africa)'
218
+ expect(values.first).to eq 'Conference, (Johannesburg, South Africa, Cape Town, South Africa, 2002)--2nd'
198
219
  end
199
220
  end
200
221
 
@@ -202,14 +223,17 @@ describe 'PennMARC::Subject' do
202
223
  let(:fields) do
203
224
  [marc_field(tag: '600', indicator2: '0', subfields: {
204
225
  a: 'Person, Significant Author',
226
+ b: 'Numerator',
227
+ c: %w[Title Rank],
205
228
  d: '1899-1971',
206
- v: 'Early works to 1950',
207
- t: 'Collection'
229
+ t: 'Collection',
230
+ v: 'Early works to 1950'
208
231
  })]
209
232
  end
210
233
 
211
234
  it 'properly formats the heading parts' do
212
- expect(values.first).to eq 'Person, Significant Author--Early works to 1950 1899-1971 Collection'
235
+ expect(values.first).to eq('Person, Significant Author, Numerator, Title, Rank, 1899-1971, Collection--' \
236
+ 'Early works to 1950')
213
237
  end
214
238
  end
215
239
  end
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.12
4
+ version: 1.0.14
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: 2024-01-17 00:00:00.000000000 Z
13
+ date: 2024-01-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -88,7 +88,7 @@ files:
88
88
  - README.md
89
89
  - lib/pennmarc.rb
90
90
  - lib/pennmarc/encoding_level.rb
91
- - lib/pennmarc/enriched_marc.rb
91
+ - lib/pennmarc/enriched.rb
92
92
  - lib/pennmarc/heading_control.rb
93
93
  - lib/pennmarc/helpers/access.rb
94
94
  - lib/pennmarc/helpers/citation.rb
@@ -101,6 +101,10 @@ files:
101
101
  - lib/pennmarc/helpers/genre.rb
102
102
  - lib/pennmarc/helpers/helper.rb
103
103
  - lib/pennmarc/helpers/identifier.rb
104
+ - lib/pennmarc/helpers/inventory.rb
105
+ - lib/pennmarc/helpers/inventory_entry/base.rb
106
+ - lib/pennmarc/helpers/inventory_entry/electronic.rb
107
+ - lib/pennmarc/helpers/inventory_entry/physical.rb
104
108
  - lib/pennmarc/helpers/language.rb
105
109
  - lib/pennmarc/helpers/link.rb
106
110
  - lib/pennmarc/helpers/location.rb
@@ -132,6 +136,7 @@ files:
132
136
  - spec/lib/pennmarc/helpers/format_spec.rb
133
137
  - spec/lib/pennmarc/helpers/genre_spec.rb
134
138
  - spec/lib/pennmarc/helpers/identifer_spec.rb
139
+ - spec/lib/pennmarc/helpers/inventory_spec.rb
135
140
  - spec/lib/pennmarc/helpers/language_spec.rb
136
141
  - spec/lib/pennmarc/helpers/link_spec.rb
137
142
  - spec/lib/pennmarc/helpers/location_spec.rb