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/spec/name_spec.rb CHANGED
@@ -4,133 +4,127 @@ describe "Mods <name> Element" do
4
4
 
5
5
  before(:all) do
6
6
  @mods_rec = Mods::Record.new
7
+ @ns_decl = "xmlns='#{Mods::MODS_NS}'"
8
+
7
9
  @corp_name = 'ABC corp'
8
10
  @mods_w_corp_name = "<mods><name type='corporate'><namePart>#{@corp_name}</namePart></name></mods>"
11
+ @mods_w_corp_name_ns = "<mods #{@ns_decl}><name type='corporate'><namePart>#{@corp_name}</namePart></name></mods>"
9
12
  @mods_w_corp_name_role = "<mods><name type='corporate'><namePart>#{@corp_name}</namePart>
10
13
  <role><roleTerm type='text'>lithographer</roleTerm></role></name></mods>"
14
+ @mods_w_corp_name_role_ns = "<mods #{@ns_decl}><name type='corporate'><namePart>#{@corp_name}</namePart>
15
+ <role><roleTerm type='text'>lithographer</roleTerm></role></name></mods>"
11
16
  @pers_name = 'Crusty'
12
17
  @mods_w_pers_name = "<mods><name type='personal'><namePart>#{@pers_name}</namePart></name></mods>"
18
+ @mods_w_pers_name_ns = "<mods #{@ns_decl}><name type='personal'><namePart>#{@pers_name}</namePart></name></mods>"
13
19
  @mods_w_both = "<mods>
14
20
  <name type='corporate'><namePart>#{@corp_name}</namePart></name>
15
21
  <name type='personal'><namePart>#{@pers_name}</namePart></name></mods>"
22
+ @mods_w_both_ns = "<mods #{@ns_decl}>
23
+ <name type='corporate'><namePart>#{@corp_name}</namePart></name>
24
+ <name type='personal'><namePart>#{@pers_name}</namePart></name></mods>"
16
25
  @pers_role = 'creator'
17
26
  @mods_w_pers_name_role = "<mods><name type='personal'><namePart>#{@pers_name}</namePart>
18
27
  <role><roleTerm authority='marcrelator' type='text'>#{@pers_role}</roleTerm><role></name></mods>"
19
- @mods_w_pers_name_role_code = '<mods><name type="personal"><namePart type="given">John</namePart>
20
- <namePart type="family">Huston</namePart>
28
+ @mods_w_pers_name_role_ns = "<mods #{@ns_decl}><name type='personal'><namePart>#{@pers_name}</namePart>
29
+ <role><roleTerm authority='marcrelator' type='text'>#{@pers_role}</roleTerm><role></name></mods>"
30
+ @mods_w_pers_name_role_code = "<mods><name type='personal'><namePart type='given'>John</namePart>
31
+ <namePart type='family'>Huston</namePart>
21
32
  <role>
22
- <roleTerm type="code" authority="marcrelator">drt</roleTerm>
33
+ <roleTerm type='code' authority='marcrelator'>drt</roleTerm>
23
34
  </role>
24
- </name></mods>'
35
+ </name></mods>"
36
+ @mods_w_pers_name_role_code_ns = "<mods #{@ns_decl}><name type='personal'><namePart type='given'>John</namePart>
37
+ <namePart type='family'>Huston</namePart>
38
+ <role>
39
+ <roleTerm type='code' authority='marcrelator'>drt</roleTerm>
40
+ </role>
41
+ </name></mods>"
25
42
  end
26
43
 
27
44
  context "personal name" do
28
45
 
