stanford-mods 2.3.1 → 2.4.0
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/lib/stanford-mods/geo_spatial.rb +28 -11
- data/lib/stanford-mods/origin_info.rb +35 -58
- data/lib/stanford-mods/physical_location.rb +38 -60
- data/lib/stanford-mods/searchworks_subjects.rb +16 -27
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/geo_spatial_spec.rb +25 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4fe370e5f566e6a8aaf2cecf78f8d2f261e83d3
|
4
|
+
data.tar.gz: 7fd7c27ee40726c0509190ef9dfd398fba91d95d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac960448cdf1c552d8e78822735bfacce0dfd193a729e8f8f8f4b6516c6eb06cb639546ce3183f5be5d6283251036e82b4f53ed04b2d482fe01da80440d208fc
|
7
|
+
data.tar.gz: bbdd468328c00a918ecf898a2217f58cf8b3737a4e541246da480103bf9405293350410f2629f4492ae591bb47d0dd8a6223dce1f0abf88a55c2de1c18ce1681
|
@@ -18,19 +18,36 @@ module Stanford
|
|
18
18
|
# <gml:upperCorner>-122.149475 37.4435369</gml:upperCorner>
|
19
19
|
def geo_extensions_as_envelope
|
20
20
|
mods_ng_xml.extension
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
.xpath(
|
22
|
+
'//rdf:RDF/rdf:Description/gml:boundedBy/gml:Envelope',
|
23
|
+
'gml' => GMLNS,
|
24
|
+
'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
|
25
|
+
).map do |v|
|
26
|
+
uppers = v.xpath('gml:upperCorner', 'gml' => GMLNS).text.split
|
27
|
+
lowers = v.xpath('gml:lowerCorner', 'gml' => GMLNS).text.split
|
28
|
+
"ENVELOPE(#{lowers[0]}, #{uppers[0]}, #{uppers[1]}, #{lowers[1]})"
|
29
|
+
end
|
29
30
|
rescue RuntimeError => e
|
30
31
|
logger.warn "failure parsing <extension> element: #{e.message}"
|
31
32
|
[]
|
32
33
|
end
|
33
34
|
|
35
|
+
# @return [Array{String}] values suitable for solr SRPT fields, like "-16.0 28.0"
|
36
|
+
# @note example xml leaf nodes
|
37
|
+
# <gml:pos>-122.191292 37.4063388</gml:pos>
|
38
|
+
def geo_extensions_point_data
|
39
|
+
mods_ng_xml.extension
|
40
|
+
.xpath(
|
41
|
+
'//rdf:RDF/rdf:Description/gmd:centerPoint/gml:Point[gml:pos]',
|
42
|
+
'gml' => GMLNS,
|
43
|
+
'gmd' => 'http://www.isotc211.org/2005/gmd',
|
44
|
+
'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
|
45
|
+
).map do |v|
|
46
|
+
lat, long = v.xpath('gml:pos', 'gml' => GMLNS).text.split
|
47
|
+
"#{long} #{lat}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
34
51
|
# @return [Array{Stanford::Mods::Coordinate}] valid coordinates as objects
|
35
52
|
def coordinates_objects
|
36
53
|
coordinates.map { |n| Stanford::Mods::Coordinate.new(n) }.select(&:valid?)
|
@@ -47,6 +64,6 @@ module Stanford
|
|
47
64
|
end
|
48
65
|
|
49
66
|
alias point_bbox coordinates_as_bbox
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -13,10 +13,9 @@ module Stanford
|
|
13
13
|
# return pub year as an Integer
|
14
14
|
# prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
|
15
15
|
# look for a keyDate and use it if there is one; otherwise pick earliest date
|
16
|
-
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute)
|
17
|
-
# should be ignored; false if approximate dates should be included
|
16
|
+
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
|
18
17
|
# @return [Integer] publication year as an Integer
|
19
|
-
#
|
18
|
+
# @note for sorting: 5 B.C. => -5; 666 B.C. => -666
|
20
19
|
def pub_year_int(ignore_approximate = false)
|
21
20
|
single_pub_year(ignore_approximate, :year_int)
|
22
21
|
end
|
@@ -24,11 +23,10 @@ module Stanford
|
|
24
23
|
# return a single string intended for lexical sorting for pub date
|
25
24
|
# prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
|
26
25
|
# look for a keyDate and use it if there is one; otherwise pick earliest date
|
27
|
-
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute)
|
28
|
-
# should be ignored; false if approximate dates should be included
|
26
|
+
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
|
29
27
|
# @return [String] single String containing publication year for lexical sorting
|
30
|
-
#
|
31
|
-
# @deprecated
|
28
|
+
# @note for string sorting 5 B.C. = -5 => -995; 6 B.C. => -994, so 6 B.C. sorts before 5 B.C.
|
29
|
+
# @deprecated use pub_year_int
|
32
30
|
def pub_year_sort_str(ignore_approximate = false)
|
33
31
|
single_pub_year(ignore_approximate, :year_sort_str)
|
34
32
|
end
|
@@ -186,8 +184,7 @@ module Stanford
|
|
186
184
|
result = send(method_sym, date_issued_elements(ignore_approximate))
|
187
185
|
result ||= send(method_sym, date_created_elements(ignore_approximate))
|
188
186
|
# dateCaptured for web archive seed records
|
189
|
-
result
|
190
|
-
result
|
187
|
+
result || send(method_sym, mods_ng_xml.origin_info.dateCaptured.to_a)
|
191
188
|
end
|
192
189
|
|
193
190
|
# given the passed date elements, look for a single keyDate and use it if there is one;
|
@@ -210,10 +207,9 @@ module Stanford
|
|
210
207
|
# get earliest parseable year from the passed date elements
|
211
208
|
# @param [Array<Nokogiri::XML::Element>] date_el_array the elements from which to select a pub date
|
212
209
|
# @param [Symbol] method_sym method name in DateParsing, as a symbol
|
213
|
-
# @return two values:
|
214
|
-
#
|
215
|
-
#
|
216
|
-
# the second is the original String value of the chosen element
|
210
|
+
# @return [Array<String,Integer>] two values: earliest date and the original element string
|
211
|
+
# - first is earliest date either as lexically sortable String value or the Integer, depending on method_sym
|
212
|
+
# - second is the original String value of the chosen element
|
217
213
|
def earliest_year(date_el_array, method_sym)
|
218
214
|
poss_results = {}
|
219
215
|
date_el_array.each { |el|
|
@@ -228,8 +224,7 @@ module Stanford
|
|
228
224
|
# ---- old date parsing methods used downstream of gem; will be deprecated/replaced with new date parsing methods
|
229
225
|
|
230
226
|
def place
|
231
|
-
|
232
|
-
vals
|
227
|
+
term_values([:origin_info, :place, :placeTerm])
|
233
228
|
end
|
234
229
|
|
235
230
|
# Values for the pub date facet. This is less strict than the 4 year date requirements for pub_date
|
@@ -237,28 +232,18 @@ module Stanford
|
|
237
232
|
# Spotlight: pub_date field should be replaced by pub_year_w_approx_isi and pub_year_no_approx_isi
|
238
233
|
# SearchWorks: pub_date field used for display in search results and show view; for sorting nearby-on-shelf
|
239
234
|
# these could be done with more approp fields/methods (pub_year_int for sorting; new pub year methods to populate field)
|
240
|
-
# TODO:
|
235
|
+
# TODO: prob should deprecate this in favor of pub_year_display_str;
|
241
236
|
# need head-to-head testing with pub_year_display_str
|
242
|
-
# @return
|
237
|
+
# @return [String] value for the pub date facet
|
243
238
|
def pub_date_facet
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
if pub_date.include? '--'
|
249
|
-
cent = pub_date[0, 2].to_i
|
250
|
-
cent += 1
|
251
|
-
cent = cent.to_s + 'th century'
|
252
|
-
return cent
|
253
|
-
else
|
254
|
-
return pub_date
|
255
|
-
end
|
256
|
-
end
|
257
|
-
nil
|
239
|
+
return nil unless pub_date
|
240
|
+
return "#{pub_date.to_i + 1000} B.C." if pub_date.start_with?('-')
|
241
|
+
return pub_date unless pub_date.include? '--'
|
242
|
+
"#{pub_date[0, 2].to_i + 1}th century"
|
258
243
|
end
|
259
244
|
|
260
245
|
# creates a date suitable for sorting. Guarnteed to be 4 digits or nil
|
261
|
-
# @deprecated
|
246
|
+
# @deprecated use pub_year_int, or pub_year_sort_str if you must have a string (why?)
|
262
247
|
def pub_date_sort
|
263
248
|
if pub_date
|
264
249
|
pd = pub_date
|
@@ -272,14 +257,14 @@ module Stanford
|
|
272
257
|
# For the date display only, the first place to look is in the dates without encoding=marc array.
|
273
258
|
# If no such dates, select the first date in the dates_marc_encoding array. Otherwise return nil
|
274
259
|
# @return [String] value for the pub_date_display Solr field for this document or nil if none
|
275
|
-
# @deprecated
|
260
|
+
# @deprecated DO NOT USE: this is no longer used in SW, Revs or Spotlight Jan 2016
|
276
261
|
def pub_date_display
|
277
262
|
return dates_no_marc_encoding.first unless dates_no_marc_encoding.empty?
|
278
263
|
return dates_marc_encoding.first unless dates_marc_encoding.empty?
|
279
264
|
nil
|
280
265
|
end
|
281
266
|
|
282
|
-
#
|
267
|
+
# old date parsing protected methods to be deprecated/replaced with new methods (see also DateParsing)
|
283
268
|
|
284
269
|
protected
|
285
270
|
|
@@ -292,30 +277,23 @@ module Stanford
|
|
292
277
|
return @pub_year
|
293
278
|
end
|
294
279
|
|
295
|
-
dates = pub_dates
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
pruned_dates << f_date.tr('?', '0')
|
302
|
-
else
|
303
|
-
pruned_dates << f_date.delete('?[]')
|
304
|
-
end
|
280
|
+
dates = pub_dates.map do |f_date|
|
281
|
+
# remove ? and []
|
282
|
+
if f_date.length == 4 && f_date.end_with?('?')
|
283
|
+
f_date.tr('?', '0')
|
284
|
+
else
|
285
|
+
f_date.delete('?[]')
|
305
286
|
end
|
287
|
+
end
|
288
|
+
|
289
|
+
if dates
|
306
290
|
# try to find a date starting with the most normal date formats and progressing to more wonky ones
|
307
|
-
@pub_year = get_plain_four_digit_year
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
return @pub_year if @pub_year
|
314
|
-
@pub_year = get_bc_year pruned_dates
|
315
|
-
return @pub_year if @pub_year
|
316
|
-
@pub_year = get_three_digit_year pruned_dates
|
317
|
-
return @pub_year if @pub_year
|
318
|
-
@pub_year = get_single_digit_century pruned_dates
|
291
|
+
@pub_year = get_plain_four_digit_year(dates) ||
|
292
|
+
get_u_year(dates) || # Check for years in u notation, e.g., 198u
|
293
|
+
get_double_digit_century(dates) ||
|
294
|
+
get_bc_year(dates) ||
|
295
|
+
get_three_digit_year(dates) ||
|
296
|
+
get_single_digit_century(dates)
|
319
297
|
return @pub_year if @pub_year
|
320
298
|
end
|
321
299
|
@pub_year = ''
|
@@ -384,7 +362,6 @@ module Stanford
|
|
384
362
|
matches = f_date.scan(/\d{4}/)
|
385
363
|
if matches.length == 1
|
386
364
|
@pub_year = matches.first
|
387
|
-
return matches.first
|
388
365
|
else
|
389
366
|
# when there are multiple matches, check for ones with CE after them
|
390
367
|
matches.each do |match|
|
@@ -396,8 +373,8 @@ module Stanford
|
|
396
373
|
return match
|
397
374
|
end
|
398
375
|
end
|
399
|
-
return matches.first
|
400
376
|
end
|
377
|
+
return matches.first
|
401
378
|
end
|
402
379
|
nil
|
403
380
|
end
|
@@ -8,78 +8,56 @@ module Stanford
|
|
8
8
|
# Each method here expects to find at most ONE matching element. Subsequent potential matches
|
9
9
|
# are ignored.
|
10
10
|
class Record < ::Mods::Record
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
11
|
+
# data in location/physicalLocation or in relatedItem/location/physicalLocation
|
12
|
+
# so use _location to get the data from either one of them
|
13
|
+
# @return [String] box number (note: single valued and might be something like 35A)
|
14
|
+
# @todo should it be hierarchical series/box/folder?
|
15
15
|
def box
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
match_data[1].strip if match_data.present?
|
22
|
-
end.compact
|
23
|
-
|
24
|
-
# There should only be one box
|
25
|
-
box_num.first
|
16
|
+
mods_ng_xml._location.physicalLocation.each do |node|
|
17
|
+
match_data = node.text.match(/Box ?:? ?([^,|(Folder)]+)/i) # note that this will also find Flatbox or Flat-box
|
18
|
+
return match_data[1].strip if match_data.present?
|
19
|
+
end
|
20
|
+
nil
|
26
21
|
end
|
27
22
|
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
23
|
+
# data in location/physicalLocation or in relatedItem/location/physicalLocation
|
24
|
+
# so use _location to get the data from either one of them
|
25
|
+
# @return [String] folder number (note: single valued)
|
26
|
+
# @todo should it be hierarchical series/box/folder?
|
32
27
|
def folder
|
33
|
-
|
34
|
-
folder_num = @mods_ng_xml._location.physicalLocation.map do |node|
|
28
|
+
mods_ng_xml._location.physicalLocation.each do |node|
|
35
29
|
val = node.text
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
val.match(/Folder ?:? ?([^,]+)/)
|
43
|
-
end
|
44
|
-
|
45
|
-
match_data[1].strip if match_data.present?
|
46
|
-
end.compact
|
47
|
-
|
48
|
-
# There should be one folder
|
49
|
-
folder_num.first
|
30
|
+
match_data = val =~ /\|/ ?
|
31
|
+
val.match(/Folder ?:? ?([^|]+)/) : # expect pipe-delimited, may contain commas within values
|
32
|
+
val.match(/Folder ?:? ?([^,]+)/) # expect comma-delimited, may NOT contain commas within values
|
33
|
+
return match_data[1].strip if match_data.present?
|
34
|
+
end
|
35
|
+
nil
|
50
36
|
end
|
51
37
|
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
38
|
+
# but only if it has series, accession, box or folder data
|
39
|
+
# data in location/physicalLocation or in relatedItem/location/physicalLocation
|
40
|
+
# so use _location to get the data from either one of them
|
41
|
+
# @return [String] entire contents of physicalLocation as a string (note: single valued)
|
42
|
+
# @note there is a "physicalLocation" and a "location" method defined in the mods gem, so we cannot use these names to avoid conflicts
|
43
|
+
# @todo should it be hierarchical series/box/folder?
|
58
44
|
def physical_location_str
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end.compact
|
63
|
-
|
64
|
-
# There should only be one location
|
65
|
-
loc.first
|
45
|
+
mods_ng_xml._location.physicalLocation.map(&:text).find do |text|
|
46
|
+
text =~ /.*(Series)|(Accession)|(Folder)|(Box).*/i
|
47
|
+
end
|
66
48
|
end
|
67
49
|
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
50
|
+
# data in location/physicalLocation or in relatedItem/location/physicalLocation
|
51
|
+
# so use _location to get the data from either one of them
|
52
|
+
# @return [String] series/accession 'number' (note: single valued)
|
53
|
+
# @todo should it be hierarchical series/box/folder?
|
72
54
|
def series
|
73
|
-
|
74
|
-
series_num = @mods_ng_xml._location.physicalLocation.map do |node|
|
75
|
-
val = node.text
|
55
|
+
mods_ng_xml._location.physicalLocation.each do |node|
|
76
56
|
# feigenbaum uses 'Accession'
|
77
|
-
match_data =
|
78
|
-
match_data[1].strip if match_data.present?
|
79
|
-
end
|
80
|
-
|
81
|
-
# There should be only one series
|
82
|
-
series_num.first
|
57
|
+
match_data = node.text.match(/(?:(?:Series)|(?:Accession)):? ([^,|]+)/i)
|
58
|
+
return match_data[1].strip if match_data.present?
|
59
|
+
end
|
60
|
+
nil
|
83
61
|
end
|
84
62
|
end # class Record
|
85
63
|
end # Module Mods
|
@@ -16,21 +16,15 @@ module Stanford
|
|
16
16
|
result = term_values([:subject, :geographic]) || []
|
17
17
|
|
18
18
|
# hierarchicalGeographic has sub elements
|
19
|
-
|
20
|
-
hg_vals =
|
21
|
-
hg_node.element_children.each { |e|
|
22
|
-
hg_vals << e.text unless e.text.empty?
|
23
|
-
}
|
19
|
+
mods_ng_xml.subject.hierarchicalGeographic.each { |hg_node|
|
20
|
+
hg_vals = hg_node.element_children.map(&:text).reject(&:empty?)
|
24
21
|
result << hg_vals.join(sep) unless hg_vals.empty?
|
25
22
|
}
|
26
23
|
|
27
|
-
trans_code_vals =
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
24
|
+
trans_code_vals = mods_ng_xml.subject.geographicCode.translated_value || []
|
25
|
+
trans_code_vals.each { |val|
|
26
|
+
result << val unless result.include?(val)
|
27
|
+
}
|
34
28
|
result
|
35
29
|
end
|
36
30
|
|
@@ -40,12 +34,11 @@ module Stanford
|
|
40
34
|
# @param [String] sep - the separator string for joining namePart sub elements
|
41
35
|
# @return [Array<String>] values for names inside subject elements or [] if none
|
42
36
|
def sw_subject_names(sep = ', ')
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
result
|
37
|
+
mods_ng_xml.subject.name_el
|
38
|
+
.select { |n_el| n_el.namePart }
|
39
|
+
.map { |name_el_w_np| name_el_w_np.namePart.map(&:text).reject(&:empty?) }
|
40
|
+
.reject(&:empty?)
|
41
|
+
.map { |parts| parts.join(sep).strip }
|
49
42
|
end
|
50
43
|
|
51
44
|
# Values are the contents of:
|
@@ -54,8 +47,8 @@ module Stanford
|
|
54
47
|
# @return [Array<String>] values for titles inside subject elements or [] if none
|
55
48
|
def sw_subject_titles(sep = ' ')
|
56
49
|
result = []
|
57
|
-
|
58
|
-
parts = ti_el.element_children.map
|
50
|
+
mods_ng_xml.subject.titleInfo.each { |ti_el|
|
51
|
+
parts = ti_el.element_children.map(&:text).reject(&:empty?)
|
59
52
|
result << parts.join(sep).strip unless parts.empty?
|
60
53
|
}
|
61
54
|
result
|
@@ -85,10 +78,7 @@ module Stanford
|
|
85
78
|
vals.concat(subject_names) if subject_names
|
86
79
|
vals.concat(subject_titles) if subject_titles
|
87
80
|
vals.concat(subject_occupations) if subject_occupations
|
88
|
-
vals.map! { |val|
|
89
|
-
v = val.sub(/[\\,;]$/, '')
|
90
|
-
v.strip
|
91
|
-
}
|
81
|
+
vals.map! { |val| val.sub(/[\\,;]$/, '').strip }
|
92
82
|
vals.empty? ? nil : vals
|
93
83
|
end
|
94
84
|
|
@@ -119,9 +109,8 @@ module Stanford
|
|
119
109
|
codes = term_values([:subject, :geographicCode])
|
120
110
|
if codes && codes.size > xvals.size
|
121
111
|
subject.geographicCode.each { |n|
|
122
|
-
|
123
|
-
|
124
|
-
end
|
112
|
+
next unless n.authority != 'marcgac' && n.authority != 'marccountry'
|
113
|
+
sw_logger.info("#{druid} has subject geographicCode element with untranslated encoding (#{n.authority}): #{n.to_xml}")
|
125
114
|
}
|
126
115
|
end
|
127
116
|
|
data/spec/geo_spatial_spec.rb
CHANGED
@@ -98,7 +98,7 @@ describe '#geo_extension_as_envelope' do
|
|
98
98
|
expect(mods.geo_extensions_as_envelope).to eq []
|
99
99
|
end
|
100
100
|
|
101
|
-
describe 'with data' do
|
101
|
+
describe 'with geo extension bounding-box data' do
|
102
102
|
let(:modsbody) do
|
103
103
|
<<-EOF
|
104
104
|
<extension displayLabel="geo">
|
@@ -128,4 +128,28 @@ describe '#geo_extension_as_envelope' do
|
|
128
128
|
expect(mods.geo_extensions_as_envelope).to eq ["ENVELOPE(-122.191292, -122.149475, 37.4435369, 37.4063388)"]
|
129
129
|
end
|
130
130
|
end
|
131
|
+
|
132
|
+
describe 'with geo-extension point data' do
|
133
|
+
let(:modsbody) do
|
134
|
+
<<-EOF
|
135
|
+
<extension displayLabel="geo">
|
136
|
+
<rdf:RDF xmlns:gml="http://www.opengis.net/gml/3.2/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:gmd="http://www.isotc211.org/2005/gmd">
|
137
|
+
<rdf:Description rdf:about="http://www.stanford.edu/cm896kp1291">
|
138
|
+
<dc:format>image/jpeg</dc:format>
|
139
|
+
<dc:type>Image</dc:type>
|
140
|
+
<gmd:centerPoint>
|
141
|
+
<gml:Point gml:id="ID">
|
142
|
+
<gml:pos>41.8898687280593 12.4913412520789</gml:pos>
|
143
|
+
</gml:Point>
|
144
|
+
</gmd:centerPoint>
|
145
|
+
</rdf:Description>
|
146
|
+
</rdf:RDF>
|
147
|
+
</extension>
|
148
|
+
EOF
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'extract point strings' do
|
152
|
+
expect(mods.geo_extensions_point_data).to eq ["12.4913412520789 41.8898687280593"]
|
153
|
+
end
|
154
|
+
end
|
131
155
|
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: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naomi Dushay
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mods
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
requirements: []
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.5.
|
180
|
+
rubygems_version: 2.5.2
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: Stanford specific wrangling of MODS metadata
|