stanford-mods 0.0.8 → 0.0.9

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 CHANGED
@@ -60,6 +60,7 @@ Example Using SearchWorks Mixins:
60
60
 
61
61
  == Releases
62
62
 
63
+ * <b>0.0.9</b> add sw_subject_names and sw_subject_titles methods to searchworks mixin
63
64
  * <b>0.0.8</b> require stanford-mods/searchworks in stanford-mods (top level)
64
65
  * <b>0.0.7</b> added sw_geographic_search to searchworks mixin
65
66
  * <b>0.0.6</b> various title methods added to searchworks mixin
@@ -122,7 +122,7 @@ module Stanford
122
122
  # subject/hierarchicalGeographic
123
123
  # subject/geographicCode (only include the translated value if it isn't already present from other mods geo fields)
124
124
  # @param [String] sep - the separator string for joining hierarchicalGeographic sub elements
125
- # @return [Array<String>] values for geographic_search Solr field for this document or nil if none
125
+ # @return [Array<String>] values for geographic_search Solr field for this document or [] if none
126
126
  def sw_geographic_search(sep = ' ')
127
127
  result = term_values([:subject, :geographic]) || []
128
128
 
@@ -142,9 +142,35 @@ module Stanford
142
142
  }
143
143
  end
144
144
 
145
- return nil if result.empty?
146
145
  result
147
146
  end
147
+
148
+ # Values are the contents of:
149
+ # subject/name/namePart
150
+ # "Values from namePart subelements should be concatenated in the order they appear (e.g. "Shakespeare, William, 1564-1616")"
151
+ # @param [String] sep - the separator string for joining namePart sub elements
152
+ # @return [Array<String>] values for names inside subject elements or [] if none
153
+ def sw_subject_names(sep = ', ')
154
+ result = []
155
+ @mods_ng_xml.subject.name_el.select { |n_el| n_el.namePart }.each { |name_el_w_np|
156
+ parts = name_el_w_np.namePart.map { |npn| npn.text unless npn.text.empty? }.compact
157
+ result << parts.join(sep).strip unless parts.empty?
158
+ }
159
+ result
160
+ end
161
+
162
+ # Values are the contents of:
163
+ # subject/titleInfo/(subelements)
164
+ # @param [String] sep - the separator string for joining titleInfo sub elements
165
+ # @return [Array<String>] values for titles inside subject elements or [] if none
166
+ def sw_subject_titles(sep = ' ')
167
+ result = []
168
+ @mods_ng_xml.subject.titleInfo.each { |ti_el|
169
+ parts = ti_el.element_children.map { |el| el.text unless el.text.empty? }.compact
170
+ result << parts.join(sep).strip unless parts.empty?
171
+ }
172
+ result
173
+ end
148
174
 
149
175
  end # class Record
150
176
  end # Module Mods
@@ -1,5 +1,6 @@
1
1
  module Stanford
2
2
  module Mods
3
- VERSION = "0.0.8"
3
+ # this is the Ruby Gem version
4
+ VERSION = "0.0.9"
4
5
  end
5
6
  end
@@ -177,195 +177,4 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
177
177
  end
178
178
  end # content sw title methods
179
179
 