29
- it "should recognize child elements" do
30
- Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
31
- @mods_rec.from_str("<mods><name type='personal'><#{e}>oofda</#{e}></name></mods>")
32
- if e == 'description'
33
- @mods_rec.personal_name.description_el.text.should == 'oofda'
34
- else
35
- @mods_rec.personal_name.send(e).text.should == 'oofda'
36
- end
37
- }
38
- end
39
- it "should include name elements with type attr = personal" do
40
- @mods_rec.from_str(@mods_w_pers_name)
41
- @mods_rec.personal_name.namePart.text.should == @pers_name
42
- @mods_rec.from_str(@mods_w_both).personal_name.namePart.text.should == @pers_name
43
- end
44
- it "should not include name elements with type attr != personal" do
45
- @mods_rec.from_str(@mods_w_corp_name)
46
- @mods_rec.personal_name.namePart.text.should == ""
47
- @mods_rec.from_str(@mods_w_both).personal_name.namePart.text.should_not match(@corp_name)
48
- end
49
-
50
- context "roles" do
51
- it "should be possible to access a personal_name role easily" do
52
- @mods_rec.from_str(@mods_w_pers_name_role)
53
- @mods_rec.personal_name.role.text.should include(@pers_role)
54
- end
55
-
56
- it "should get role type" do
57
- @mods_rec.from_str(@mods_w_pers_name_role)
58
- @mods_rec.personal_name.role.type_at.should == ["text"]
59
- @mods_rec.from_str(@mods_w_pers_name_role_code)
60
- @mods_rec.personal_name.role.type_at.should == ["code"]
46
+ context "WITH namespaces" do
47
+ it "should recognize child elements" do
48
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
49
+ @mods_rec.from_str("<mods #{@ns_decl}><name type='personal'><#{e}>oofda</#{e}></name></mods>")
50
+ if e == 'description'
51
+ @mods_rec.personal_name.description_el.text.should == 'oofda'
52
+ else
53
+ @mods_rec.personal_name.send(e).text.should == 'oofda'
54
+ end
55
+ }
61
56
  end
62
-
63
- it "should get role authority" do
64
- @mods_rec.from_str(@mods_w_pers_name_role)
65
- @mods_rec.personal_name.role.authority.should == ["marcrelator"]
57
+ it "should include name elements with type attr = personal" do
58
+ @mods_rec.from_str(@mods_w_pers_name_ns)
59
+ @mods_rec.personal_name.namePart.text.should == @pers_name
60
+ @mods_rec.from_str(@mods_w_both_ns).personal_name.namePart.text.should == @pers_name
66
61
  end
67
-
68
- end
69
-
70
- context "Mods::Record.personal_names convenience method" do
71
- before(:all) do
72
- @given_family = '<mods><name type="personal"><namePart type="given">Jorge Luis</namePart>
73
- <namePart type="family">Borges</namePart></name></mods>'
74
- @given_family_date = '<mods><name type="personal"><namePart type="given">Zaphod</namePart>
75
- <namePart type="family">Beeblebrox</namePart>
76
- <namePart type="date">1912-2362</namePart></name></mods>'
77
- @all_name_parts = '<mods><name type="personal"><namePart type="given">Given</namePart>
78
- <namePart type="family">Family</namePart>
79
- <namePart type="termsOfAddress">Mr.</namePart>
80
- <namePart type="date">date</namePart></name></mods>'
81
- @family_only = '<mods><name type="personal"><namePart type="family">Family</namePart></name></mods>'
82
- @given_only = '<mods><name type="personal"><namePart type="given">Given</namePart></name></mods>'
62
+ it "should not include name elements with type attr != personal" do
63
+ @mods_rec.from_str(@mods_w_corp_name_ns)
64
+ @mods_rec.personal_name.namePart.text.should == ""
65
+ @mods_rec.from_str(@mods_w_both_ns).personal_name.namePart.text.should_not match(@corp_name)
83
66
  end
84
67
 
85
- it "should return an Array of Strings" do
86
- @mods_rec.from_str(@mods_w_pers_name)
87
- @mods_rec.personal_names.should == [@pers_name]
68
+ context "roles" do
69
+ it "should be possible to access a personal_name role easily" do
70
+ @mods_rec.from_str(@mods_w_pers_name_role_ns)
71
+ @mods_rec.personal_name.role.text.should include(@pers_role)
72
+ end
73
+ it "should get role type" do
74
+ @mods_rec.from_str(@mods_w_pers_name_role_ns)
75
+ @mods_rec.personal_name.role.type_at.should == ["text"]
76
+ @mods_rec.from_str(@mods_w_pers_name_role_code_ns)
77
+ @mods_rec.personal_name.role.type_at.should == ["code"]
78
+ end
79
+ it "should get role authority" do
80
+ @mods_rec.from_str(@mods_w_pers_name_role_ns)
81
+ @mods_rec.personal_name.role.authority.should == ["marcrelator"]
82
+ end
83
+ end # roles
84
+ end # WITH namespaces
85
+
86
+ context "WITHOUT namespaces" do
87
+ it "should recognize child elements" do
88
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
89
+ @mods_rec.from_str("<mods><name type='personal'><#{e}>oofda</#{e}></name></mods>", false)
90
+ if e == 'description'
91
+ @mods_rec.personal_name.description_el.text.should == 'oofda'
92
+ else
93
+ @mods_rec.personal_name.send(e).text.should == 'oofda'
94
+ end
95
+ }
88
96
  end
