pennmarc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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