pennmarc 0.0.1

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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +23 -0
  6. data/Gemfile.lock +119 -0
  7. data/README.md +82 -0
  8. data/legacy/indexer.rb +568 -0
  9. data/legacy/marc.rb +2964 -0
  10. data/legacy/test_file_output.json +49 -0
  11. data/lib/pennmarc/encoding_level.rb +43 -0
  12. data/lib/pennmarc/enriched_marc.rb +36 -0
  13. data/lib/pennmarc/heading_control.rb +11 -0
  14. data/lib/pennmarc/helpers/citation.rb +31 -0
  15. data/lib/pennmarc/helpers/creator.rb +237 -0
  16. data/lib/pennmarc/helpers/database.rb +89 -0
  17. data/lib/pennmarc/helpers/date.rb +85 -0
  18. data/lib/pennmarc/helpers/edition.rb +90 -0
  19. data/lib/pennmarc/helpers/format.rb +312 -0
  20. data/lib/pennmarc/helpers/genre.rb +71 -0
  21. data/lib/pennmarc/helpers/helper.rb +11 -0
  22. data/lib/pennmarc/helpers/identifier.rb +134 -0
  23. data/lib/pennmarc/helpers/language.rb +37 -0
  24. data/lib/pennmarc/helpers/link.rb +12 -0
  25. data/lib/pennmarc/helpers/location.rb +97 -0
  26. data/lib/pennmarc/helpers/note.rb +132 -0
  27. data/lib/pennmarc/helpers/production.rb +131 -0
  28. data/lib/pennmarc/helpers/relation.rb +135 -0
  29. data/lib/pennmarc/helpers/series.rb +118 -0
  30. data/lib/pennmarc/helpers/subject.rb +304 -0
  31. data/lib/pennmarc/helpers/title.rb +197 -0
  32. data/lib/pennmarc/mappings/language.yml +516 -0
  33. data/lib/pennmarc/mappings/locations.yml +1801 -0
  34. data/lib/pennmarc/mappings/relator.yml +263 -0
  35. data/lib/pennmarc/parser.rb +177 -0
  36. data/lib/pennmarc/util.rb +240 -0
  37. data/lib/pennmarc.rb +6 -0
  38. data/pennmarc.gemspec +22 -0
  39. data/spec/fixtures/marcxml/test.xml +167 -0
  40. data/spec/lib/pennmarc/helpers/citation_spec.rb +27 -0
  41. data/spec/lib/pennmarc/helpers/creator_spec.rb +183 -0
  42. data/spec/lib/pennmarc/helpers/database_spec.rb +60 -0
  43. data/spec/lib/pennmarc/helpers/date_spec.rb +105 -0
  44. data/spec/lib/pennmarc/helpers/edition_spec.rb +38 -0
  45. data/spec/lib/pennmarc/helpers/format_spec.rb +200 -0
  46. data/spec/lib/pennmarc/helpers/genre_spec.rb +89 -0
  47. data/spec/lib/pennmarc/helpers/identifer_spec.rb +105 -0
  48. data/spec/lib/pennmarc/helpers/language_spec.rb +30 -0
  49. data/spec/lib/pennmarc/helpers/location_spec.rb +70 -0
  50. data/spec/lib/pennmarc/helpers/note_spec.rb +233 -0
  51. data/spec/lib/pennmarc/helpers/production_spec.rb +193 -0
  52. data/spec/lib/pennmarc/helpers/relation_spec.rb +120 -0
  53. data/spec/lib/pennmarc/helpers/subject_spec.rb +262 -0
  54. data/spec/lib/pennmarc/helpers/title_spec.rb +169 -0
  55. data/spec/lib/pennmarc/marc_util_spec.rb +206 -0
  56. data/spec/lib/pennmarc/parser_spec.rb +13 -0
  57. data/spec/spec_helper.rb +104 -0
  58. data/spec/support/marc_spec_helpers.rb +84 -0
  59. metadata +171 -0
@@ -0,0 +1,233 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'PennMARC::Note' do
4
+ include MarcSpecHelpers
5
+
6
+ let(:helper) { PennMARC::Note }
7
+
8
+ describe '.notes_show' do
9
+ let(:record) { marc_record(fields: fields) }
10
+ let(:fields) do
11
+ [
12
+ marc_field(tag: '500',
13
+ subfields: { a: 'Gift of R. Winthrop, 1883', '3': 'Abstracts', '4': 'From Winthrop papers' }),
14
+ marc_field(tag: '502', subfields: { b: 'PhD', c: 'University of Pennsylvania', d: '2021' }),
15
+ marc_field(tag: '504', subfields: { a: 'Includes bibliographical references (pages 329-[342]) and index.' }),
16
+ marc_field(tag: '533',
17
+ subfields: { '3': 'Archives', '5': 'LoC', a: 'Microfilm',
18
+ b: 'UK', c: 'Historical Association',
19
+ d: '1917', e: '434 reels',
20
+ f: '(Seized records)' }),
21
+ marc_field(tag: '588', subfields: { a: 'Print version record', '5': 'LoC' }),
22
+ marc_field(tag: '880', subfields: { b: 'Alt PhD', c: 'Alt UPenn', d: 'Alt 2021', '6': '502' }),
23
+ marc_field(tag: '880', subfields: { b: 'Ignore Note', '6': '501' })
24
+
25
+ ]
26
+ end
27
+
28
+ let(:values) { helper.notes_show(record) }
29
+
30
+ it 'returns expected values' do
31
+ expect(values).to contain_exactly('Gift of R. Winthrop, 1883 Abstracts From Winthrop papers',
32
+ 'PhD University of Pennsylvania 2021',
33
+ 'Includes bibliographical references (pages 329-[342]) and index.',
34
+ 'Archives Microfilm UK Historical Association 1917 434 reels (Seized records)',
35
+ 'Print version record', 'Alt PhD Alt UPenn Alt 2021')
36
+ end
37
+ end
38
+
39
+ describe '.local_notes_show' do
40
+ let(:record) { marc_record(fields: fields) }
41
+ let(:fields) do
42
+ [
43
+ marc_field(tag: '561', subfields: { a: 'Athenaeum copy: ', u: 'No URI' }),
44
+ marc_field(tag: '561', subfields: { a: 'Ignored' }),
45
+ marc_field(tag: '562', subfields: { a: 'Torn cover', b: 'desk copy', c: '3rd edition',
46
+ d: 'intended for reading',
47
+ e: '2 copies',
48
+ '3': 'parchment',
49
+ '5': 'LoC' }),
50
+ marc_field(tag: '590', subfields: { a: 'local note', '3': 'local paper' }),
51
+ marc_field(tag: '880', subfields: { a: 'alt cover', b: 'alt copy', c: 'alt edition',
52
+ d: 'alt presentation', e: 'alt number of copies',
53
+ '3': 'alt materials',
54
+ '5': 'LoC', '6': '562' }),
55
+ marc_field(tag: '880', subfields: { a: 'alt note', '3': 'alt paper', '6': '590' })
56
+ ]
57
+ end
58
+
59
+ let(:values) { helper.local_notes_show(record) }
60
+
61
+ it 'returns expected values' do
62
+ expect(values).to contain_exactly(
63
+ 'Athenaeum copy:',
64
+ 'Torn cover desk copy 3rd edition intended for reading 2 copies parchment',
65
+ 'local note local paper',
66
+ 'alt cover alt copy alt edition alt presentation alt number of copies alt materials',
67
+ 'alt note alt paper'
68
+ )
69
+ end
70
+
71
+ it 'ignores non Athenaeum copies' do
72
+ expect(values).not_to include('Ignored')
73
+ end
74
+ end
75
+
76
+ describe '.provenance_show' do
77
+ let(:record) { marc_record(fields: fields) }
78
+ let(:fields) do
79
+ [
80
+ marc_field(tag: '561', subfields: { a: 'Not Athenaeum copy: ', u: 'No URI' }, indicator1: '1', indicator2: ' '),
81
+ marc_field(tag: '561', subfields: { a: 'Ignore', u: 'No URI' }, indicator1: 'Wrong Indicator'),
82
+ marc_field(tag: '561', subfields: { a: 'Ignore', u: 'No URI' }, indicator2: 'Wrong Indicator'),
83
+ marc_field(tag: '561', subfields: { a: 'Athenaeum copy: ', u: 'No URI' }),
84
+ marc_field(tag: '650', indicator2: '4', subfields: { a: 'PRO Heading' }),
85
+ marc_field(tag: '650', indicator2: '4', subfields: { a: 'Regular Local Heading' }),
86
+ marc_field(tag: '650', indicator2: '1', subfields: { a: 'LoC Heading' }),
87
+ marc_field(tag: '880', indicator2: '4', subfields: { '6': '650', a: 'PRO Alt Heading' }),
88
+ marc_field(tag: '880', indicator2: '4', subfields: { '6': '650', a: 'Alt LoC Heading' }),
89
+ marc_field(tag: '880', subfields: { a: 'Alt Provenance', u: 'Alt URI', '6': '561' })
90
+ ]
91
+ end
92
+
93
+ let(:values) { helper.provenance_show(record) }
94
+
95
+ it 'returns expected data from 561, 650, and linked alternates, removing PRO prefix and ignoring Athenaeum copy' do
96
+ expect(values).to contain_exactly('Not Athenaeum copy:', 'Heading', 'Alt Provenance', 'Alt Heading')
97
+ end
98
+ end
99
+
100
+ describe '.contents_show' do
101
+ let(:record) { marc_record(fields: fields) }
102
+ let(:fields) do
103
+ [
104
+ marc_field(tag: '505', subfields: { a: 'Formatted content notes', g: 'Misc Info', r: 'Responsible Agent',
105
+ t: 'A Title', u: 'URI' }),
106
+ marc_field(tag: '880', subfields: { a: 'Alt Formatted content notes', g: ' Alt Misc Info',
107
+ r: 'Alt Responsible Agent', t: 'Alt Title', u: 'Alt URI', '6': '505' })
108
+ ]
109
+ end
110
+
111
+ let(:values) { helper.contents_show(record) }
112
+
113
+ it 'returns expected values from 505 and its linked alternate' do
114
+ expect(values).to contain_exactly(
115
+ 'Formatted content notes Misc Info Responsible Agent A Title URI',
116
+ 'Alt Formatted content notes Alt Misc Info Alt Responsible Agent Alt Title Alt URI'
117
+ )
118
+ end
119
+ end
120
+
121
+ describe '.access_restriction_show' do
122
+ let(:record) { marc_record(fields: fields) }
123
+ let(:fields) do
124
+ [
125
+ marc_field(tag: '506', subfields: { a: 'Open to users with valid PennKey', b: 'Donor', c: 'Appointment Only',
126
+ d: 'estate executors', e: 'Some Policy', f: 'No online access',
127
+ g: '20300101', q: 'Van Pelt', u: 'URI', '2': 'star' })
128
+ ]
129
+ end
130
+
131
+ let(:values) { helper.access_restriction_show(record) }
132
+
133
+ it 'returns expected values from 506' do
134
+ expect(values).to contain_exactly(
135
+ 'Open to users with valid PennKey Donor Appointment Only estate executors Some Policy No online access
136
+ 20300101 Van Pelt URI star'.squish
137
+ )
138
+ end
139
+ end
140
+
141
+ describe '.finding_aid_show' do
142
+ let(:record) { marc_record(fields: fields) }
143
+
144
+ let(:fields) do
145
+ [
146
+ marc_field(tag: '555', subfields: { a: 'Finding aid', b: 'Source', c: 'Item level control',
147
+ d: 'citation', u: 'URI', '3': 'Materials' }),
148
+ marc_field(tag: '880', subfields: { a: 'Alt Finding aid', b: 'Alt Source', c: 'Alt Item level control',
149
+ d: 'Alt citation', u: 'Alt URI', '3': 'Alt Materials', '6': '555' })
150
+ ]
151
+ end
152
+
153
+ let(:values) { helper.finding_aid_show(record) }
154
+
155
+ it 'returns expected values from 555 and its linked alternate' do
156
+ expect(values).to contain_exactly(
157
+ 'Finding aid Source Item level control citation URI Materials',
158
+ 'Alt Finding aid Alt Source Alt Item level control Alt citation Alt URI Alt Materials'
159
+ )
160
+ end
161
+ end
162
+
163
+ describe '.participant_show' do
164
+ let(:record) { marc_record(fields: fields) }
165
+
166
+ let(:fields) do
167
+ [
168
+ marc_field(tag: '511', subfields: { a: 'Narrator: Some Dev' }),
169
+ marc_field(tag: '880', subfields: { a: 'Alt Participant', '6': '511' })
170
+ ]
171
+ end
172
+
173
+ let(:values) { helper.participant_show(record) }
174
+
175
+ it 'returns expected values from 511 and its linked alternate' do
176
+ expect(values).to contain_exactly('Narrator: Some Dev', 'Alt Participant')
177
+ end
178
+ end
179
+
180
+ describe '.credits_show' do
181
+ let(:record) { marc_record(fields: fields) }
182
+
183
+ let(:fields) do
184
+ [
185
+ marc_field(tag: '508', subfields: { a: 'Music: Some Dev' }),
186
+ marc_field(tag: '880', subfields: { a: 'Alt Credits', '6': '508' })
187
+ ]
188
+ end
189
+
190
+ let(:values) { helper.credits_show(record) }
191
+
192
+ it 'returns expected values from 508 and its linked alternate' do
193
+ expect(values).to contain_exactly('Music: Some Dev', 'Alt Credits')
194
+ end
195
+ end
196
+
197
+ describe '.biography_show' do
198
+ let(:record) { marc_record(fields: fields) }
199
+
200
+ let(:fields) do
201
+ [
202
+ marc_field(tag: '545', subfields: { a: 'A Creator', b: 'Additional Info', 'u': 'URI' }),
203
+ marc_field(tag: '880', subfields: { a: 'Alt Bio', b: 'Alt Info', u: 'Alt URI', '6': '545' })
204
+ ]
205
+ end
206
+
207
+ let(:values) { helper.biography_show(record) }
208
+
209
+ it 'returns expected values from 545 and its linked alternate' do
210
+ expect(values).to contain_exactly('A Creator Additional Info URI',
211
+ 'Alt Bio Alt Info Alt URI')
212
+ end
213
+ end
214
+
215
+ describe '.summary_show' do
216
+ let(:record) { marc_record(fields: fields) }
217
+
218
+ let(:fields) do
219
+ [
220
+ marc_field(tag: '520', subfields: { a: 'An Abstract', b: 'Additional Summary', 'c': 'ProQuest' }),
221
+ marc_field(tag: '880', subfields: { a: 'Alt Abstract', b: 'Alt Additional Summary', c: 'Alt ProQuest',
222
+ '6': '520' })
223
+ ]
224
+ end
225
+
226
+ let(:values) { helper.summary_show(record) }
227
+
228
+ it 'returns expected values from 520 and its linked alternate' do
229
+ expect(values).to contain_exactly('An Abstract Additional Summary ProQuest',
230
+ 'Alt Abstract Alt Additional Summary Alt ProQuest')
231
+ end
232
+ end
233
+ end
@@ -0,0 +1,193 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'PennMARC::Production' do
4
+ include MarcSpecHelpers
5
+
6
+ let(:helper) { PennMARC::Production }
7
+
8
+ describe '.show' do
9
+ let(:record) { marc_record fields: fields }
10
+
11
+ let(:fields) do
12
+ [
13
+ marc_field(tag: '264', subfields: { a: 'Marabella, Trinidad, West Indies',
14
+ b: 'Queen Bishop Productions Limited',
15
+ c: '2016' }, indicator2: '0'),
16
+ marc_field(tag: '264', subfields: { a: 'Leeds', b: 'Peepal Tree Productions', c: '2019' }, indicator2: '0'),
17
+ marc_field(tag: '264', subfields: { a: 'Nowhere', b: 'Wasteland Publishing', c: '1999' }, indicator2: '1'),
18
+ marc_field(tag: '880', subfields: { a: 'Linked', b: 'Alternate Productions', c: '880', '6': '264' },
19
+ indicator2: '0')
20
+ ]
21
+ end
22
+
23
+ let(:values) { helper.show(record) }
24
+
25
+ it 'returns expected values' do
26
+ expect(values).to contain_exactly(
27
+ 'Marabella, Trinidad, West Indies Queen Bishop Productions Limited 2016',
28
+ 'Leeds Peepal Tree Productions 2019',
29
+ 'Linked Alternate Productions 880'
30
+ )
31
+ end
32
+ end
33
+
34
+ describe '.distribution_show' do
35
+ let(:record) { marc_record fields: fields }
36
+ let(:fields) do
37
+ [
38
+ marc_field(tag: '264', subfields: { a: 'Marabella, Trinidad, West Indies',
39
+ b: 'Queen Bishop Distributors Limited',
40
+ c: '2016' }, indicator2: '2'),
41
+ marc_field(tag: '264', subfields: { a: 'Leeds', b: 'Peepal Tree Distributors', c: '2019' }, indicator2: '2'),
42
+ marc_field(tag: '264', subfields: { a: 'Nowhere', b: 'Wasteland Publishing', c: '1999' }, indicator2: '1'),
43
+ marc_field(tag: '880', subfields: { a: 'Linked', b: 'Alternate Distributors', c: '880', '6': '264' },
44
+ indicator2: '2')
45
+ ]
46
+ end
47
+ let(:values) { helper.distribution_show(record) }
48
+
49
+ it 'returns expected values' do
50
+ expect(values).to contain_exactly(
51
+ 'Marabella, Trinidad, West Indies Queen Bishop Distributors Limited 2016',
52
+ 'Leeds Peepal Tree Distributors 2019',
53
+ 'Linked Alternate Distributors 880'
54
+ )
55
+ end
56
+ end
57
+
58
+ describe '.manufacture_show' do
59
+ let(:record) { marc_record fields: fields }
60
+
61
+ let(:fields) do
62
+ [
63
+ marc_field(tag: '264', subfields: { a: 'Marabella, Trinidad, West Indies',
64
+ b: 'Queen Bishop Manufacturers Limited',
65
+ c: '2016' }, indicator2: '3'),
66
+ marc_field(tag: '264', subfields: { a: 'Leeds', b: 'Peepal Tree Manufacturers', c: '2019' }, indicator2: '3'),
67
+ marc_field(tag: '264', subfields: { a: 'Nowhere', b: 'Wasteland Publishing', c: '1999' }, indicator2: '1'),
68
+ marc_field(tag: '880', subfields: { a: 'Linked', b: 'Alternate Manufacturers', c: '880', '6': '264' },
69
+ indicator2: '3')
70
+ ]
71
+ end
72
+
73
+ let(:values) { helper.manufacture_show(record) }
74
+
75
+ it 'returns expected values' do
76
+ expect(values).to contain_exactly(
77
+ 'Marabella, Trinidad, West Indies Queen Bishop Manufacturers Limited 2016',
78
+ 'Leeds Peepal Tree Manufacturers 2019',
79
+ 'Linked Alternate Manufacturers 880'
80
+ )
81
+ end
82
+ end
83
+
84
+ describe '.publication_values' do
85
+ context 'with date in 245 ǂf' do
86
+ let(:record) { marc_record fields: fields }
87
+
88
+ let(:fields) do
89
+ [
90
+ marc_field(tag: '245', subfields: { f: '1869-1941' }),
91
+ marc_field(tag: '264', subfields: { a: 'Marabella, Trinidad, West Indies',
92
+ b: 'Queen Bishop Publishing Limited',
93
+ c: '1920' }, indicator2: '1')
94
+ ]
95
+ end
96
+
97
+ let(:values) { helper.publication_values(record) }
98
+
99
+ it 'returns expected values' do
100
+ expect(values).to contain_exactly('1869-1941',
101
+ 'Marabella, Trinidad, West Indies Queen Bishop Publishing Limited 1920')
102
+ end
103
+ end
104
+
105
+ context 'with 260, 261, or 262 fields' do
106
+ let(:record) { marc_record fields: fields }
107
+
108
+ let(:fields) do
109
+ [
110
+ marc_field(tag: '260', subfields: { a: ' Burnt Mill, Harlow, Essex, England', b: 'Longman',
111
+ c: '1985, c1956.' }),
112
+ marc_field(tag: '264', subfields: { a: 'Nowhere', b: 'Wasteland Publishers', c: '1999' }, indicator2: '1')
113
+ ]
114
+ end
115
+
116
+ let(:values) { helper.publication_values(record) }
117
+
118
+ it 'returns expected values' do
119
+ expect(values).to contain_exactly('Burnt Mill, Harlow, Essex, England Longman 1985, c1956.')
120
+ end
121
+ end
122
+
123
+ context 'without 260, 261, or 262 fields' do
124
+ let(:record) { marc_record fields: fields }
125
+
126
+ let(:fields) do
127
+ [
128
+ marc_field(tag: '264', subfields: { a: 'Nowhere', b: 'Wasteland Publishers', c: '1999' }, indicator2: '1'),
129
+ marc_field(tag: '264', subfields: { a: 'Leeds', b: 'Peepal Tree Productions', c: '2019' }, indicator2: '0'),
130
+ marc_field(tag: '264', subfields: { c: ' c2016' }, indicator2: '4')
131
+ ]
132
+ end
133
+
134
+ let(:values) { helper.publication_values(record) }
135
+
136
+ it 'returns publication values from field 264' do
137
+ expect(values).to contain_exactly('Nowhere Wasteland Publishers 1999 , c2016')
138
+ end
139
+ end
140
+ end
141
+
142
+ describe '.publication_show' do
143
+ let(:record) { marc_record fields: fields }
144
+
145
+ let(:fields) do
146
+ [marc_field(tag: '245', subfields: { f: 'between 1800-1850' }),
147
+ marc_field(tag: '260', subfields: { a: ' Burnt Mill, Harlow, Essex, England', b: 'Longman',
148
+ c: '1985, c1956.' }),
149
+ marc_field(tag: '264', subfields: { a: 'Leeds', b: 'Peepal Tree Press', c: '2019' }, indicator2: '1'),
150
+ marc_field(tag: '880', subfields: { f: 'Alternate 1800-1850', '6': '245' }),
151
+ marc_field(tag: '880',
152
+ subfields: { a: 'Alternate England', b: 'Alternate Longman', c: 'Alternate 1985, c1956.',
153
+ '6': '260' }),
154
+ marc_field(tag: '880', subfields: { a: 'Linked', b: 'Alternate Publishers', c: '880', '6': '264' },
155
+ indicator2: '1')]
156
+ end
157
+
158
+ let(:values) { helper.publication_show(record) }
159
+
160
+ it 'returns expected values' do
161
+ expect(values).to contain_exactly('between 1800-1850',
162
+ 'Burnt Mill, Harlow, Essex, England Longman 1985, c1956.',
163
+ 'Leeds Peepal Tree Press 2019',
164
+ 'Alternate 1800-1850',
165
+ 'Alternate England Alternate Longman Alternate 1985, c1956.',
166
+ 'Linked Alternate Publishers 880')
167
+ end
168
+ end
169
+
170
+ describe 'place_of_publication_show' do
171
+ let(:record) { marc_record fields: fields }
172
+
173
+ let(:fields) do
174
+ [marc_field(tag: '752', subfields: { a: 'United States', b: 'California', c: 'Los Angeles (County)',
175
+ d: 'Los Angeles', e: 'publication place', f: 'Little Tokyo',
176
+ g: 'North America', h: 'Earth' }),
177
+ marc_field(tag: '880', subfields: { a: 'US', b: 'Cali',
178
+ c: 'LA (County)', d: 'LA',
179
+ e: 'Alt publication place',
180
+ f: 'Alt Tokyo', g: 'NA',
181
+ h: 'Alt Earth', '6': '752' })]
182
+ end
183
+
184
+ let(:values) { helper.place_of_publication_show(record) }
185
+
186
+ it 'returns expected values' do
187
+ expect(values).to contain_exactly(
188
+ 'United States California Los Angeles (County) Los Angeles Little Tokyo North America Earth publication place',
189
+ 'US Cali LA (County) LA Alt Tokyo NA Alt Earth Alt publication place'
190
+ )
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'PennMARC::Relation' do
4
+ include MarcSpecHelpers
5
+
6
+ let(:helper) { PennMARC::Relation }
7
+ let(:record) { marc_record fields: fields }
8
+ let(:relator_map) { { aut: 'Author', trl: 'Translator' } }
9
+
10
+ describe '.contained_in_show' do
11
+ let(:fields) do
12
+ [marc_field(tag: '773', subfields: { i: 'Contained in (work):', t: 'National geographic magazine',
13
+ w: '(OCoLC)12345' })]
14
+ end
15
+
16
+ it 'returns only the specified subfields' do
17
+ expect(helper.contained_in_show(record)).to eq ['Contained in (work): National geographic magazine']
18
+ end
19
+ end
20
+
21
+ describe '.chronology_show' do
22
+ let(:fields) do
23
+ [marc_field(tag: '650', indicator2: '4', subfields: { a: 'CHR Heading' }),
24
+ marc_field(tag: '650', indicator2: '4', subfields: { a: 'Regular Local Heading' }),
25
+ marc_field(tag: '650', indicator2: '1', subfields: { a: 'LoC Heading' }),
26
+ marc_field(tag: '880', indicator2: '4', subfields: { '6': '650', a: 'CHR Alt. Heading' }),
27
+ marc_field(tag: '880', indicator2: '4', subfields: { '6': '999', a: 'Another Alt.' })]
28
+ end
29
+
30
+ it 'returns only the specified subfield data and linked alternate field with CHR prefix removed' do
31
+ expect(helper.chronology_show(record)).to eq ['Heading', 'Alt. Heading']
32
+ end
33
+ end
34
+
35
+ describe '.related_collections_show' do
36
+ let(:fields) do
37
+ [marc_field(tag: '544', subfields: { d: 'Penn Papers', c: 'USA' }),
38
+ marc_field(tag: '880', subfields: { '6': '544', d: 'Penn Papers Alt.' })]
39
+ end
40
+
41
+ it 'returns all expected subfield data for field and linked alternate' do
42
+ expect(helper.related_collections_show(record)).to eq ['Penn Papers USA', 'Penn Papers Alt.']
43
+ end
44
+ end
45
+
46
+ describe '.publications_about_show' do
47
+ let(:fields) do
48
+ [marc_field(tag: '581', subfields: { '3': 'Preliminary Report', a: '"Super Important Research Topic", 1977' }),
49
+ marc_field(tag: '880', subfields: { '6': '581', '3': 'Alt. Preliminary Report' })]
50
+ end
51
+
52
+ it 'returns all expected subfield data for field and linked alternate' do
53
+ expect(helper.publications_about_show(record)).to eq ['Preliminary Report "Super Important Research Topic", 1977',
54
+ 'Alt. Preliminary Report']
55
+ end
56
+ end
57
+
58
+ describe 'related_work_show' do
59
+ let(:fields) do
60
+ [marc_field(tag: '700', indicator2: '', subfields: { i: 'Translation of (work):', a: 'Some Author',
61
+ t: 'Aphorisms', '4': 'trl' }),
62
+ marc_field(tag: '700', indicator2: '2', subfields: { i: 'Adaptation of (work):', t: 'Ignored' }),
63
+ marc_field(tag: '880', indicator2: '', subfields: { i: 'Alt. Prefix:', a: 'Alt. Author', t: 'Alt. Aphorisms',
64
+ '6': '700' })]
65
+ end
66
+
67
+ it 'returns specified subfield values from specified field with blank indicator2' do
68
+ values = helper.related_work_show record, relator_map
69
+ expect(values).to contain_exactly 'Translation of: Some Author Aphorisms, Translator',
70
+ 'Alt. Prefix: Alt. Author Alt. Aphorisms'
71
+ expect(values).not_to include 'Ignored'
72
+ end
73
+ end
74
+
75
+ describe '.contains_show' do
76
+ let(:fields) do
77
+ [marc_field(tag: '700', indicator2: '2', subfields: { i: 'Container of (work):', a: 'Some Author', t: 'Works',
78
+ '4': 'aut' }),
79
+ marc_field(tag: '700', indicator2: '', subfields: { i: 'Adaptation of (work):', t: 'Ignored' }),
80
+ marc_field(tag: '880', indicator2: '2', subfields: { i: 'Alt. Prefix:', a: 'Alt. Name', '6': '700' })]
81
+ end
82
+
83
+ it "returns specified subfield values from specified field with '2' in indicator2" do
84
+ values = helper.contains_show record, relator_map
85
+ expect(values).to contain_exactly 'Alt. Prefix: Alt. Name', 'Container of: Some Author Works, Author'
86
+ expect(values).not_to include 'Ignored'
87
+ end
88
+ end
89
+
90
+ describe '.constituent_unit_show' do
91
+ let(:fields) do
92
+ [marc_field(tag: '774', subfields: { i: 'Container of (manifestation)', a: 'Person, Some',
93
+ t: 'Private Correspondences', w: '(OCoLC)12345' }),
94
+ marc_field(tag: '880', subfields: { '6': '774', a: 'Alt. Person', t: 'Alt. Title' })]
95
+ end
96
+
97
+ it 'returns specified subfield values from fields and linked alternate' do
98
+ expect(helper.constituent_unit_show(record)).to(
99
+ contain_exactly('Alt. Person Alt. Title',
100
+ 'Container of (manifestation) Person, Some Private Correspondences')
101
+ )
102
+ end
103
+ end
104
+
105
+ describe '.has_supplement_show' do
106
+ let(:fields) do
107
+ [marc_field(tag: '770', subfields: { i: 'Supplement (work)', a: 'Person, Some',
108
+ t: 'Diaries, errata', w: '(OCoLC)12345' }),
109
+ marc_field(tag: '880', subfields: { '6': '770', a: 'Alt. Person', t: 'Alt. Title' })]
110
+ end
111
+
112
+ it 'return all subfield values for the field and linked alternate' do
113
+ expect(helper.has_supplement_show(record)).to(
114
+ contain_exactly(
115
+ 'Alt. Person Alt. Title', 'Supplement (work) Person, Some Diaries, errata (OCoLC)12345'
116
+ )
117
+ )
118
+ end
119
+ end
120
+ end