89
-
90
- it "should not include the role text" do
91
- @mods_rec.from_str(@mods_w_pers_name_role)
92
- @mods_rec.personal_names.first.should_not match(@pers_role)
97
+ it "should include name elements with type attr = personal" do
98
+ @mods_rec.from_str(@mods_w_pers_name, false)
99
+ @mods_rec.personal_name.namePart.text.should == @pers_name
100
+ @mods_rec.from_str(@mods_w_both, false).personal_name.namePart.text.should == @pers_name
93
101
  end
94
-
95
- it "should prefer displayForm over namePart pieces" do
96
- display_form_and_name_parts = '<mods><name type="personal"><namePart type="given">Jorge Luis</namePart>
97
- <namePart type="family">Borges</namePart>
98
- <displayForm>display form</displayForm></name></mods>'
99
- @mods_rec.from_str(display_form_and_name_parts)
100
- @mods_rec.personal_names.should include("display form")
102
+ it "should not include name elements with type attr != personal" do
103
+ @mods_rec.from_str(@mods_w_corp_name, false)
104
+ @mods_rec.personal_name.namePart.text.should == ""
105
+ @mods_rec.from_str(@mods_w_both, false).personal_name.namePart.text.should_not match(@corp_name)
101
106
  end
102
107
 
103
- it "should put the family namePart first" do
104
- @mods_rec.from_str(@given_family)
105
- @mods_rec.personal_names.first.should match(/^Borges/)
106
- @mods_rec.from_str(@given_family_date)
107
- @mods_rec.personal_names.first.should match(/^Beeblebrox/)
108
- end
109
- it "should not include date" do
110
- @mods_rec.from_str(@given_family_date)
111
- @mods_rec.personal_names.first.should_not match(/19/)
112
- @mods_rec.from_str(@all_name_parts)
113
- @mods_rec.personal_names.first.should_not match('date')
114
- end
115
- it "should include a comma when there is both a family and a given name" do
116
- @mods_rec.from_str(@all_name_parts)
117
- @mods_rec.personal_names.should include("Family, Given")
118
- end
119
- it "should include multiple words in a namePart" do
120
- @mods_rec.from_str(@given_family)
121
- @mods_rec.personal_names.should include("Borges, Jorge Luis")
122
- end
123
- it "should not include a comma when there is only a family or given name" do
124
- [@family_only, @given_only].each { |mods_str|
125
- @mods_rec.from_str(mods_str)
126
- @mods_rec.personal_names.first.should_not match(/,/)
127
- }
128
- end
129
- it "should not include terms of address" do
130
- @mods_rec.from_str(@all_name_parts)
131
- @mods_rec.personal_names.first.should_not match(/Mr./)
132
- end
133
- end # personal_names convenience method
108
+ context "roles" do
109
+ it "should be possible to access a personal_name role easily" do
110
+ @mods_rec.from_str(@mods_w_pers_name_role, false)
111
+ @mods_rec.personal_name.role.text.should include(@pers_role)
112
+ end
113
+ it "should get role type" do
114
+ @mods_rec.from_str(@mods_w_pers_name_role, false)
115
+ @mods_rec.personal_name.role.type_at.should == ["text"]
116
+ @mods_rec.from_str(@mods_w_pers_name_role_code, false)
117
+ @mods_rec.personal_name.role.type_at.should == ["code"]
118
+ end
119
+ it "should get role authority" do
120
+ @mods_rec.from_str(@mods_w_pers_name_role, false)
121
+ @mods_rec.personal_name.role.authority.should == ["marcrelator"]
122
+ end
123
+ end # roles
124
+ end # WITHOUT namespaces
125
+
126
+ # note that Mods::Record.personal_names tests are in record_spec
127
+
134
128
  end # personal name
