mods 0.0.14 → 0.0.15
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.
- data/README.rdoc +1 -1
- data/lib/mods/nom_terminology.rb +445 -8
- data/lib/mods/reader.rb +3 -3
- data/lib/mods/record.rb +6 -7
- data/lib/mods/version.rb +1 -1
- data/spec/language_spec.rb +100 -73
- data/spec/location_spec.rb +269 -119
- data/spec/name_spec.rb +223 -197
- data/spec/origin_info_spec.rb +315 -190
- data/spec/part_spec.rb +411 -176
- data/spec/physical_description_spec.rb +120 -55
- data/spec/reader_spec.rb +76 -61
- data/spec/record_info_spec.rb +448 -206
- data/spec/record_spec.rb +192 -7
- data/spec/related_item_spec.rb +275 -124
- data/spec/subject_spec.rb +666 -339
- data/spec/title_spec.rb +204 -89
- data/spec/top_level_elmnts_simple_spec.rb +324 -145
- metadata +79 -98
data/spec/origin_info_spec.rb
CHANGED
@@ -4,57 +4,58 @@ require 'spec_helper'
|
|
4
4
|
describe "Mods <originInfo> Element" do
|
5
5
|
before(:all) do
|
6
6
|
@mods_rec = Mods::Record.new
|
7
|
-
@
|
7
|
+
@ns_decl = "xmlns='#{Mods::MODS_NS}'"
|
8
|
+
@kolb = "<mods>
|
8
9
|
<originInfo>
|
9
10
|
<dateCreated>1537-1553.</dateCreated>
|
10
|
-
<dateCreated point=
|
11
|
-
<dateCreated point=
|
12
|
-
</originInfo></mods>
|
13
|
-
@reid_dennis =
|
14
|
-
@walters =
|
11
|
+
<dateCreated point='start'>1537</dateCreated>
|
12
|
+
<dateCreated point='end'>1553</dateCreated>
|
13
|
+
</originInfo></mods>"
|
14
|
+
@reid_dennis = "<mods><originInfo><dateIssued>1852</dateIssued></originInfo></mods>"
|
15
|
+
@walters = "<mods><originInfo>
|
15
16
|
<place>
|
16
|
-
<placeTerm type=
|
17
|
+
<placeTerm type='text'>Iran</placeTerm>
|
17
18
|
</place>
|
18
19
|
<dateIssued>22 Rabīʿ II 889 AH / 1484 CE</dateIssued>
|
19
20
|
<issuance>monographic</issuance>
|
20
21
|
</originInfo>
|
21
|
-
</mods>
|
22
|
-
@simple =
|
23
|
-
@ew =
|
22
|
+
</mods>"
|
23
|
+
@simple = "<mods><originInfo><dateIssued>circa 1900</dateIssued></originInfo></mods>"
|
24
|
+
@ew = "<mods><originInfo>
|
24
25
|
<place>
|
25
|
-
<placeTerm type=
|
26
|
+
<placeTerm type='text'>Reichenau Abbey, Lake Constance, Germany</placeTerm>
|
26
27
|
</place>
|
27
28
|
<dateIssued>Middle of the 11th century CE</dateIssued>
|
28
29
|
<issuance>monographic</issuance>
|
29
30
|
</originInfo>
|
30
|
-
</mods>
|
31
|
-
@e =
|
31
|
+
</mods>"
|
32
|
+
@e = "<mods><originInfo>
|
32
33
|
<place>
|
33
|
-
<placeTerm type=
|
34
|
+
<placeTerm type='code' authority='marccountry'>au</placeTerm>
|
34
35
|
</place>
|
35
36
|
<place>
|
36
|
-
<placeTerm type=
|
37
|
+
<placeTerm type='text'>[Austria?</placeTerm>
|
37
38
|
</place>
|
38
39
|
<dateIssued>circa 1180-1199]</dateIssued>
|
39
40
|
<issuance>monographic</issuance>
|
40
|
-
</originInfo></mods>
|
41
|
-
@f =
|
41
|
+
</originInfo></mods>"
|
42
|
+
@f = "<mods> <originInfo>
|
42
43
|
<place>
|
43
|
-
<placeTerm authority=
|
44
|
+
<placeTerm authority='marccountry' type='code'>cau</placeTerm>
|
44
45
|
</place>
|
45
|
-
<dateIssued encoding=
|
46
|
-
<dateIssued encoding=
|
46
|
+
<dateIssued encoding='marc' keyDate='yes' point='start'>1850</dateIssued>
|
47
|
+
<dateIssued encoding='marc' point='end'>1906</dateIssued>
|
47
48
|
<issuance>monographic</issuance>
|
48
49
|
</originInfo>
|
49
|
-
</mods>
|
50
|
-
@ex =
|
50
|
+
</mods>"
|
51
|
+
@ex = "<mods><originInfo>
|
51
52
|
<place>
|
52
53
|
<placeTerm>France and Italy</placeTerm>
|
53
54
|
</place>
|
54
|
-
<dateCreated keyDate=
|
55
|
+
<dateCreated keyDate='yes' qualifier='inferred'>173-?</dateCreated>
|
55
56
|
</originInfo>
|
56
|
-
</mods>
|
57
|
-
@ex1 =
|
57
|
+
</mods>"
|
58
|
+
@ex1 = "<mods><originInfo>
|
58
59
|
<publisher>Robot Publishing</publisher>
|
59
60
|
<place>
|
60
61
|
<placeTerm>France</placeTerm>
|
@@ -62,94 +63,94 @@ describe "Mods <originInfo> Element" do
|
|
62
63
|
<place>
|
63
64
|
<placeTerm>Italy</placeTerm>
|
64
65
|
</place>
|
65
|
-
<dateCreated keyDate=
|
66
|
+
<dateCreated keyDate='yes' qualifier='inferred'>173-?</dateCreated>
|
66
67
|
<dateIssued>1850</dateIssued>
|
67
68
|
</originInfo>
|
68
|
-
</mods>
|
69
|
-
@ex2 =
|
69
|
+
</mods>"
|
70
|
+
@ex2 = "<mods><originInfo>
|
70
71
|
<place>
|
71
|
-
<placeTerm type=
|
72
|
+
<placeTerm type='code' authority='marccountry'>enk</placeTerm>
|
72
73
|
</place>
|
73
74
|
<place>
|
74
|
-
<placeTerm type=
|
75
|
+
<placeTerm type='text'>[London]</placeTerm>
|
75
76
|
</place>
|
76
77
|
<publisher>Bunney & Gold</publisher>
|
77
78
|
<dateIssued>1799</dateIssued>
|
78
|
-
<dateIssued encoding=
|
79
|
+
<dateIssued encoding='marc' keyDate='yes'>1799</dateIssued>
|
79
80
|
<issuance>monographic</issuance>
|
80
81
|
</originInfo>
|
81
|
-
</mods>
|
82
|
-
@ex3 =
|
82
|
+
</mods>"
|
83
|
+
@ex3 = "<mods><originInfo>
|
83
84
|
<place>
|
84
|
-
<placeTerm type=
|
85
|
+
<placeTerm type='code' authority='marccountry'>xx</placeTerm>
|
85
86
|
</place>
|
86
87
|
<place>
|
87
|
-
<placeTerm type=
|
88
|
+
<placeTerm type='text'>[s.l. : s.n.]</placeTerm>
|
88
89
|
</place>
|
89
90
|
<dateIssued>1780?]</dateIssued>
|
90
|
-
<dateIssued encoding=
|
91
|
+
<dateIssued encoding='marc' keyDate='yes'>178u</dateIssued>
|
91
92
|
<issuance>monographic</issuance>
|
92
93
|
</originInfo>
|
93
|
-
</mods>
|
94
|
-
@ex4 =
|
94
|
+
</mods>"
|
95
|
+
@ex4 = "<mods><originInfo>
|
95
96
|
<place>
|
96
|
-
<placeTerm type=
|
97
|
+
<placeTerm type='code' authority='marccountry'>fr</placeTerm>
|
97
98
|
</place>
|
98
99
|
<place>
|
99
|
-
<placeTerm type=
|
100
|
+
<placeTerm type='text'>[S.l.]</placeTerm>
|
100
101
|
</place>
|
101
102
|
<publisher>[s.n.]</publisher>
|
102
103
|
<dateIssued>[1740.]</dateIssued>
|
103
|
-
<dateIssued encoding=
|
104
|
-
<dateIssued encoding=
|
104
|
+
<dateIssued encoding='marc' point='start' qualifier='questionable' keyDate='yes'>1740</dateIssued>
|
105
|
+
<dateIssued encoding='marc' point='end' qualifier='questionable'>1749</dateIssued>
|
105
106
|
<issuance>monographic</issuance>
|
106
107
|
</originInfo>
|
107
|
-
</mods>
|
108
|
-
@ex5 =
|
108
|
+
</mods>"
|
109
|
+
@ex5 = "<mods><originInfo>
|
109
110
|
<place>
|
110
|
-
<placeTerm type=
|
111
|
+
<placeTerm type='code' authority='marccountry'>xx</placeTerm>
|
111
112
|
</place>
|
112
113
|
<place>
|
113
|
-
<placeTerm type=
|
114
|
+
<placeTerm type='text'>[S.l.]</placeTerm>
|
114
115
|
</place>
|
115
116
|
<publisher>Olney</publisher>
|
116
117
|
<dateIssued>1844</dateIssued>
|
117
|
-
<dateIssued encoding=
|
118
|
+
<dateIssued encoding='marc' keyDate='yes'>1844</dateIssued>
|
118
119
|
<issuance>monographic</issuance>
|
119
120
|
</originInfo>
|
120
|
-
</mods>
|
121
|
-
@ex6 =
|
121
|
+
</mods>"
|
122
|
+
@ex6 = "<mods><originInfo>
|
122
123
|
<place>
|
123
|
-
<placeTerm type=
|
124
|
+
<placeTerm type='code' authority='marccountry'>enk</placeTerm>
|
124
125
|
</place>
|
125
126
|
<place>
|
126
|
-
<placeTerm type=
|
127
|
+
<placeTerm type='text'>[London</placeTerm>
|
127
128
|
</place>
|
128
129
|
<publisher>Printed for William Innys and Joseph Richardson ... [et al.]</publisher>
|
129
130
|
<dateIssued>1752]</dateIssued>
|
130
|
-
<dateIssued encoding=
|
131
|
+
<dateIssued encoding='marc' keyDate='yes'>1752</dateIssued>
|
131
132
|
<issuance>monographic</issuance>
|
132
133
|
</originInfo>
|
133
|
-
</mods>
|
134
|
-
@ex7 =
|
134
|
+
</mods>"
|
135
|
+
@ex7 = "<mods><originInfo>
|
135
136
|
<place>
|
136
|
-
<placeTerm authority=
|
137
|
+
<placeTerm authority='marccountry' type='code'>fr</placeTerm>
|
137
138
|
</place>
|
138
139
|
<place>
|
139
|
-
<placeTerm type=
|
140
|
+
<placeTerm type='text'>[S.l.]</placeTerm>
|
140
141
|
</place>
|
141
142
|
<publisher>[s.n.]</publisher>
|
142
143
|
<dateIssued>[1740.]</dateIssued>
|
143
|
-
<dateIssued encoding=
|
144
|
-
<dateIssued encoding=
|
144
|
+
<dateIssued encoding='marc' keyDate='yes' point='start' qualifier='questionable'>1740</dateIssued>
|
145
|
+
<dateIssued encoding='marc' point='end' qualifier='questionable'>1749</dateIssued>
|
145
146
|
<issuance>monographic</issuance>
|
146
147
|
</originInfo>
|
147
|
-
</mods>
|
148
|
+
</mods>"
|
148
149
|
|
149
|
-
xml =
|
150
|
-
<dateCreated encoding=
|
151
|
-
<dateCreated encoding=
|
152
|
-
</originInfo>
|
150
|
+
xml = "<originInfo>
|
151
|
+
<dateCreated encoding='w3cdtf' keyDate='yes' point='start' qualifier='approximate'>250 B.C.</dateCreated>
|
152
|
+
<dateCreated encoding='w3cdtf' keyDate='yes' point='end' qualifier='approximate'>150 B.C.</dateCreated>
|
153
|
+
</originInfo>"
|
153
154
|
|
154
155
|
end
|
155
156
|
|
@@ -157,152 +158,276 @@ describe "Mods <originInfo> Element" do
|
|
157
158
|
it "should cope with slop" do
|
158
159
|
pending "to be implemented"
|
159
160
|
end
|
160
|
-
|
161
|
+
it "should know something about various date encodings: w3cdtf, iso8601, marc, edtf, temper" do
|
162
|
+
pending "to be implemented"
|
163
|
+
end
|
164
|
+
it "should know the only valid values for point attribute are 'start' and 'end'" do
|
165
|
+
pending "to be implemented"
|
166
|
+
end
|
167
|
+
it "should know the only valid value for keyDate attribute is 'yes" do
|
168
|
+
pending "to be implemented"
|
169
|
+
end
|
170
|
+
it "should know the only valid values for qualifier attribute: approximate, inferred, questionable" do
|
171
|
+
pending "to be implemented"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "parsing issuance" do
|
176
|
+
it "should know the only valid values are: continuing, monographic, single unit, multipart monograph, serial, integrating resource" do
|
177
|
+
pending "to be implemented"
|
178
|
+
end
|
161
179
|
end
|
180
|
+
|
181
|
+
context "parsing publisher" do
|
182
|
+
it "should ignore s.n. value (from MARC)" do
|
183
|
+
pending "to be implemented"
|
184
|
+
end
|
185
|
+
it "should leave square brackets alone, except for s.n." do
|
186
|
+
pending "to be implemented"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context "parsing placeTerm" do
|
191
|
+
it "should be able to translate marccountry codes" do
|
192
|
+
pending "to be implemented"
|
193
|
+
end
|
194
|
+
it "should ignore s.l. value (from MARC)" do
|
195
|
+
pending "to be implemented"
|
196
|
+
end
|
197
|
+
it "should be forgiving of square brackets (from MARC), matched or unmatched" do
|
198
|
+
pending "to be implemented"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
162
202
|
|
163
203
|
context "basic <originInfo> terminology pieces" do
|
204
|
+
|
205
|
+
context "WITH namespaces" do
|
206
|
+
context "<place> child element" do
|
207
|
+
before(:all) do
|
208
|
+
@place_term_text = "<mods #{@ns_decl}><originInfo><place><placeTerm type='text'>Iran</placeTerm></place></originInfo></mods>"
|
209
|
+
@place_term_plain_mult = "<mods #{@ns_decl}><originInfo>
|
210
|
+
<place><placeTerm>France</placeTerm></place>
|
211
|
+
<place><placeTerm>Italy</placeTerm></place></originInfo></mods>"
|
212
|
+
@place_term_code = "<mods #{@ns_decl}><originInfo><place><placeTerm authority='marccountry' type='code'>fr</placeTerm></place></originInfo></mods>"
|
213
|
+
@yuck1 = "<mods #{@ns_decl}><originInfo><place><placeTerm type='text'>[S.l.]</placeTerm></place></originInfo></mods>"
|
214
|
+
@yuck2 = "<mods #{@ns_decl}><originInfo><place><placeTerm type='text'>[London</placeTerm></place></originInfo></mods>"
|
215
|
+
@yuck3 = "<mods #{@ns_decl}><originInfo><place><placeTerm type='text'>[s.l. : s.n.]</placeTerm></place></originInfo></mods>"
|
216
|
+
@yuck4 = "<mods #{@ns_decl}><originInfo><place><placeTerm type='text'>[London]</placeTerm></place></originInfo></mods>"
|
217
|
+
end
|
218
|
+
context "<placeTerm> child element" do
|
219
|
+
it "should get element values" do
|
220
|
+
vals = @mods_rec.from_str(@place_term_plain_mult).origin_info.place.placeTerm.map { |e| e.text}
|
221
|
+
vals.size.should == 2
|
222
|
+
vals.should include("France")
|
223
|
+
vals.should include("Italy")
|
224
|
+
end
|
225
|
+
it "should get authority attribute" do
|
226
|
+
@mods_rec.from_str(@place_term_code).origin_info.place.placeTerm.authority.should == ["marccountry"]
|
227
|
+
end
|
228
|
+
it "should get type(_at) attribute" do
|
229
|
+
@mods_rec.from_str(@place_term_code).origin_info.place.placeTerm.type_at.should == ["code"]
|
230
|
+
end
|
231
|
+
end # placeTerm
|
232
|
+
end # place
|
164
233
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
@place_term_code = '<mods><originInfo><place><placeTerm authority="marccountry" type="code">fr</placeTerm></place></originInfo></mods>'
|
172
|
-
@yuck1 = '<mods><originInfo><place><placeTerm type="text">[S.l.]</placeTerm></place></originInfo></mods>'
|
173
|
-
@yuck2 = '<mods><originInfo><place><placeTerm type="text">[London</placeTerm></place></originInfo></mods>'
|
174
|
-
@yuck3 = '<mods><originInfo><place><placeTerm type="text">[s.l. : s.n.]</placeTerm></place></originInfo></mods>'
|
175
|
-
@yuck4 = '<mods><originInfo><place><placeTerm type="text">[London]</placeTerm></place></originInfo></mods>'
|
176
|
-
end
|
177
|
-
context "<placeTerm> child element" do
|
234
|
+
context "<publisher> child element" do
|
235
|
+
before(:all) do
|
236
|
+
@ex = "<mods #{@ns_decl}><originInfo><publisher>Olney</publisher></origin_info></mods>"
|
237
|
+
@yuck1 = "<mods #{@ns_decl}><originInfo><publisher>[s.n.]</publisher></originInfo></mods>"
|
238
|
+
@yuck2 = "<mods #{@ns_decl}><originInfo><publisher>Printed for William Innys and Joseph Richardson ... [et al.]</publisher></originInfo></mods>"
|
239
|
+
end
|
178
240
|
it "should get element values" do
|
179
|
-
vals = @mods_rec.from_str(@
|
180
|
-
vals.
|
181
|
-
|
182
|
-
|
241
|
+
vals = @mods_rec.from_str("<mods #{@ns_decl}><originInfo><publisher>Olney</publisher></origin_info></mods>").origin_info.publisher
|
242
|
+
vals.map { |n| n.text }.should == ["Olney"]
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "<xxxDate> child elements" do
|
247
|
+
it "should recognize each element" do
|
248
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
249
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname}>date</#{elname}></originInfo></mods>")
|
250
|
+
@mods_rec.origin_info.send(elname.to_sym).map { |n| n.text }.should == ["date"]
|
251
|
+
}
|
183
252
|
end
|
184
|
-
it "should
|
185
|
-
|
253
|
+
it "should recognize encoding attribute on each element" do
|
254
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
255
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname} encoding='foo'>date</#{elname}></originInfo></mods>")
|
256
|
+
@mods_rec.origin_info.send(elname.to_sym).encoding.should == ["foo"]
|
257
|
+
}
|
186
258
|
end
|
187
|
-
it "should
|
188
|
-
|
259
|
+
it "should recognize keyDate attribute" do
|
260
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
261
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname} keyDate='foo'>date</#{elname}></originInfo></mods>")
|
262
|
+
@mods_rec.origin_info.send(elname.to_sym).keyDate.should == ["foo"]
|
263
|
+
}
|
189
264
|
end
|
190
|
-
it "should
|
191
|
-
|
265
|
+
it "should recognize point attribute" do
|
266
|
+
# NOTE: values allowed are 'start' and 'end'
|
267
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
268
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname} point='foo'>date</#{elname}></originInfo></mods>")
|
269
|
+
@mods_rec.origin_info.send(elname.to_sym).point.should == ["foo"]
|
270
|
+
}
|
192
271
|
end
|
193
|
-
it "should
|
194
|
-
|
272
|
+
it "should recognize qualifier attribute" do
|
273
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
274
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname} qualifier='foo'>date</#{elname}></originInfo></mods>")
|
275
|
+
@mods_rec.origin_info.send(elname.to_sym).qualifier.should == ["foo"]
|
276
|
+
}
|
195
277
|
end
|
196
|
-
it "should
|
197
|
-
|
278
|
+
it "should recognize type attribute only on dateOther" do
|
279
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
280
|
+
@mods_rec.from_str("<mods #{@ns_decl}><originInfo><#{elname} type='foo'>date</#{elname}></originInfo></mods>")
|
281
|
+
if elname == 'dateOther'
|
282
|
+
@mods_rec.origin_info.send(elname.to_sym).type_at.should == ["foo"]
|
283
|
+
else
|
284
|
+
expect { @mods_rec.origin_info.send(elname.to_sym).type_at}.to raise_exception(NoMethodError, /type_at/)
|
285
|
+
end
|
286
|
+
}
|
198
287
|
end
|
199
|
-
end #
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
@ex = '<mods><originInfo><publisher>Olney</publisher></origin_info></mods>'
|
205
|
-
@yuck1 = '<mods><originInfo><publisher>[s.n.]</publisher></originInfo></mods>'
|
206
|
-
@yuck2 = '<mods><originInfo><publisher>Printed for William Innys and Joseph Richardson ... [et al.]</publisher></originInfo></mods>'
|
207
|
-
end
|
208
|
-
it "should get element values" do
|
209
|
-
vals = @mods_rec.from_str('<mods><originInfo><publisher>Olney</publisher></origin_info></mods>').origin_info.publisher
|
210
|
-
vals.map { |n| n.text }.should == ["Olney"]
|
211
|
-
end
|
212
|
-
it "should ignore s.n. value (from MARC)" do
|
213
|
-
pending "to be implemented"
|
214
|
-
end
|
215
|
-
it "should leave square brackets alone, except for s.n." do
|
216
|
-
pending "to be implemented"
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
context "<xxxDate> child elements" do
|
221
|
-
it "should recognize each element" do
|
222
|
-
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
223
|
-
@mods_rec.from_str("<mods><originInfo><#{elname}>date</#{elname}></originInfo></mods>")
|
224
|
-
@mods_rec.origin_info.send(elname.to_sym).map { |n| n.text }.should == ["date"]
|
225
|
-
}
|
226
|
-
end
|
227
|
-
it "should recognize encoding attribute on each element" do
|
228
|
-
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
229
|
-
@mods_rec.from_str("<mods><originInfo><#{elname} encoding='foo'>date</#{elname}></originInfo></mods>")
|
230
|
-
@mods_rec.origin_info.send(elname.to_sym).encoding.should == ["foo"]
|
231
|
-
}
|
232
|
-
end
|
233
|
-
it "should recognize keyDate attribute" do
|
234
|
-
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
235
|
-
@mods_rec.from_str("<mods><originInfo><#{elname} keyDate='foo'>date</#{elname}></originInfo></mods>")
|
236
|
-
@mods_rec.origin_info.send(elname.to_sym).keyDate.should == ["foo"]
|
237
|
-
}
|
288
|
+
end # <xxxDate> child elements
|
289
|
+
|
290
|
+
it "<edition> child element" do
|
291
|
+
xml = "<mods #{@ns_decl}><originInfo><edition>7th ed.</edition></originInfo></mods>"
|
292
|
+
@mods_rec.from_str(xml).origin_info.edition.map { |n| n.text }.should == ['7th ed.']
|
238
293
|
end
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
@
|
243
|
-
|
244
|
-
|
294
|
+
|
295
|
+
context "<issuance> child element" do
|
296
|
+
before(:all) do
|
297
|
+
@ex = "<mods #{@ns_decl}><originInfo><issuance>monographic</issuance></originInfo></mods>"
|
298
|
+
end
|
299
|
+
it "should get element value" do
|
300
|
+
@mods_rec.from_str(@ex).origin_info.issuance.map { |n| n.text }.should == ['monographic']
|
301
|
+
end
|
245
302
|
end
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
303
|
+
|
304
|
+
context "<frequency> child element" do
|
305
|
+
before(:all) do
|
306
|
+
xml = "<mods #{@ns_decl}><originInfo><frequency authority='marcfrequency'>Annual</frequency></originInfo></mods>"
|
307
|
+
@origin_info = @mods_rec.from_str(xml).origin_info
|
308
|
+
end
|
309
|
+
it "should get element value" do
|
310
|
+
@origin_info.frequency.map { |n| n.text }.should == ["Annual"]
|
311
|
+
end
|
312
|
+
it "should recognize the authority attribute" do
|
313
|
+
@origin_info.frequency.authority.should == ["marcfrequency"]
|
314
|
+
end
|
251
315
|
end
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
316
|
+
end # WITH namspaces
|
317
|
+
|
318
|
+
context "WITHOUT namespaces" do
|
319
|
+
context "<place> child element" do
|
320
|
+
before(:all) do
|
321
|
+
@place_term_text = "<mods><originInfo><place><placeTerm type='text'>Iran</placeTerm></place></originInfo></mods>"
|
322
|
+
@place_term_plain_mult = "<mods><originInfo>
|
323
|
+
<place><placeTerm>France</placeTerm></place>
|
324
|
+
<place><placeTerm>Italy</placeTerm></place></originInfo></mods>"
|
325
|
+
@place_term_code = "<mods><originInfo><place><placeTerm authority='marccountry' type='code'>fr</placeTerm></place></originInfo></mods>"
|
326
|
+
@yuck1 = "<mods><originInfo><place><placeTerm type='text'>[S.l.]</placeTerm></place></originInfo></mods>"
|
327
|
+
@yuck2 = "<mods><originInfo><place><placeTerm type='text'>[London</placeTerm></place></originInfo></mods>"
|
328
|
+
@yuck3 = "<mods><originInfo><place><placeTerm type='text'>[s.l. : s.n.]</placeTerm></place></originInfo></mods>"
|
329
|
+
@yuck4 = "<mods><originInfo><place><placeTerm type='text'>[London]</placeTerm></place></originInfo></mods>"
|
330
|
+
end
|
331
|
+
context "<placeTerm> child element" do
|
332
|
+
it "should get element values" do
|
333
|
+
vals = @mods_rec.from_str(@place_term_plain_mult, false).origin_info.place.placeTerm.map { |e| e.text}
|
334
|
+
vals.size.should == 2
|
335
|
+
vals.should include("France")
|
336
|
+
vals.should include("Italy")
|
259
337
|
end
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
end
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
end
|
280
|
-
|
281
|
-
context "<issuance> child element" do
|
282
|
-
before(:all) do
|
283
|
-
@ex = '<mods><originInfo><issuance>monographic</issuance></originInfo></mods>'
|
284
|
-
end
|
285
|
-
it "should get element value" do
|
286
|
-
@mods_rec.from_str(@ex).origin_info.issuance.map { |n| n.text }.should == ['monographic']
|
287
|
-
end
|
288
|
-
it "should know the only valid values are: continuing, monographic, single unit, multipart monograph, serial, integrating resource" do
|
289
|
-
pending "to be implemented"
|
338
|
+
it "should get authority attribute" do
|
339
|
+
@mods_rec.from_str(@place_term_code, false).origin_info.place.placeTerm.authority.should == ["marccountry"]
|
340
|
+
end
|
341
|
+
it "should get type(_at) attribute" do
|
342
|
+
@mods_rec.from_str(@place_term_code, false).origin_info.place.placeTerm.type_at.should == ["code"]
|
343
|
+
end
|
344
|
+
end # placeTerm
|
345
|
+
end # place
|
346
|
+
|
347
|
+
context "<publisher> child element" do
|
348
|
+
before(:all) do
|
349
|
+
@ex = "<mods><originInfo><publisher>Olney</publisher></origin_info></mods>"
|
350
|
+
@yuck1 = "<mods><originInfo><publisher>[s.n.]</publisher></originInfo></mods>"
|
351
|
+
@yuck2 = "<mods><originInfo><publisher>Printed for William Innys and Joseph Richardson ... [et al.]</publisher></originInfo></mods>"
|
352
|
+
end
|
353
|
+
it "should get element values" do
|
354
|
+
vals = @mods_rec.from_str("<mods><originInfo><publisher>Olney</publisher></origin_info></mods>", false).origin_info.publisher
|
355
|
+
vals.map { |n| n.text }.should == ["Olney"]
|
356
|
+
end
|
290
357
|
end
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
358
|
+
|
359
|
+
context "<xxxDate> child elements" do
|
360
|
+
it "should recognize each element" do
|
361
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
362
|
+
@mods_rec.from_str("<mods><originInfo><#{elname}>date</#{elname}></originInfo></mods>", false)
|
363
|
+
@mods_rec.origin_info.send(elname.to_sym).map { |n| n.text }.should == ["date"]
|
364
|
+
}
|
365
|
+
end
|
366
|
+
it "should recognize encoding attribute on each element" do
|
367
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
368
|
+
@mods_rec.from_str("<mods><originInfo><#{elname} encoding='foo'>date</#{elname}></originInfo></mods>", false)
|
369
|
+
@mods_rec.origin_info.send(elname.to_sym).encoding.should == ["foo"]
|
370
|
+
}
|
371
|
+
end
|
372
|
+
it "should recognize keyDate attribute" do
|
373
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
374
|
+
@mods_rec.from_str("<mods><originInfo><#{elname} keyDate='foo'>date</#{elname}></originInfo></mods>", false)
|
375
|
+
@mods_rec.origin_info.send(elname.to_sym).keyDate.should == ["foo"]
|
376
|
+
}
|
377
|
+
end
|
378
|
+
it "should recognize point attribute" do
|
379
|
+
# NOTE: values allowed are 'start' and 'end'
|
380
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
381
|
+
@mods_rec.from_str("<mods><originInfo><#{elname} point='foo'>date</#{elname}></originInfo></mods>", false)
|
382
|
+
@mods_rec.origin_info.send(elname.to_sym).point.should == ["foo"]
|
383
|
+
}
|
384
|
+
end
|
385
|
+
it "should recognize qualifier attribute" do
|
386
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
387
|
+
@mods_rec.from_str("<mods><originInfo><#{elname} qualifier='foo'>date</#{elname}></originInfo></mods>", false)
|
388
|
+
@mods_rec.origin_info.send(elname.to_sym).qualifier.should == ["foo"]
|
389
|
+
}
|
390
|
+
end
|
391
|
+
it "should recognize type attribute only on dateOther" do
|
392
|
+
Mods::ORIGIN_INFO_DATE_ELEMENTS.each { |elname|
|
393
|
+
@mods_rec.from_str("<mods><originInfo><#{elname} type='foo'>date</#{elname}></originInfo></mods>", false)
|
394
|
+
if elname == 'dateOther'
|
395
|
+
@mods_rec.origin_info.send(elname.to_sym).type_at.should == ["foo"]
|
396
|
+
else
|
397
|
+
expect { @mods_rec.origin_info.send(elname.to_sym).type_at}.to raise_exception(NoMethodError, /type_at/)
|
398
|
+
end
|
399
|
+
}
|
400
|
+
end
|
401
|
+
end # <xxxDate> child elements
|
402
|
+
|
403
|
+
it "<edition> child element" do
|
404
|
+
xml = "<mods><originInfo><edition>7th ed.</edition></originInfo></mods>"
|
405
|
+
@mods_rec.from_str(xml, false).origin_info.edition.map { |n| n.text }.should == ['7th ed.']
|
297
406
|
end
|
298
|
-
|
299
|
-
|
407
|
+
|
408
|
+
context "<issuance> child element" do
|
409
|
+
before(:all) do
|
410
|
+
@ex = "<mods><originInfo><issuance>monographic</issuance></originInfo></mods>"
|
411
|
+
end
|
412
|
+
it "should get element value" do
|
413
|
+
@mods_rec.from_str(@ex, false).origin_info.issuance.map { |n| n.text }.should == ['monographic']
|
414
|
+
end
|
300
415
|
end
|
301
|
-
|
302
|
-
|
416
|
+
|
417
|
+
context "<frequency> child element" do
|
418
|
+
before(:all) do
|
419
|
+
xml = "<mods><originInfo><frequency authority='marcfrequency'>Annual</frequency></originInfo></mods>"
|
420
|
+
@origin_info = @mods_rec.from_str(xml, false).origin_info
|
421
|
+
end
|
422
|
+
it "should get element value" do
|
423
|
+
@origin_info.frequency.map { |n| n.text }.should == ["Annual"]
|
424
|
+
end
|
425
|
+
it "should recognize the authority attribute" do
|
426
|
+
@origin_info.frequency.authority.should == ["marcfrequency"]
|
427
|
+
end
|
303
428
|
end
|
304
|
-
end
|
305
|
-
end # basic terminology
|
429
|
+
end # WITHOUT namspaces
|
306
430
|
|
431
|
+
end # basic terminology
|
307
432
|
|
308
433
|
end
|