mods 2.4.1 → 3.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +24 -0
- data/.gitignore +1 -0
- data/README.md +0 -1
- data/lib/mods/date.rb +54 -17
- data/lib/mods/marc_country_codes.rb +12 -10
- data/lib/mods/nom_terminology.rb +109 -845
- data/lib/mods/reader.rb +9 -39
- data/lib/mods/record.rb +13 -28
- data/lib/mods/version.rb +1 -1
- data/mods.gemspec +2 -2
- data/spec/fixture_data/hp566jq8781.xml +334 -0
- data/spec/integration/parker_spec.rb +217 -0
- data/spec/{date_spec.rb → lib/date_spec.rb} +9 -1
- data/spec/lib/language_spec.rb +123 -0
- data/spec/lib/location_spec.rb +175 -0
- data/spec/lib/name_spec.rb +368 -0
- data/spec/lib/origin_info_spec.rb +134 -0
- data/spec/lib/part_spec.rb +162 -0
- data/spec/lib/physical_description_spec.rb +72 -0
- data/spec/{reader_spec.rb → lib/reader_spec.rb} +1 -41
- data/spec/lib/record_info_spec.rb +114 -0
- data/spec/lib/record_spec.rb +287 -0
- data/spec/lib/related_item_spec.rb +124 -0
- data/spec/lib/subject_spec.rb +427 -0
- data/spec/lib/title_spec.rb +108 -0
- data/spec/lib/top_level_elmnts_simple_spec.rb +169 -0
- data/spec/spec_helper.rb +86 -5
- data/spec/support/fixtures.rb +9 -0
- metadata +49 -44
- data/.travis.yml +0 -16
- data/spec/language_spec.rb +0 -118
- data/spec/location_spec.rb +0 -295
- data/spec/name_spec.rb +0 -759
- data/spec/origin_info_spec.rb +0 -447
- data/spec/part_spec.rb +0 -471
- data/spec/physical_description_spec.rb +0 -144
- data/spec/record_info_spec.rb +0 -493
- data/spec/record_spec.rb +0 -356
- data/spec/related_item_spec.rb +0 -305
- data/spec/subject_spec.rb +0 -809
- data/spec/title_spec.rb +0 -226
- data/spec/top_level_elmnts_simple_spec.rb +0 -369
data/spec/record_info_spec.rb
DELETED
@@ -1,493 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Mods <recordInfo> Element" do
|
4
|
-
before(:all) do
|
5
|
-
@mods_rec = Mods::Record.new
|
6
|
-
@ns_decl = "xmlns='#{Mods::MODS_NS}'"
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should translate language codes" do
|
10
|
-
skip "to be implemented"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should normalize dates" do
|
14
|
-
skip "to be implemented"
|
15
|
-
end
|
16
|
-
|
17
|
-
context "basic <record_info> terminology pieces" do
|
18
|
-
|
19
|
-
context "WITH namespaces" do
|
20
|
-
before(:all) do
|
21
|
-
@rec_info = @mods_rec.from_str("<mods #{@ns_decl}><recordInfo>
|
22
|
-
<recordContentSource authority='marcorg'>RQE</recordContentSource>
|
23
|
-
<recordCreationDate encoding='marc'>890517</recordCreationDate>
|
24
|
-
<recordIdentifier source='SIRSI'>a9079953</recordIdentifier>
|
25
|
-
</recordInfo></mods>").record_info
|
26
|
-
@rec_info2 = @mods_rec.from_str("<mods #{@ns_decl}><recordInfo>
|
27
|
-
<descriptionStandard>aacr2</descriptionStandard>
|
28
|
-
<recordContentSource authority='marcorg'>AU@</recordContentSource>
|
29
|
-
<recordCreationDate encoding='marc'>050921</recordCreationDate>
|
30
|
-
<recordIdentifier source='SIRSI'>a8837534</recordIdentifier>
|
31
|
-
<languageOfCataloging>
|
32
|
-
<languageTerm authority='iso639-2b' type='code'>eng</languageTerm>
|
33
|
-
</languageOfCataloging>
|
34
|
-
</recordInfo></mods>").record_info
|
35
|
-
@bnf = @mods_rec.from_str("<mods #{@ns_decl}><recordInfo>
|
36
|
-
<recordContentSource>TEI Description</recordContentSource>
|
37
|
-
<recordCreationDate encoding='w3cdtf'>2011-12-07</recordCreationDate>
|
38
|
-
<recordIdentifier source='BNF 2166'/>
|
39
|
-
<recordOrigin/>
|
40
|
-
<languageOfCataloging>
|
41
|
-
<languageTerm authority='iso639-2b'>fra</languageTerm>
|
42
|
-
</languageOfCataloging>
|
43
|
-
</recordInfo></mods>").record_info
|
44
|
-
@rlin = @mods_rec.from_str("<mods #{@ns_decl}><recordInfo>
|
45
|
-
<descriptionStandard>appm</descriptionStandard>
|
46
|
-
<recordContentSource authority='marcorg'>CSt</recordContentSource>
|
47
|
-
<recordCreationDate encoding='marc'>850416</recordCreationDate>
|
48
|
-
<recordChangeDate encoding='iso8601'>19991012150824.0</recordChangeDate>
|
49
|
-
<recordIdentifier source='CStRLIN'>a4083219</recordIdentifier>
|
50
|
-
</recordInfo></mods>").record_info
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should be a NodeSet" do
|
54
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
55
|
-
end
|
56
|
-
it "should have as many members as there are <recordInfo> elements in the xml" do
|
57
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.size).to eq(1) }
|
58
|
-
end
|
59
|
-
it "should recognize language attributes on <recordInfo> element" do
|
60
|
-
skip "problem with xml:lang"
|
61
|
-
Mods::LANG_ATTRIBS.each { |a|
|
62
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo #{a}='val'><recordOrigin>nowhere</recordOrigin></recordInfo></mods>")
|
63
|
-
expect(@mods_rec.record_info.send(a.to_sym)).to eq(['val'])
|
64
|
-
}
|
65
|
-
end
|
66
|
-
it "should recognize displayLabel attribute on <recordInfo> element" do
|
67
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo displayLabel='val'><recordOrigin>nowhere</recordOrigin></recordInfo></mods>")
|
68
|
-
expect(@mods_rec.record_info.displayLabel).to eq(['val'])
|
69
|
-
end
|
70
|
-
|
71
|
-
context "<recordContentSource> child element" do
|
72
|
-
it "should be a NodeSet" do
|
73
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordContentSource).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
74
|
-
end
|
75
|
-
it "recordContentSource NodeSet should have as many Nodes as there are <recordContentSource> elements in the xml" do
|
76
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordContentSource.size).to eq(1) }
|
77
|
-
end
|
78
|
-
it "text should get element value" do
|
79
|
-
expect(@rec_info.recordContentSource.map { |n| n.text }).to eq(["RQE"])
|
80
|
-
expect(@rec_info2.recordContentSource.map { |n| n.text }).to eq(["AU@"])
|
81
|
-
expect(@bnf.recordContentSource.map { |n| n.text }).to eq(["TEI Description"])
|
82
|
-
expect(@rlin.recordContentSource.map { |n| n.text }).to eq(["CSt"])
|
83
|
-
end
|
84
|
-
it "should recognize authority attribute" do
|
85
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordContentSource.authority).to eq(['marcorg']) }
|
86
|
-
expect(@bnf.recordContentSource.authority.size).to eq(0)
|
87
|
-
end
|
88
|
-
it "should recognize all authority attributes" do
|
89
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
90
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><recordContentSource #{a}='attr_val'>zzz</recordContentSource></recordInfo></mods>")
|
91
|
-
expect(@mods_rec.record_info.recordContentSource.send(a.to_sym)).to eq(['attr_val'])
|
92
|
-
}
|
93
|
-
end
|
94
|
-
end # <recordContentSource>
|
95
|
-
|
96
|
-
context "<recordCreationDate> child element" do
|
97
|
-
it "should be a NodeSet" do
|
98
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordCreationDate).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
99
|
-
end
|
100
|
-
it "recordCreationDate NodeSet should have as many Nodes as there are <recordCreationDate> elements in the xml" do
|
101
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordCreationDate.size).to eq(1) }
|
102
|
-
end
|
103
|
-
it "text should get element value" do
|
104
|
-
expect(@rec_info.recordCreationDate.map { |n| n.text }).to eq(['890517'])
|
105
|
-
expect(@rec_info2.recordCreationDate.map { |n| n.text }).to eq(['050921'])
|
106
|
-
expect(@bnf.recordCreationDate.map { |n| n.text }).to eq(['2011-12-07'])
|
107
|
-
expect(@rlin.recordCreationDate.map { |n| n.text }).to eq(['850416'])
|
108
|
-
end
|
109
|
-
it "should recognize encoding attribute" do
|
110
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordCreationDate.encoding).to eq(['marc']) }
|
111
|
-
expect(@bnf.recordCreationDate.encoding).to eq(['w3cdtf'])
|
112
|
-
end
|
113
|
-
it "should recognize all date attributes" do
|
114
|
-
Mods::DATE_ATTRIBS.each { |a|
|
115
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><recordCreationDate #{a}='attr_val'>zzz</recordCreationDate></recordInfo></mods>")
|
116
|
-
expect(@mods_rec.record_info.recordCreationDate.send(a.to_sym)).to eq(['attr_val'])
|
117
|
-
}
|
118
|
-
end
|
119
|
-
end # <recordCreationDate>
|
120
|
-
|
121
|
-
context "<recordChangeDate> child element" do
|
122
|
-
it "should be a NodeSet" do
|
123
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordChangeDate).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
124
|
-
end
|
125
|
-
it "recordChangeDate NodeSet should have as many Nodes as there are <recordChangeDate> elements in the xml" do
|
126
|
-
[@rec_info, @rec_info2, @bnf].each { |ri| expect(ri.recordChangeDate.size).to eq(0) }
|
127
|
-
expect(@rlin.recordChangeDate.size).to eq(1)
|
128
|
-
end
|
129
|
-
it "text should get element value" do
|
130
|
-
expect(@rlin.recordChangeDate.map { |n| n.text }).to eq(['19991012150824.0'])
|
131
|
-
end
|
132
|
-
it "should recognize encoding attribute" do
|
133
|
-
expect(@rlin.recordChangeDate.encoding).to eq(['iso8601'])
|
134
|
-
end
|
135
|
-
it "should recognize all date attributes" do
|
136
|
-
Mods::DATE_ATTRIBS.each { |a|
|
137
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><recordChangeDate #{a}='attr_val'>zzz</recordChangeDate></recordInfo></mods>")
|
138
|
-
expect(@mods_rec.record_info.recordChangeDate.send(a.to_sym)).to eq(['attr_val'])
|
139
|
-
}
|
140
|
-
end
|
141
|
-
end # <recordChangeDate>
|
142
|
-
|
143
|
-
context "<recordIdentifier> child element" do
|
144
|
-
it "should be a NodeSet" do
|
145
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordIdentifier).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
146
|
-
end
|
147
|
-
it "recordIdentifier NodeSet should have as many Nodes as there are <recordIdentifier> elements in the xml" do
|
148
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordIdentifier.size).to eq(1) }
|
149
|
-
end
|
150
|
-
it "text should get element value" do
|
151
|
-
expect(@rec_info.recordIdentifier.map { |n| n.text }).to eq(['a9079953'])
|
152
|
-
expect(@rec_info2.recordIdentifier.map { |n| n.text }).to eq(['a8837534'])
|
153
|
-
expect(@bnf.recordIdentifier.map { |n| n.text }).to eq([''])
|
154
|
-
expect(@rlin.recordIdentifier.map { |n| n.text }).to eq(['a4083219'])
|
155
|
-
end
|
156
|
-
it "should recognize source attribute" do
|
157
|
-
[@rec_info, @rec_info2].each { |ri| expect(ri.recordIdentifier.source).to eq(['SIRSI']) }
|
158
|
-
expect(@bnf.recordIdentifier.source).to eq(['BNF 2166'])
|
159
|
-
expect(@rlin.recordIdentifier.source).to eq(['CStRLIN'])
|
160
|
-
end
|
161
|
-
it "should allow a source attribute without element content" do
|
162
|
-
expect(@bnf.recordIdentifier.source).to eq(['BNF 2166'])
|
163
|
-
expect(@bnf.recordIdentifier.map { |n| n.text }).to eq([''])
|
164
|
-
end
|
165
|
-
end # <recordIdentifier>
|
166
|
-
|
167
|
-
context "<recordOrigin> child element" do
|
168
|
-
it "should be a NodeSet" do
|
169
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordOrigin).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
170
|
-
end
|
171
|
-
it "recordOrigin NodeSet should have as many Nodes as there are <recordOrigin> elements in the xml" do
|
172
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordOrigin.size).to eq(0) }
|
173
|
-
expect(@bnf.recordOrigin.size).to eq(1)
|
174
|
-
end
|
175
|
-
it "text should get element value" do
|
176
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><recordOrigin>human prepared</recordOrigin></recordInfo></mods>")
|
177
|
-
expect(@mods_rec.record_info.recordOrigin.map {|n| n.text }).to eq(['human prepared'])
|
178
|
-
expect(@bnf.recordOrigin.map { |n| n.text }).to eq([''])
|
179
|
-
end
|
180
|
-
end # <recordOrigin>
|
181
|
-
|
182
|
-
context "<languageOfCataloging> child element" do
|
183
|
-
it "should be a NodeSet" do
|
184
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.languageOfCataloging).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
185
|
-
end
|
186
|
-
it "languageOfCataloging NodeSet should have as many Nodes as there are <languageOfCataloging> elements in the xml" do
|
187
|
-
[@rec_info2, @bnf].each { |ri| expect(ri.languageOfCataloging.size).to eq(1) }
|
188
|
-
[@rec_info, @rlin].each { |ri| expect(ri.languageOfCataloging.size).to eq(0) }
|
189
|
-
end
|
190
|
-
it "text should get element value" do
|
191
|
-
# this example is from http://www.loc.gov/standards/mods/v3/mods-userguide-elements.html
|
192
|
-
# though it doesn't match the doc at http://www.loc.gov/standards/mods/mods-outline.html#recordInfo
|
193
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><languageOfCataloging authority='iso639-2b'>fre</languageOfCataloging></recordInfo></mods>")
|
194
|
-
expect(@mods_rec.record_info.languageOfCataloging.map { |n| n.text }).to eq(['fre'])
|
195
|
-
end
|
196
|
-
it "authority should get attribute value" do
|
197
|
-
# this example is from http://www.loc.gov/standards/mods/v3/mods-userguide-elements.html
|
198
|
-
# though it doesn't match the doc at http://www.loc.gov/standards/mods/mods-outline.html#recordInfo
|
199
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><languageOfCataloging authority='iso639-2b'>fre</languageOfCataloging></recordInfo></mods>")
|
200
|
-
expect(@mods_rec.record_info.languageOfCataloging.authority).to eq(['iso639-2b'])
|
201
|
-
end
|
202
|
-
|
203
|
-
# from http://www.loc.gov/standards/mods/userguide/recordinfo.html#languageofcataloging
|
204
|
-
# objectPart attribute defined for consistency with <language> . Unlikely to be used with <languageOfCataloging>
|
205
|
-
it "objectType should get attribute value" do
|
206
|
-
skip "<languageOfCataloging objectType=''> to be implemented ... maybe ..."
|
207
|
-
end
|
208
|
-
|
209
|
-
context "<languageTerm> child element" do
|
210
|
-
it "text should get element value" do
|
211
|
-
expect(@rec_info2.languageOfCataloging.languageTerm.map { |n| n.text }).to eq(['eng'])
|
212
|
-
expect(@bnf.languageOfCataloging.languageTerm.map { |n| n.text }).to eq(['fra'])
|
213
|
-
end
|
214
|
-
it "should recognize all authority attributes" do
|
215
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
216
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><languageOfCataloging><languageTerm #{a}='attr_val'>zzz</languageTerm></languageOfCataloging></recordInfo></mods>")
|
217
|
-
expect(@mods_rec.record_info.languageOfCataloging.languageTerm.send(a.to_sym)).to eq(['attr_val'])
|
218
|
-
}
|
219
|
-
end
|
220
|
-
it "should recognize the type attribute with type_at term" do
|
221
|
-
expect(@rec_info2.languageOfCataloging.languageTerm.type_at).to eq(['code'])
|
222
|
-
end
|
223
|
-
end # <languageTerm>
|
224
|
-
|
225
|
-
context "<scriptTerm> child element" do
|
226
|
-
it "should do something" do
|
227
|
-
skip "<recordInfo><languageOfCataloging><scriptTerm> to be implemented"
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end # <languageOfCataloging>
|
231
|
-
|
232
|
-
context "<descriptionStandard> child element" do
|
233
|
-
it "should be a NodeSet" do
|
234
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.descriptionStandard).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
235
|
-
end
|
236
|
-
it "descriptionStandard NodeSet should have as many Nodes as there are <descriptionStandard> elements in the xml" do
|
237
|
-
[@rec_info, @bnf].each { |ri| expect(ri.descriptionStandard.size).to eq(0) }
|
238
|
-
[@rec_info2, @rlin].each { |ri| expect(ri.descriptionStandard.size).to eq(1) }
|
239
|
-
end
|
240
|
-
it "text should get element value" do
|
241
|
-
expect(@rec_info2.descriptionStandard.map { |n| n.text }).to eq(['aacr2'])
|
242
|
-
expect(@rlin.descriptionStandard.map { |n| n.text }).to eq(['appm'])
|
243
|
-
expect(@bnf.descriptionStandard.map { |n| n.text }).to eq([])
|
244
|
-
end
|
245
|
-
it "should recognize all authority attributes" do
|
246
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
247
|
-
@mods_rec.from_str("<mods #{@ns_decl}><recordInfo><descriptionStandard #{a}='attr_val'>zzz</descriptionStandard></recordInfo></mods>")
|
248
|
-
expect(@mods_rec.record_info.descriptionStandard.send(a.to_sym)).to eq(['attr_val'])
|
249
|
-
}
|
250
|
-
end
|
251
|
-
end # <descriptionStandard>
|
252
|
-
|
253
|
-
end # WITH namespaces
|
254
|
-
|
255
|
-
context "WITHOUT namespaces" do
|
256
|
-
before(:all) do
|
257
|
-
@rec_info = @mods_rec.from_str("<mods><recordInfo>
|
258
|
-
<recordContentSource authority='marcorg'>RQE</recordContentSource>
|
259
|
-
<recordCreationDate encoding='marc'>890517</recordCreationDate>
|
260
|
-
<recordIdentifier source='SIRSI'>a9079953</recordIdentifier>
|
261
|
-
</recordInfo></mods>", false).record_info
|
262
|
-
@rec_info2 = @mods_rec.from_str("<mods><recordInfo>
|
263
|
-
<descriptionStandard>aacr2</descriptionStandard>
|
264
|
-
<recordContentSource authority='marcorg'>AU@</recordContentSource>
|
265
|
-
<recordCreationDate encoding='marc'>050921</recordCreationDate>
|
266
|
-
<recordIdentifier source='SIRSI'>a8837534</recordIdentifier>
|
267
|
-
<languageOfCataloging>
|
268
|
-
<languageTerm authority='iso639-2b' type='code'>eng</languageTerm>
|
269
|
-
</languageOfCataloging>
|
270
|
-
</recordInfo></mods>", false).record_info
|
271
|
-
@bnf = @mods_rec.from_str("<mods><recordInfo>
|
272
|
-
<recordContentSource>TEI Description</recordContentSource>
|
273
|
-
<recordCreationDate encoding='w3cdtf'>2011-12-07</recordCreationDate>
|
274
|
-
<recordIdentifier source='BNF 2166'/>
|
275
|
-
<recordOrigin/>
|
276
|
-
<languageOfCataloging>
|
277
|
-
<languageTerm authority='iso639-2b'>fra</languageTerm>
|
278
|
-
</languageOfCataloging>
|
279
|
-
</recordInfo></mods>", false).record_info
|
280
|
-
@rlin = @mods_rec.from_str("<mods><recordInfo>
|
281
|
-
<descriptionStandard>appm</descriptionStandard>
|
282
|
-
<recordContentSource authority='marcorg'>CSt</recordContentSource>
|
283
|
-
<recordCreationDate encoding='marc'>850416</recordCreationDate>
|
284
|
-
<recordChangeDate encoding='iso8601'>19991012150824.0</recordChangeDate>
|
285
|
-
<recordIdentifier source='CStRLIN'>a4083219</recordIdentifier>
|
286
|
-
</recordInfo></mods>", false).record_info
|
287
|
-
end
|
288
|
-
|
289
|
-
it "should be a NodeSet" do
|
290
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
291
|
-
end
|
292
|
-
it "should have as many members as there are <recordInfo> elements in the xml" do
|
293
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.size).to eq(1) }
|
294
|
-
end
|
295
|
-
it "should recognize language attributes on <recordInfo> element" do
|
296
|
-
skip "problem with xml:lang"
|
297
|
-
Mods::LANG_ATTRIBS.each { |a|
|
298
|
-
@mods_rec.from_str("<mods><recordInfo #{a}='val'><recordOrigin>nowhere</recordOrigin></recordInfo></mods>", false)
|
299
|
-
expect(@mods_rec.record_info.send(a.to_sym)).to eq(['val'])
|
300
|
-
}
|
301
|
-
end
|
302
|
-
it "should recognize displayLabel attribute on <recordInfo> element" do
|
303
|
-
@mods_rec.from_str("<mods><recordInfo displayLabel='val'><recordOrigin>nowhere</recordOrigin></recordInfo></mods>", false)
|
304
|
-
expect(@mods_rec.record_info.displayLabel).to eq(['val'])
|
305
|
-
end
|
306
|
-
|
307
|
-
context "<recordContentSource> child element" do
|
308
|
-
it "should be a NodeSet" do
|
309
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordContentSource).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
310
|
-
end
|
311
|
-
it "recordContentSource NodeSet should have as many Nodes as there are <recordContentSource> elements in the xml" do
|
312
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordContentSource.size).to eq(1) }
|
313
|
-
end
|
314
|
-
it "text should get element value" do
|
315
|
-
expect(@rec_info.recordContentSource.map { |n| n.text }).to eq(["RQE"])
|
316
|
-
expect(@rec_info2.recordContentSource.map { |n| n.text }).to eq(["AU@"])
|
317
|
-
expect(@bnf.recordContentSource.map { |n| n.text }).to eq(["TEI Description"])
|
318
|
-
expect(@rlin.recordContentSource.map { |n| n.text }).to eq(["CSt"])
|
319
|
-
end
|
320
|
-
it "should recognize authority attribute" do
|
321
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordContentSource.authority).to eq(['marcorg']) }
|
322
|
-
expect(@bnf.recordContentSource.authority.size).to eq(0)
|
323
|
-
end
|
324
|
-
it "should recognize all authority attributes" do
|
325
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
326
|
-
@mods_rec.from_str("<mods><recordInfo><recordContentSource #{a}='attr_val'>zzz</recordContentSource></recordInfo></mods>", false)
|
327
|
-
expect(@mods_rec.record_info.recordContentSource.send(a.to_sym)).to eq(['attr_val'])
|
328
|
-
}
|
329
|
-
end
|
330
|
-
end # <recordContentSource>
|
331
|
-
|
332
|
-
context "<recordCreationDate> child element" do
|
333
|
-
it "should be a NodeSet" do
|
334
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordCreationDate).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
335
|
-
end
|
336
|
-
it "recordCreationDate NodeSet should have as many Nodes as there are <recordCreationDate> elements in the xml" do
|
337
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordCreationDate.size).to eq(1) }
|
338
|
-
end
|
339
|
-
it "text should get element value" do
|
340
|
-
expect(@rec_info.recordCreationDate.map { |n| n.text }).to eq(['890517'])
|
341
|
-
expect(@rec_info2.recordCreationDate.map { |n| n.text }).to eq(['050921'])
|
342
|
-
expect(@bnf.recordCreationDate.map { |n| n.text }).to eq(['2011-12-07'])
|
343
|
-
expect(@rlin.recordCreationDate.map { |n| n.text }).to eq(['850416'])
|
344
|
-
end
|
345
|
-
it "should recognize encoding attribute" do
|
346
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordCreationDate.encoding).to eq(['marc']) }
|
347
|
-
expect(@bnf.recordCreationDate.encoding).to eq(['w3cdtf'])
|
348
|
-
end
|
349
|
-
it "should recognize all date attributes" do
|
350
|
-
Mods::DATE_ATTRIBS.each { |a|
|
351
|
-
@mods_rec.from_str("<mods><recordInfo><recordCreationDate #{a}='attr_val'>zzz</recordCreationDate></recordInfo></mods>", false)
|
352
|
-
expect(@mods_rec.record_info.recordCreationDate.send(a.to_sym)).to eq(['attr_val'])
|
353
|
-
}
|
354
|
-
end
|
355
|
-
end # <recordCreationDate>
|
356
|
-
|
357
|
-
context "<recordChangeDate> child element" do
|
358
|
-
it "should be a NodeSet" do
|
359
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordChangeDate).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
360
|
-
end
|
361
|
-
it "recordChangeDate NodeSet should have as many Nodes as there are <recordChangeDate> elements in the xml" do
|
362
|
-
[@rec_info, @rec_info2, @bnf].each { |ri| expect(ri.recordChangeDate.size).to eq(0) }
|
363
|
-
expect(@rlin.recordChangeDate.size).to eq(1)
|
364
|
-
end
|
365
|
-
it "text should get element value" do
|
366
|
-
expect(@rlin.recordChangeDate.map { |n| n.text }).to eq(['19991012150824.0'])
|
367
|
-
end
|
368
|
-
it "should recognize encoding attribute" do
|
369
|
-
expect(@rlin.recordChangeDate.encoding).to eq(['iso8601'])
|
370
|
-
end
|
371
|
-
it "should recognize all date attributes" do
|
372
|
-
Mods::DATE_ATTRIBS.each { |a|
|
373
|
-
@mods_rec.from_str("<mods><recordInfo><recordChangeDate #{a}='attr_val'>zzz</recordChangeDate></recordInfo></mods>", false)
|
374
|
-
expect(@mods_rec.record_info.recordChangeDate.send(a.to_sym)).to eq(['attr_val'])
|
375
|
-
}
|
376
|
-
end
|
377
|
-
end # <recordChangeDate>
|
378
|
-
|
379
|
-
context "<recordIdentifier> child element" do
|
380
|
-
it "should be a NodeSet" do
|
381
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordIdentifier).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
382
|
-
end
|
383
|
-
it "recordIdentifier NodeSet should have as many Nodes as there are <recordIdentifier> elements in the xml" do
|
384
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordIdentifier.size).to eq(1) }
|
385
|
-
end
|
386
|
-
it "text should get element value" do
|
387
|
-
expect(@rec_info.recordIdentifier.map { |n| n.text }).to eq(['a9079953'])
|
388
|
-
expect(@rec_info2.recordIdentifier.map { |n| n.text }).to eq(['a8837534'])
|
389
|
-
expect(@bnf.recordIdentifier.map { |n| n.text }).to eq([''])
|
390
|
-
expect(@rlin.recordIdentifier.map { |n| n.text }).to eq(['a4083219'])
|
391
|
-
end
|
392
|
-
it "should recognize source attribute" do
|
393
|
-
[@rec_info, @rec_info2].each { |ri| expect(ri.recordIdentifier.source).to eq(['SIRSI']) }
|
394
|
-
expect(@bnf.recordIdentifier.source).to eq(['BNF 2166'])
|
395
|
-
expect(@rlin.recordIdentifier.source).to eq(['CStRLIN'])
|
396
|
-
end
|
397
|
-
it "should allow a source attribute without element content" do
|
398
|
-
expect(@bnf.recordIdentifier.source).to eq(['BNF 2166'])
|
399
|
-
expect(@bnf.recordIdentifier.map { |n| n.text }).to eq([''])
|
400
|
-
end
|
401
|
-
end # <recordIdentifier>
|
402
|
-
|
403
|
-
context "<recordOrigin> child element" do
|
404
|
-
it "should be a NodeSet" do
|
405
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.recordOrigin).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
406
|
-
end
|
407
|
-
it "recordOrigin NodeSet should have as many Nodes as there are <recordOrigin> elements in the xml" do
|
408
|
-
[@rec_info, @rec_info2, @rlin].each { |ri| expect(ri.recordOrigin.size).to eq(0) }
|
409
|
-
expect(@bnf.recordOrigin.size).to eq(1)
|
410
|
-
end
|
411
|
-
it "text should get element value" do
|
412
|
-
@mods_rec.from_str("<mods><recordInfo><recordOrigin>human prepared</recordOrigin></recordInfo></mods>", false)
|
413
|
-
expect(@mods_rec.record_info.recordOrigin.map {|n| n.text }).to eq(['human prepared'])
|
414
|
-
expect(@bnf.recordOrigin.map { |n| n.text }).to eq([''])
|
415
|
-
end
|
416
|
-
end # <recordOrigin>
|
417
|
-
|
418
|
-
context "<languageOfCataloging> child element" do
|
419
|
-
it "should be a NodeSet" do
|
420
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.languageOfCataloging).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
421
|
-
end
|
422
|
-
it "languageOfCataloging NodeSet should have as many Nodes as there are <languageOfCataloging> elements in the xml" do
|
423
|
-
[@rec_info2, @bnf].each { |ri| expect(ri.languageOfCataloging.size).to eq(1) }
|
424
|
-
[@rec_info, @rlin].each { |ri| expect(ri.languageOfCataloging.size).to eq(0) }
|
425
|
-
end
|
426
|
-
it "text should get element value" do
|
427
|
-
# this example is from http://www.loc.gov/standards/mods/v3/mods-userguide-elements.html
|
428
|
-
# though it doesn't match the doc at http://www.loc.gov/standards/mods/mods-outline.html#recordInfo
|
429
|
-
@mods_rec.from_str("<mods><recordInfo><languageOfCataloging authority='iso639-2b'>fre</languageOfCataloging></recordInfo></mods>", false)
|
430
|
-
expect(@mods_rec.record_info.languageOfCataloging.map { |n| n.text }).to eq(['fre'])
|
431
|
-
end
|
432
|
-
it "authority should get attribute value" do
|
433
|
-
# this example is from http://www.loc.gov/standards/mods/v3/mods-userguide-elements.html
|
434
|
-
# though it doesn't match the doc at http://www.loc.gov/standards/mods/mods-outline.html#recordInfo
|
435
|
-
@mods_rec.from_str("<mods><recordInfo><languageOfCataloging authority='iso639-2b'>fre</languageOfCataloging></recordInfo></mods>", false)
|
436
|
-
expect(@mods_rec.record_info.languageOfCataloging.authority).to eq(['iso639-2b'])
|
437
|
-
end
|
438
|
-
|
439
|
-
# from http://www.loc.gov/standards/mods/userguide/recordinfo.html#languageofcataloging
|
440
|
-
# objectPart attribute defined for consistency with <language> . Unlikely to be used with <languageOfCataloging>
|
441
|
-
it "objectType should get attribute value" do
|
442
|
-
skip "<languageOfCataloging objectType=''> to be implemented ... maybe ..."
|
443
|
-
end
|
444
|
-
|
445
|
-
context "<languageTerm> child element" do
|
446
|
-
it "text should get element value" do
|
447
|
-
expect(@rec_info2.languageOfCataloging.languageTerm.map { |n| n.text }).to eq(['eng'])
|
448
|
-
expect(@bnf.languageOfCataloging.languageTerm.map { |n| n.text }).to eq(['fra'])
|
449
|
-
end
|
450
|
-
it "should recognize all authority attributes" do
|
451
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
452
|
-
@mods_rec.from_str("<mods><recordInfo><languageOfCataloging><languageTerm #{a}='attr_val'>zzz</languageTerm></languageOfCataloging></recordInfo></mods>", false)
|
453
|
-
expect(@mods_rec.record_info.languageOfCataloging.languageTerm.send(a.to_sym)).to eq(['attr_val'])
|
454
|
-
}
|
455
|
-
end
|
456
|
-
it "should recognize the type attribute with type_at term" do
|
457
|
-
expect(@rec_info2.languageOfCataloging.languageTerm.type_at).to eq(['code'])
|
458
|
-
end
|
459
|
-
end # <languageTerm>
|
460
|
-
|
461
|
-
context "<scriptTerm> child element" do
|
462
|
-
it "should do something" do
|
463
|
-
skip "<recordInfo><languageOfCataloging><scriptTerm> to be implemented"
|
464
|
-
end
|
465
|
-
end
|
466
|
-
end # <languageOfCataloging>
|
467
|
-
|
468
|
-
context "<descriptionStandard> child element" do
|
469
|
-
it "should be a NodeSet" do
|
470
|
-
[@rec_info, @rec_info2, @bnf, @rlin].each { |ri| expect(ri.descriptionStandard).to be_an_instance_of(Nokogiri::XML::NodeSet) }
|
471
|
-
end
|
472
|
-
it "descriptionStandard NodeSet should have as many Nodes as there are <descriptionStandard> elements in the xml" do
|
473
|
-
[@rec_info, @bnf].each { |ri| expect(ri.descriptionStandard.size).to eq(0) }
|
474
|
-
[@rec_info2, @rlin].each { |ri| expect(ri.descriptionStandard.size).to eq(1) }
|
475
|
-
end
|
476
|
-
it "text should get element value" do
|
477
|
-
expect(@rec_info2.descriptionStandard.map { |n| n.text }).to eq(['aacr2'])
|
478
|
-
expect(@rlin.descriptionStandard.map { |n| n.text }).to eq(['appm'])
|
479
|
-
expect(@bnf.descriptionStandard.map { |n| n.text }).to eq([])
|
480
|
-
end
|
481
|
-
it "should recognize all authority attributes" do
|
482
|
-
Mods::AUTHORITY_ATTRIBS.each { |a|
|
483
|
-
@mods_rec.from_str("<mods><recordInfo><descriptionStandard #{a}='attr_val'>zzz</descriptionStandard></recordInfo></mods>", false)
|
484
|
-
expect(@mods_rec.record_info.descriptionStandard.send(a.to_sym)).to eq(['attr_val'])
|
485
|
-
}
|
486
|
-
end
|
487
|
-
end # <descriptionStandard>
|
488
|
-
|
489
|
-
end # WITHOUT namespaces
|
490
|
-
|
491
|
-
end # basic <record_info> terminology pieces
|
492
|
-
|
493
|
-
end
|