135
129
 
136
130
  context "sort_author" do
@@ -139,116 +133,148 @@ describe "Mods <name> Element" do
139
133
  end
140
134
  end
141
135
 
142
- context "corporate name" do
143
- before(:all) do
144
- @corp_role = 'lithographer'
145
- @mods_w_corp_name_role = "<mods><name type='corporate'><namePart>#{@corp_name}</namePart>
146
- <role><roleTerm type='text'>#{@corp_role}</roleTerm></role></name></mods>"
147
- s = '<mods><name type="corporate"><namePart>Sherman &amp; Smith</namePart>
148
- <role><roleTerm authority="marcrelator" type="text">creator</roleTerm></role></name></mods>'
149
- @mult_corps = '<mods> <name type="corporate">
150
- <namePart>Henry Bill, New York</namePart>
151
- <role><roleTerm type="text">publisher</roleTerm></role>
152
- </name>
153
- <name type="corporate">
154
- <namePart>T. Sinclair&apos;s, Philadelphia</namePart>
155
- <role><roleTerm type="text">lithographer</roleTerm></role>
156
- </name>
157
- <name type="corporate">
158
- <namePart>Potter Collection</namePart>
159
- <role><roleTerm type="text">former owner</roleTerm></role>
160
- </name></mods>'
161
- end
162
-
163
- it "should recognize child elements" do
164
- Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role" }.each { |e|
165
- @mods_rec.from_str("<mods><name type='corporate'><#{e}>oofda</#{e}></name></mods>")
166
- if e == 'description'
167
- @mods_rec.corporate_name.description_el.text.should == 'oofda'
168
- else
169
- @mods_rec.corporate_name.send(e).text.should == 'oofda'
170
- end
171
- }
172
- end
173
- it "should include name elements with type attr = corporate" do
174
- @mods_rec.from_str(@mods_w_corp_name)
175
- @mods_rec.corporate_name.namePart.text.should == @corp_name
176
- @mods_rec.from_str(@mods_w_both).corporate_name.namePart.text.should == @corp_name
177
- end
178
- it "should not include name elements with type attr != corporate" do
179
- @mods_rec.from_str(@mods_w_pers_name)
180
- @mods_rec.corporate_name.namePart.text.should == ""
181
- @mods_rec.from_str(@mods_w_both).corporate_name.namePart.text.should_not match(@pers_name)
182
- end
183
-
184
- context "Mods::Record.corporate_names convenience method" do
185
- it "should return an Array of Strings" do
186
- @mods_rec.from_str(@mods_w_corp_name)
187
- @mods_rec.corporate_names.should == [@corp_name]
136
+ context "corporate name" do
137
+ context "WITH namespaces" do
138
+ it "should recognize child elements" do
139
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role" }.each { |e|
140
+ @mods_rec.from_str("<mods #{@ns_decl}><name type='corporate'><#{e}>oofda</#{e}></name></mods>")
141
+ if e == 'description'
142
+ @mods_rec.corporate_name.description_el.text.should == 'oofda'
143
+ else
144
+ @mods_rec.corporate_name.send(e).text.should == 'oofda'
145
+ end
146
+ }
188
147
  end
189
-
190
- it "should not include the role text" do
191
- @mods_rec.from_str(@mods_w_corp_name_role)
192
- @mods_rec.corporate_names.first.should_not match(@corp_role)
148
+ it "should include name elements with type attr = corporate" do
149
+ @mods_rec.from_str(@mods_w_corp_name_ns)
150
+ @mods_rec.corporate_name.namePart.text.should == @corp_name
151
+ @mods_rec.from_str(@mods_w_both_ns).corporate_name.namePart.text.should == @corp_name
193
152
  end
194
-
195
- it "should prefer displayForm over namePart pieces" do
196
- display_form_and_name_parts = '<mods><name type="corporate"><namePart>Food, Inc.</namePart>
197
- <displayForm>display form</displayForm></name></mods>'
198
- @mods_rec.from_str(display_form_and_name_parts)
199
- @mods_rec.corporate_names.should include("display form")
153
+ it "should not include name elements with type attr != corporate" do
154
+ @mods_rec.from_str(@mods_w_pers_name_ns)
155
+ @mods_rec.corporate_name.namePart.text.should == ""
156
+ @mods_rec.from_str(@mods_w_both_ns).corporate_name.namePart.text.should_not match(@pers_name)
157
+ end
158
+ end # WITH namespaces
159
+ context "WITHOUT namespaces" do
160
+ it "should recognize child elements" do
161
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role" }.each { |e|
162
+ @mods_rec.from_str("<mods><name type='corporate'><#{e}>oofda</#{e}></name></mods>", false)
163
+ if e == 'description'
164
+ @mods_rec.corporate_name.description_el.text.should == 'oofda'
165
+ else
166
+ @mods_rec.corporate_name.send(e).text.should == 'oofda'
167
+ end
168
+ }
169
+ end
170
+ it "should include name elements with type attr = corporate" do
171
+ @mods_rec.from_str(@mods_w_corp_name, false)
172
+ @mods_rec.corporate_name.namePart.text.should == @corp_name
173
+ @mods_rec.from_str(@mods_w_both, false).corporate_name.namePart.text.should == @corp_name
200
174
  end
201
- end # corporate_names convenience method
175
+ it "should not include name elements with type attr != corporate" do
176
+ @mods_rec.from_str(@mods_w_pers_name, false)
177
+ @mods_rec.corporate_name.namePart.text.should == ""
178
+ @mods_rec.from_str(@mods_w_both, false).corporate_name.namePart.text.should_not match(@pers_name)
179
+ end
180
+ end # WITHOUT namespaces
181
+
182
+ # note that Mods::Record.corporate_names tests are in record_spec
183
+
202
184
  end # corporate name
203
185
 
186
+
204
187
  context "(plain) <name> element terminology pieces" do
205
-
206
- it "should recognize child elements" do
207
- Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
208
- @mods_rec.from_str("<mods><name><#{e}>oofda</#{e}></name></mods>")
209
- if e == 'description'
210
- @mods_rec.plain_name.description_el.text.should == 'oofda'
211
- else
212
- @mods_rec.plain_name.send(e).text.should == 'oofda'
213
- end
214
- }
215
- end
216
-
217
- it "should recognize attributes on name node" do
218
- Mods::Name::ATTRIBUTES.each { |attrb|
219
- @mods_rec.from_str("<mods><name #{attrb}='hello'><displayForm>q</displayForm></name></mods>")
220
- if attrb != 'type'
221
- @mods_rec.plain_name.send(attrb).should == ['hello']
222
- else
223
- @mods_rec.plain_name.type_at.should == ['hello']
224
- end
225
- }
226
- end
227
188
 
228
- context "namePart child element" do
229
- it "should recognize type attribute on namePart element" do
230
- Mods::Name::NAME_PART_TYPES.each { |t|
231
- @mods_rec.from_str("<mods><name><namePart type='#{t}'>hi</namePart></name></mods>")
232
- @mods_rec.plain_name.namePart.type_at.should == [t]
189
+ context "WITH namespaces" do
190
+ it "should recognize child elements" do
191
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
192
+ @mods_rec.from_str("<mods #{@ns_decl}><name><#{e}>oofda</#{e}></name></mods>")
193
+ if e == 'description'
194
+ @mods_rec.plain_name.description_el.text.should == 'oofda'
195
+ else
196
+ @mods_rec.plain_name.send(e).text.should == 'oofda'
197
+ end
233
198
  }
234
199
  end