180
- context "sw subject methods" do
181
- before(:all) do
182
- @genre = 'genre top level'
183
- @cart_coord = '6 00 S, 71 30 E'
184
- @s_genre = 'genre in subject'
185
- @geo = 'Somewhere'
186
- @geo_code = 'us'
187
- @hier_geo_country = 'France'
188
- @s_name = 'name in subject'
189
- @occupation = 'worker bee'
190
- @temporal = 'temporal'
191
- @s_title = 'title in subject'
192
- @topic = 'topic'
193
- m = "<mods #{@ns_decl}>
194
- <genre>#{@genre}</genre>
195
- <subject><cartographics><coordinates>#{@cart_coord}</coordinates></cartographics></subject>
196
- <subject><genre>#{@s_genre}</genre></subject>
197
- <subject><geographic>#{@geo}</geographic></subject>
198
- <subject><geographicCode authority='iso3166'>#{@geo_code}</geographicCode></subject>
199
- <subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject>
200
- <subject><name><namePart>#{@s_name}</namePart></name></subject>
201
- <subject><occupation>#{@occupation}</occupation></subject>
202
- <subject><temporal>#{@temporal}</temporal></subject>
203
- <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
204
- <subject><topic>#{@topic}</topic></subject>
205
- </mods>"
206
- @smods_rec.from_str m
207
- @sw_geographic_search = @smods_rec.sw_geographic_search
208
- end
209
-
210
- context "sw_geographic_search" do
211
- it "should contain subject <geographic> subelement data" do
212
- @sw_geographic_search.should include(@geo)
213
- end
214
- it "should contain subject <hierarchicalGeographic> subelement data" do
215
- @sw_geographic_search.should include(@hier_geo_country)
216
- end
217
- it "should contain translation of <geographicCode> subelement data with translated authorities" do
218
- m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
219
- @smods_rec.from_str m
220
- @smods_rec.sw_geographic_search.should include('Estonia')
221
- end
222
- it "should not contain other subject element data" do
223
- @sw_geographic_search.should_not include(@genre)
224
- @sw_geographic_search.should_not include(@cart_coord)
225
- @sw_geographic_search.should_not include(@s_genre)
226
- @sw_geographic_search.should_not include(@s_name)
227
- @sw_geographic_search.should_not include(@occupation)
228
- @sw_geographic_search.should_not include(@temporal)
229
- @sw_geographic_search.should_not include(@topic)
230
- @sw_geographic_search.should_not include(@s_title)
231
- end
232
- it "should be nil if there are no values in the MODS" do
233
- m = "<mods #{@ns_decl}><note>notit</note></mods>"
234
- @smods_rec.from_str m
235
- @smods_rec.sw_geographic_search.should == nil
236
- end
237
- it "should not be nil if there are only subject/geographic elements" do
238
- m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
239
- @smods_rec.from_str m
240
- @smods_rec.sw_geographic_search.should == [@geo]
241
- end
242
- it "should not be nil if there are only subject/hierarchicalGeographic" do
243
- m = "<mods #{@ns_decl}><subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject></mods>"
244
- @smods_rec.from_str m
245
- @smods_rec.sw_geographic_search.should == [@hier_geo_country]
246
- end
247
- it "should not be nil if there are only subject/geographicCode elements" do
248
- m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
249
- @smods_rec.from_str m
250
- @smods_rec.sw_geographic_search.should == ['Estonia']
251
- end
252
- context "geographic subelement" do
253
- it "should have a separate value for each geographic element" do
254
- m = "<mods #{@ns_decl}>
255
- <subject>
256
- <geographic>Mississippi</geographic>
257
- <geographic>Tippah County</geographic>
258
- </subject>
259
- <subject><geographic>Washington (D.C.)</geographic></subject>
260
- </mods>"
261
- @smods_rec.from_str m
262
- @smods_rec.sw_geographic_search.should == ['Mississippi', 'Tippah County', 'Washington (D.C.)']
263
- end
264
- it "should be nil if there are only empty values in the MODS" do
265
- m = "<mods #{@ns_decl}><subject><geographic/></subject><note>notit</note></mods>"
266
- @smods_rec.from_str m
267
- @smods_rec.sw_geographic_search.should == nil
268
- end
269
- end
270
- context "hierarchicalGeographic subelement" do
271
- it "should have a separate value for each hierarchicalGeographic element" do
272
- m = "<mods #{@ns_decl}>
273
- <subject>
274
- <hierarchicalGeographic><area>first</area></hierarchicalGeographic>
275
- <hierarchicalGeographic><area>second</area></hierarchicalGeographic>
276
- </subject>
277
- <subject><hierarchicalGeographic><area>third</area></hierarchicalGeographic></subject>
278
- </mods>"
279
- @smods_rec.from_str m
280
- @smods_rec.sw_geographic_search.should == ['first', 'second', 'third']
281
- end
282
- it "should be nil if there are only empty values in the MODS" do
283
- m = "<mods #{@ns_decl}><subject><hierarchicalGeographic/></subject><note>notit</note></mods>"
284
- @smods_rec.from_str m
285
- @smods_rec.sw_geographic_search.should == nil
286
- end
287
- context "combining subelements" do
288
- before(:all) do
289
- m = "<mods #{@ns_decl}>
290
- <subject>
291
- <hierarchicalGeographic>
292
- <country>Canada</country>
293
- <province>British Columbia</province>
294
- <city>Vancouver</city>
295
- </hierarchicalGeographic>
296
- </subject></mods>"
297
- @smods_rec.from_str m
298
- end
299
- it "uses a space as the separator by default" do
300
- @smods_rec.sw_geographic_search.should == ['Canada British Columbia Vancouver']
301
- end
302
- it "honors any string value passed in for the separator" do
303
- @smods_rec.sw_geographic_search(' --').should == ['Canada --British Columbia --Vancouver']
304
- end
305
- end
306
- end # hierarchicalGeographic
307
- context "geographicCode subelement" do
308
- before(:all) do
309
- m = "<mods #{@ns_decl}>
310
- <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
311
- <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
312
- <subject><geographicCode authority='marccountry'>mg</geographicCode></subject>
313
- <subject><geographicCode authority='iso3166'>us</geographicCode></subject>
314
- </mods>"
315
- @smods_rec.from_str m
316
- @geo_search_from_codes = @smods_rec.sw_geographic_search
317
- end
318
- it "should not add untranslated values" do
319
- @geo_search_from_codes.should_not include('n-us-md')
320
- @geo_search_from_codes.should_not include('e-er')
321
- @geo_search_from_codes.should_not include('mg')
322
- @geo_search_from_codes.should_not include('us')
323
- end
324
- it "should translate marcgac codes" do
325
- @geo_search_from_codes.should include('Estonia')
326
- end
327
- it "should translate marccountry codes" do
328
- @geo_search_from_codes.should include('Madagascar')
329
- end
330
- it "should not translate other codes" do
331
- @geo_search_from_codes.should_not include('United States')
332
- end
333
- it "should have a separate value for each geographicCode element" do
334
- m = "<mods #{@ns_decl}>
335
- <subject>
336
- <geographicCode authority='marcgac'>e-er</geographicCode>
337
- <geographicCode authority='marccountry'>mg</geographicCode>
338
- </subject>
339
- <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
340
- </mods>"
341
- @smods_rec.from_str m
342
- @smods_rec.sw_geographic_search.should == ['Estonia', 'Madagascar', 'Maryland']
343
- end
344
- it "should be nil if there are only empty values in the MODS" do
345
- m = "<mods #{@ns_decl}><subject><geographicCode/></subject><note>notit</note></mods>"
346
- @smods_rec.from_str m
347
- @smods_rec.sw_geographic_search.should == nil
348
- end
349
- it "should add the translated value if it wasn't present already" do
350
- m = "<mods #{@ns_decl}>
351
- <subject><geographic>Somewhere</geographic></subject>
352
- <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
353
- </mods>"
354
- @smods_rec.from_str m
355
- @smods_rec.sw_geographic_search.size.should == 2
356
- @smods_rec.sw_geographic_search.should include('Estonia')
357
- end
358
- it "should not add the translated value if it was already present" do
359
- m = "<mods #{@ns_decl}>
360
- <subject><geographic>Estonia</geographic></subject>
361
- <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
362
- </mods>"
363
- @smods_rec.from_str m
364
- @smods_rec.sw_geographic_search.size.should == 1
365
- @smods_rec.sw_geographic_search.should == ['Estonia']
366
- end
367
- end
368
- end # sw_geographic_search
369
- end # context sw subject methods
370
-
371
180
  end