235
- end
236
-
237
- context "role child element" do
238
- it "should get role type" do
239
- @mods_rec.from_str(@mods_w_pers_name_role)
240
- @mods_rec.plain_name.role.type_at.should == ["text"]
241
- @mods_rec.from_str(@mods_w_pers_name_role_code)
242
- @mods_rec.plain_name.role.type_at.should == ["code"]
200
+ it "should recognize attributes on name node" do
201
+ Mods::Name::ATTRIBUTES.each { |attrb|
202
+ @mods_rec.from_str("<mods #{@ns_decl}><name #{attrb}='hello'><displayForm>q</displayForm></name></mods>")
203
+ if attrb != 'type'
204
+ @mods_rec.plain_name.send(attrb).should == ['hello']
205
+ else
206
+ @mods_rec.plain_name.type_at.should == ['hello']
207
+ end
208
+ }
209
+ end
210
+ context "namePart child element" do
211
+ it "should recognize type attribute on namePart element" do
212
+ Mods::Name::NAME_PART_TYPES.each { |t|
213
+ @mods_rec.from_str("<mods #{@ns_decl}><name><namePart type='#{t}'>hi</namePart></name></mods>")
214
+ @mods_rec.plain_name.namePart.type_at.should == [t]
215
+ }
216
+ end
243
217
  end
218
+ context "role child element" do
219
+ it "should get role type" do
220
+ @mods_rec.from_str(@mods_w_pers_name_role_ns)
221
+ @mods_rec.plain_name.role.type_at.should == ["text"]
222
+ @mods_rec.from_str(@mods_w_pers_name_role_code_ns)
223
+ @mods_rec.plain_name.role.type_at.should == ["code"]
224
+ end
225
+ it "should get role authority" do
226
+ @mods_rec.from_str(@mods_w_pers_name_role_ns)
227
+ @mods_rec.plain_name.role.authority.should == ["marcrelator"]
228
+ end
229
+ end
230
+
231
+ end # context WITH namespaces
244
232
 
245
- it "should get role authority" do
246
- @mods_rec.from_str(@mods_w_pers_name_role)
247
- @mods_rec.plain_name.role.authority.should == ["marcrelator"]
233
+ context "WITHOUT namespaces" do
234
+ it "should recognize child elements" do
235
+ Mods::Name::CHILD_ELEMENTS.reject{|e| e == "role"}.each { |e|
236
+ @mods_rec.from_str("<mods><name><#{e}>oofda</#{e}></name></mods>", false)
237
+ if e == 'description'
238
+ @mods_rec.plain_name.description_el.text.should == 'oofda'
239
+ else
240
+ @mods_rec.plain_name.send(e).text.should == 'oofda'
241
+ end
242
+ }
248
243
  end
249
- end
244
+ it "should recognize attributes on name node" do
245
+ Mods::Name::ATTRIBUTES.each { |attrb|
246
+ @mods_rec.from_str("<mods><name #{attrb}='hello'><displayForm>q</displayForm></name></mods>", false)
247
+ if attrb != 'type'
248
+ @mods_rec.plain_name.send(attrb).should == ['hello']
249
+ else
250
+ @mods_rec.plain_name.type_at.should == ['hello']
251
+ end
252
+ }
253
+ end
254
+ context "namePart child element" do
255
+ it "should recognize type attribute on namePart element" do
256
+ Mods::Name::NAME_PART_TYPES.each { |t|
257
+ @mods_rec.from_str("<mods><name><namePart type='#{t}'>hi</namePart></name></mods>", false)
258
+ @mods_rec.plain_name.namePart.type_at.should == [t]
259
+ }
260
+ end
261
+ end
262
+ context "role child element" do
263
+ it "should get role type" do
264
+ @mods_rec.from_str(@mods_w_pers_name_role, false)
265
+ @mods_rec.plain_name.role.type_at.should == ["text"]
266
+ @mods_rec.from_str(@mods_w_pers_name_role_code, false)
267
+ @mods_rec.plain_name.role.type_at.should == ["code"]
268
+ end
269
+ it "should get role authority" do
270
+ @mods_rec.from_str(@mods_w_pers_name_role, false)
271
+ @mods_rec.plain_name.role.authority.should == ["marcrelator"]
272
+ end
273
+ end
274
+ end # context WITHOUT namespaces
250
275
 
251
276
  end # plain name
277
+
252
278
 
253
279
  it "should be able to translate the marc relator code into text" do
254
280
  MARC_RELATOR['drt'].should == "Director"