@@ -0,0 +1,384 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe "Searchworks mixin for Stanford::Mods::Record" do
5
+
6
+ before(:all) do
7
+ @smods_rec = Stanford::Mods::Record.new
8
+ @ns_decl = "xmlns='#{Mods::MODS_NS}'"
9
+ end
10
+
11
+ context "sw subject methods" do
12
+ before(:all) do
13
+ @genre = 'genre top level'
14
+ @cart_coord = '6 00 S, 71 30 E'
15
+ @s_genre = 'genre in subject'
16
+ @geo = 'Somewhere'
17
+ @geo_code = 'us'
18
+ @hier_geo_country = 'France'
19
+ @s_name = 'name in subject'
20
+ @occupation = 'worker bee'
21
+ @temporal = 'temporal'
22
+ @s_title = 'title in subject'
23
+ @topic = 'topic'
24
+ m = "<mods #{@ns_decl}>
25
+ <genre>#{@genre}</genre>
26
+ <subject><cartographics><coordinates>#{@cart_coord}</coordinates></cartographics></subject>
27
+ <subject><genre>#{@s_genre}</genre></subject>
28
+ <subject><geographic>#{@geo}</geographic></subject>
29
+ <subject><geographicCode authority='iso3166'>#{@geo_code}</geographicCode></subject>
30
+ <subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject>
31
+ <subject><name><namePart>#{@s_name}</namePart></name></subject>
32
+ <subject><occupation>#{@occupation}</occupation></subject>
33
+ <subject><temporal>#{@temporal}</temporal></subject>
34
+ <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
35
+ <subject><topic>#{@topic}</topic></subject>
36
+ </mods>"
37
+ @smods_rec.from_str m
38
+ @sw_geographic_search = @smods_rec.sw_geographic_search
39
+ @sw_subject_titles = @smods_rec.sw_subject_titles
40
+ @sw_subject_names = @smods_rec.sw_subject_names
41
+ end
42
+
43
+ context "sw_subject_names" do
44
+ it "should contain <subject><name><namePart> values" do
45
+ @sw_subject_names.should include(@s_name)
46
+ end
47
+ it "should not contain non-name subject subelements" do
48
+ @sw_subject_names.should_not include(@cart_coord)
49
+ @sw_subject_names.should_not include(@s_genre)
50
+ @sw_subject_names.should_not include(@geo)
51
+ @sw_subject_names.should_not include(@geo_code)
52
+ @sw_subject_names.should_not include(@hier_geo_country)
53
+ @sw_subject_names.should_not include(@occupation)
54
+ @sw_subject_names.should_not include(@temporal)
55
+ @sw_subject_names.should_not include(@topic)
56
+ @sw_subject_names.should_not include(@s_title)
57
+ end
58
+ it "should not contain subject/name/role" do
59
+ m = "<mods #{@ns_decl}>
60
+ <subject><name type='personal'>
61
+ <namePart>Alterman, Eric</namePart>
62
+ <displayForm>Eric Alterman</displayForm>
63
+ <role>
64
+ <roleTerm type='text'>creator</roleTerm>
65
+ <roleTerm type='code'>cre</roleTerm>
66
+ </role>
67
+ </name></subject></mods>"
68
+ @smods_rec.from_str m
69
+ @smods_rec.sw_subject_names.find { |sn| sn =~ /cre/ }.should == nil
70
+ end
71
+ it "should not contain subject/name/affiliation" do
72
+ m = "<mods #{@ns_decl}>
73
+ <subject><name type='personal'>
74
+ <namePart type='termsOfAddress'>Dr.</namePart>
75
+ <namePart>Brown, B. F.</namePart>
76
+ <affiliation>Chemistry Dept., American University</affiliation>
77
+ </name></subject></mods>"
78
+ @smods_rec.from_str m
79
+ @smods_rec.sw_subject_names.find { |sn| sn =~ /Chemistry/ }.should == nil
80
+ end
81
+ it "should not contain subject/name/description" do
82
+ m = "<mods #{@ns_decl}>
83
+ <subject><name type='personal'>
84
+ <namePart>Abrams, Michael</namePart>
85
+ <description>American artist, 20th c.</description>
86
+ </name></subject></mods>"
87
+ @smods_rec.from_str m
88
+ @smods_rec.sw_subject_names.find { |sn| sn =~ /artist/ }.should == nil
89
+ end
90
+ it "should not include top level name element" do
91
+ m = "<mods #{@ns_decl}>
92
+ <name type='personal'>
93
+ <namePart>Abrams, Michael</namePart>
94
+ <description>American artist, 20th c.</description>
95
+ </name></mods>"
96
+ @smods_rec.from_str m
97
+ @smods_rec.sw_subject_names.should == []
98
+ end
99
+ it "should have one value for each name element" do
100
+ m = "<mods #{@ns_decl}>
101
+ <subject>
102
+ <name><namePart>first</namePart></name>
103
+ <name><namePart>second</namePart></name>
104
+ </subject>
105
+ <subject>
106
+ <name><namePart>third</namePart></name>
107
+ </subject>
108
+ </mods>"
109
+ @smods_rec.from_str m
110
+ @smods_rec.sw_subject_names.should == ['first', 'second', 'third']
111
+ end
112
+ it "should be an empty Array if there are no values in the mods" do
113
+ m = "<mods #{@ns_decl}><note>notit</note></mods>"
114
+ @smods_rec.from_str m
115
+ @smods_rec.sw_subject_names.should == []
116
+ end
117
+ it "should be an empty Array if there are empty values in the mods" do
118
+ m = "<mods #{@ns_decl}><subject><name><namePart/></name></subject><note>notit</note></mods>"
119
+ @smods_rec.from_str m
120
+ @smods_rec.sw_subject_names.should == []
121
+ end
122
+ context "combining subelements" do
123
+ before(:all) do
124
+ m = "<mods #{@ns_decl}>
125
+ <subject>
126
+ <name>
127
+ <namePart>first</namePart>
128
+ <namePart>second</namePart>
129
+ </name>
130
+ </subject>
131
+ </mods>"
132
+ @smods_rec.from_str m
133
+ end
134
+ it "uses a ', ' as the separator by default" do
135
+ @smods_rec.sw_subject_names.should == ['first, second']
136
+ end
137
+ it "honors any string value passed in for the separator" do
138
+ @smods_rec.sw_subject_names(' --').should == ['first --second']
139
+ end
140
+ end
141
+ end # sw_subject_names
142
+
143
+ context "sw_subject_titles" do
144
+ it "should contain <subject><titleInfo> subelement values" do
145
+ @sw_subject_titles.should include(@s_title)
146
+ end
147
+ it "should not contain non-name subject subelements" do
148
+ @sw_subject_titles.should_not include(@cart_coord)
149
+ @sw_subject_titles.should_not include(@s_genre)
150
+ @sw_subject_titles.should_not include(@geo)
151
+ @sw_subject_titles.should_not include(@geo_code)
152
+ @sw_subject_titles.should_not include(@hier_geo_country)
153
+ @sw_subject_titles.should_not include(@s_name)
154
+ @sw_subject_titles.should_not include(@occupation)
155
+ @sw_subject_titles.should_not include(@temporal)
156
+ @sw_subject_titles.should_not include(@topic)
157
+ end
158
+ it "should not include top level titleInfo element" do
159
+ m = "<mods #{@ns_decl}><titleInfo><title>Oklahoma</title></titleInfo></mods>"
160
+ @smods_rec.from_str m
161
+ @smods_rec.sw_subject_titles.should == []
162
+ end
163
+ it "should have one value for each titleInfo element" do
164
+ m = "<mods #{@ns_decl}>
165
+ <subject>
166
+ <titleInfo><title>first</title></titleInfo>
167
+ <titleInfo><title>second</title></titleInfo>
168
+ </subject>
169
+ <subject>
170
+ <titleInfo><title>third</title></titleInfo>
171
+ </subject>
172
+ </mods>"
173
+ @smods_rec.from_str m
174
+ @smods_rec.sw_subject_titles.should == ['first', 'second', 'third']
175
+ end
176
+ it "should be an empty Array if there are no values in the mods" do
177
+ m = "<mods #{@ns_decl}><note>notit</note></mods>"
178
+ @smods_rec.from_str m
179
+ @smods_rec.sw_subject_titles.should == []
180
+ end
181
+ it "should be an empty Array if there are empty values in the mods" do
182
+ m = "<mods #{@ns_decl}><subject><titleInfo><title/></titleInfo></subject><note>notit</note></mods>"
183
+ @smods_rec.from_str m
184
+ @smods_rec.sw_subject_titles.should == []
185
+ end
186
+ context "combining subelements" do
187
+ before(:all) do
188
+ m = "<mods #{@ns_decl}>
189
+ <subject>
190
+ <titleInfo>
191
+ <title>first</title>
192
+ <subTitle>second</subTitle>
193
+ </titleInfo>
194
+ </subject>
195
+ </mods>"
196
+ @smods_rec.from_str m
197
+ end
198
+ it "uses a ' ' as the separator by default" do
199
+ @smods_rec.sw_subject_titles.should == ['first second']
200
+ end
201
+ it "honors any string value passed in for the separator" do
202
+ @smods_rec.sw_subject_titles(' --').should == ['first --second']
203
+ end
204
+ it "includes all subelements in the order of occurrence" do
205
+ m = "<mods #{@ns_decl}>
206
+ <subject>
207
+ <titleInfo>
208
+ <partName>1</partName>
209
+ <nonSort>2</nonSort>
210
+ <partNumber>3</partNumber>
211
+ <title>4</title>
212
+ <subTitle>5</subTitle>
213
+ </titleInfo>
214
+ </subject>
215
+ </mods>"
216
+ @smods_rec.from_str m
217
+ @smods_rec.sw_subject_titles.should == ['1 2 3 4 5']
218
+ end
219
+ end
220
+ end # sw_subject_titles
221
+
222
+
223
+ context "sw_geographic_search" do
224
+ it "should contain subject <geographic> subelement data" do
225
+ @sw_geographic_search.should include(@geo)
226
+ end
227
+ it "should contain subject <hierarchicalGeographic> subelement data" do
228
+ @sw_geographic_search.should include(@hier_geo_country)
229
+ end
230
+ it "should contain translation of <geographicCode> subelement data with translated authorities" do
231
+ m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
232
+ @smods_rec.from_str m
233
+ @smods_rec.sw_geographic_search.should include('Estonia')
234
+ end
235
+ it "should not contain other subject element data" do
236
+ @sw_geographic_search.should_not include(@genre)
237
+ @sw_geographic_search.should_not include(@cart_coord)
238
+ @sw_geographic_search.should_not include(@s_genre)
239
+ @sw_geographic_search.should_not include(@s_name)
240
+ @sw_geographic_search.should_not include(@occupation)
241
+ @sw_geographic_search.should_not include(@temporal)
242
+ @sw_geographic_search.should_not include(@topic)
243
+ @sw_geographic_search.should_not include(@s_title)
244
+ end
245
+ it "should be [] if there are no values in the MODS" do
246
+ m = "<mods #{@ns_decl}><note>notit</note></mods>"
247
+ @smods_rec.from_str m
248
+ @smods_rec.sw_geographic_search.should == []
249
+ end
250
+ it "should not be empty Array if there are only subject/geographic elements" do
251
+ m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
252
+ @smods_rec.from_str m
253
+ @smods_rec.sw_geographic_search.should == [@geo]
254
+ end
255
+ it "should not be empty Array if there are only subject/hierarchicalGeographic" do
256
+ m = "<mods #{@ns_decl}><subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject></mods>"
257
+ @smods_rec.from_str m
258
+ @smods_rec.sw_geographic_search.should == [@hier_geo_country]
259
+ end
260
+ it "should not be empty Array if there are only subject/geographicCode elements" do
261
+ m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
262
+ @smods_rec.from_str m
263
+ @smods_rec.sw_geographic_search.should == ['Estonia']
264
+ end
265
+ context "geographic subelement" do
266
+ it "should have a separate value for each geographic element" do
267
+ m = "<mods #{@ns_decl}>
268
+ <subject>
269
+ <geographic>Mississippi</geographic>
270
+ <geographic>Tippah County</geographic>
271
+ </subject>
272
+ <subject><geographic>Washington (D.C.)</geographic></subject>
273
+ </mods>"
274
+ @smods_rec.from_str m
275
+ @smods_rec.sw_geographic_search.should == ['Mississippi', 'Tippah County', 'Washington (D.C.)']
276
+ end
277
+ it "should be empty Array if there are only empty values in the MODS" do
278
+ m = "<mods #{@ns_decl}><subject><geographic/></subject><note>notit</note></mods>"
279
+ @smods_rec.from_str m
280
+ @smods_rec.sw_geographic_search.should == []
281
+ end
282
+ end
283
+ context "hierarchicalGeographic subelement" do
284
+ it "should have a separate value for each hierarchicalGeographic element" do
285
+ m = "<mods #{@ns_decl}>
286
+ <subject>
287
+ <hierarchicalGeographic><area>first</area></hierarchicalGeographic>
288
+ <hierarchicalGeographic><area>second</area></hierarchicalGeographic>
289
+ </subject>
290
+ <subject><hierarchicalGeographic><area>third</area></hierarchicalGeographic></subject>
291
+ </mods>"
292
+ @smods_rec.from_str m
293
+ @smods_rec.sw_geographic_search.should == ['first', 'second', 'third']
294
+ end
295
+ it "should be empty Array if there are only empty values in the MODS" do
296
+ m = "<mods #{@ns_decl}><subject><hierarchicalGeographic/></subject><note>notit</note></mods>"
297
+ @smods_rec.from_str m
298
+ @smods_rec.sw_geographic_search.should == []
299
+ end
300
+ context "combining subelements" do
301
+ before(:all) do
302
+ m = "<mods #{@ns_decl}>
303
+ <subject>
304
+ <hierarchicalGeographic>
305
+ <country>Canada</country>
306
+ <province>British Columbia</province>
307
+ <city>Vancouver</city>
308
+ </hierarchicalGeographic>
309
+ </subject></mods>"
310
+ @smods_rec.from_str m
311
+ end
312
+ it "uses a space as the separator by default" do
313
+ @smods_rec.sw_geographic_search.should == ['Canada British Columbia Vancouver']
314
+ end
315
+ it "honors any string value passed in for the separator" do
316
+ @smods_rec.sw_geographic_search(' --').should == ['Canada --British Columbia --Vancouver']
317
+ end
318
+ end
319
+ end # hierarchicalGeographic
320
+ context "geographicCode subelement" do
321
+ before(:all) do
322
+ m = "<mods #{@ns_decl}>
323
+ <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
324
+ <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
325
+ <subject><geographicCode authority='marccountry'>mg</geographicCode></subject>
326
+ <subject><geographicCode authority='iso3166'>us</geographicCode></subject>
327
+ </mods>"
328
+ @smods_rec.from_str m
329
+ @geo_search_from_codes = @smods_rec.sw_geographic_search
330
+ end
331
+ it "should not add untranslated values" do
332
+ @geo_search_from_codes.should_not include('n-us-md')
333
+ @geo_search_from_codes.should_not include('e-er')
334
+ @geo_search_from_codes.should_not include('mg')
335
+ @geo_search_from_codes.should_not include('us')
336
+ end
337
+ it "should translate marcgac codes" do
338
+ @geo_search_from_codes.should include('Estonia')
339
+ end
340
+ it "should translate marccountry codes" do
341
+ @geo_search_from_codes.should include('Madagascar')
342
+ end
343
+ it "should not translate other codes" do
344
+ @geo_search_from_codes.should_not include('United States')
345
+ end
346
+ it "should have a separate value for each geographicCode element" do
347
+ m = "<mods #{@ns_decl}>
348
+ <subject>
349
+ <geographicCode authority='marcgac'>e-er</geographicCode>
350
+ <geographicCode authority='marccountry'>mg</geographicCode>
351
+ </subject>
352
+ <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
353
+ </mods>"
354
+ @smods_rec.from_str m
355
+ @smods_rec.sw_geographic_search.should == ['Estonia', 'Madagascar', 'Maryland']
356
+ end
357
+ it "should be empty Array if there are only empty values in the MODS" do
358
+ m = "<mods #{@ns_decl}><subject><geographicCode/></subject><note>notit</note></mods>"
359
+ @smods_rec.from_str m
360
+ @smods_rec.sw_geographic_search.should == []
361
+ end
362
+ it "should add the translated value if it wasn't present already" do
363
+ m = "<mods #{@ns_decl}>
364
+ <subject><geographic>Somewhere</geographic></subject>
365
+ <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
366
+ </mods>"
367
+ @smods_rec.from_str m
368
+ @smods_rec.sw_geographic_search.size.should == 2
369
+ @smods_rec.sw_geographic_search.should include('Estonia')
370
+ end
371
+ it "should not add the translated value if it was already present" do
372
+ m = "<mods #{@ns_decl}>
373
+ <subject><geographic>Estonia</geographic></subject>
374
+ <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
375
+ </mods>"
376
+ @smods_rec.from_str m
377
+ @smods_rec.sw_geographic_search.size.should == 1
378
+ @smods_rec.sw_geographic_search.should == ['Estonia']
379
+ end
380
+ end
381
+ end # sw_geographic_search
382
+ end # context sw subject methods
383
+
384
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stanford-mods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-04 00:00:00.000000000 Z
13
+ date: 2013-01-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mods
@@ -154,6 +154,7 @@ files:
154
154
  - spec/kolb_spec.rb
155
155
  - spec/name_spec.rb
156
156
  - spec/searchworks_spec.rb
157
+ - spec/searchworks_subject_spec.rb
157
158
  - spec/spec_helper.rb
158
159
  - stanford-mods.gemspec
159
160
  homepage: https://github.com/sul-dlss/stanford-mods
@@ -170,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
171
  version: '0'
171
172
  segments:
172
173
  - 0
173
- hash: 4369645381715877941
174
+ hash: 611342479831019770
174
175
  required_rubygems_version: !ruby/object:Gem::Requirement
175
176
  none: false
176
177
  requirements:
@@ -179,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
180
  version: '0'
180
181
  segments:
181
182
  - 0
182
- hash: 4369645381715877941
183
+ hash: 611342479831019770
183
184
  requirements: []
184
185
  rubyforge_project:
185
186
  rubygems_version: 1.8.24
@@ -191,5 +192,6 @@ test_files:
191
192
  - spec/kolb_spec.rb
192
193
  - spec/name_spec.rb
193
194
  - spec/searchworks_spec.rb
195
+ - spec/searchworks_subject_spec.rb
194
196
  - spec/spec_helper.rb
195
197
  has_rdoc: