stanford-mods 3.0.0 → 3.1.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/coordinate.rb +5 -2
- data/lib/stanford-mods/imprint.rb +37 -12
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/imprint_spec.rb +25 -0
- data/spec/lib/stanford-mods/coordinate_spec.rb +3 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22cc1cc8aafefb053ea3856e273e17be7089862160e91d87c483393b60c02aca
|
4
|
+
data.tar.gz: dbeea673e2c79744215c278ebf2fa73b78de3de7f79602590948bf4ee117b1df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb3d7b5761a6e4811dd85b6d4972ce238e5b507e957d617b5e4a3935bcd3e9f791176d250418a198d2b68a63babfc58dcb9c39d1b8b4fbbbdd01eecc504fa8a2
|
7
|
+
data.tar.gz: 3fe0f6181376c4cca9618a90e9a03244328f3a93a16ea55f1b5a72c7f842ddd0de8addbfb2da75efa4875bc4c04e4dd73caaad543745faf9461da7928566487e
|
@@ -65,11 +65,14 @@ module Stanford
|
|
65
65
|
# @param [String] point coordinate point in degrees notation
|
66
66
|
# @return [Float] converted value in decimal notation
|
67
67
|
def coord_to_decimal(point)
|
68
|
-
regex =
|
68
|
+
regex = Regexp.union(
|
69
|
+
/(?<dir>[NESW])\s*(?<deg>\d+)[°⁰º](?:(?<min>\d+)[ʹ'])?(?:(?<sec>\d+)[ʺ"])?/,
|
70
|
+
/^\s*(?<dir>[NESW])\s*(?<deg>\d+(?:[.]\d+)?)\s*$/
|
71
|
+
)
|
69
72
|
match = regex.match(point)
|
70
73
|
return Float::INFINITY unless match
|
71
74
|
|
72
|
-
dec = match['deg'].
|
75
|
+
dec = match['deg'].to_f
|
73
76
|
dec += match['min'].to_f / 60
|
74
77
|
dec += match['sec'].to_f / 60 / 60
|
75
78
|
dec = -1 * dec if match['dir'] == 'W' || match['dir'] == 'S'
|
@@ -166,8 +166,26 @@ module Stanford
|
|
166
166
|
return text.strip unless text =~ /^-?\d+$/ || text =~ /^[\dXxu?-]{4}$/
|
167
167
|
end
|
168
168
|
|
169
|
-
|
170
|
-
|
169
|
+
if date.is_a?(EDTF::Interval)
|
170
|
+
if value.precision == :century || value.precision == :decade
|
171
|
+
return format_date(date, value.precision)
|
172
|
+
end
|
173
|
+
|
174
|
+
range = [
|
175
|
+
format_date(date.min, date.min.precision),
|
176
|
+
format_date(date.max, date.max.precision)
|
177
|
+
].uniq.compact
|
178
|
+
|
179
|
+
return text.strip if range.empty?
|
180
|
+
|
181
|
+
range.join(' - ')
|
182
|
+
else
|
183
|
+
format_date(date, value.precision) || text.strip
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def format_date(date, precision)
|
188
|
+
case precision
|
171
189
|
when :day
|
172
190
|
date.strftime('%B %e, %Y')
|
173
191
|
when :month
|
@@ -183,24 +201,31 @@ module Stanford
|
|
183
201
|
year.to_s
|
184
202
|
end
|
185
203
|
when :century
|
186
|
-
|
204
|
+
if date.year.negative?
|
205
|
+
"#{((date.year / 100).abs + 1).ordinalize} century B.C."
|
206
|
+
else
|
207
|
+
"#{((date.year / 100) + 1).ordinalize} century"
|
208
|
+
end
|
187
209
|
when :decade
|
188
|
-
|
189
|
-
else
|
190
|
-
text.strip
|
210
|
+
"#{date.year}s"
|
191
211
|
end
|
192
212
|
end
|
193
213
|
|
194
214
|
# Decoded date with "B.C." or "A.D." and qualifier markers. See (outdated):
|
195
215
|
# https://consul.stanford.edu/display/chimera/MODS+display+rules#MODSdisplayrules-3b.%3CoriginInfo%3E
|
196
216
|
def qualified_value
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
217
|
+
qualified_format = case qualifier
|
218
|
+
when 'approximate'
|
219
|
+
'[ca. %s]'
|
220
|
+
when 'questionable'
|
221
|
+
'[%s?]'
|
222
|
+
when 'inferred'
|
223
|
+
'[%s]'
|
224
|
+
else
|
225
|
+
'%s'
|
226
|
+
end
|
202
227
|
|
203
|
-
|
228
|
+
format(qualified_format, decoded_value)
|
204
229
|
end
|
205
230
|
end
|
206
231
|
|
data/spec/imprint_spec.rb
CHANGED
@@ -189,6 +189,31 @@ describe Stanford::Mods::Imprint do
|
|
189
189
|
expect(updated_element).to eq 'April 2, 1948'
|
190
190
|
end
|
191
191
|
|
192
|
+
it 'handles very precise EDTF ranges' do
|
193
|
+
smods_rec.from_str <<-XML
|
194
|
+
#{mods_origin_info_start_str}
|
195
|
+
<dateIssued encoding="edtf">2014-01/2020-12-31</dateIssued>
|
196
|
+
#{mods_origin_info_end_str}
|
197
|
+
XML
|
198
|
+
|
199
|
+
imp = stanford_mods_imprint(smods_rec)
|
200
|
+
updated_element = imp.send(:date_str)
|
201
|
+
expect(updated_element).to eq 'January 2014 - December 31, 2020'
|
202
|
+
end
|
203
|
+
|
204
|
+
xit 'handles BC EDTF centuries' do
|
205
|
+
# ruby-edtf apparently can't handle this format
|
206
|
+
smods_rec.from_str <<-XML
|
207
|
+
#{mods_origin_info_start_str}
|
208
|
+
<dateIssued encoding="edtf">-09XX</dateIssued>
|
209
|
+
#{mods_origin_info_end_str}
|
210
|
+
XML
|
211
|
+
|
212
|
+
imp = stanford_mods_imprint(smods_rec)
|
213
|
+
updated_element = imp.send(:date_str)
|
214
|
+
expect(updated_element).to eq '10th century B.C.'
|
215
|
+
end
|
216
|
+
|
192
217
|
it 'handles the approximate qualifier' do
|
193
218
|
smods_rec.from_str <<-XML
|
194
219
|
#{mods_origin_info_start_str}
|
@@ -9,10 +9,6 @@ describe Stanford::Mods::Coordinate do
|
|
9
9
|
expect(described_class.new('W80°--E100°/N487°--S42°')).not_to be_valid
|
10
10
|
end
|
11
11
|
|
12
|
-
it 'rejects coordinates without degree symbols' do
|
13
|
-
expect(described_class.new('W 650--W 100/N 700--N 550')).not_to be_valid
|
14
|
-
end
|
15
|
-
|
16
12
|
it 'rejects malformed coordinates' do
|
17
13
|
expect(described_class.new('(E29°--E35/°S12°--S16°).')).not_to be_valid
|
18
14
|
end
|
@@ -43,7 +39,9 @@ describe Stanford::Mods::Coordinate do
|
|
43
39
|
%((W 170⁰--E 55⁰/N 40⁰--S 36⁰).) =>
|
44
40
|
'-170.0 -36.0 55.0 40.0', # superscript 0 is almost a degree character..
|
45
41
|
%((W 0°-W 0°/S 90°---S 90°)) =>
|
46
|
-
'-0.0 -90.0 -0.0 -90.0' # one dash, two dashes, three dashes.. what's the difference?
|
42
|
+
'-0.0 -90.0 -0.0 -90.0', # one dash, two dashes, three dashes.. what's the difference?
|
43
|
+
%((W 030.6--E 068.1/N 041.7--S 042.4)) =>
|
44
|
+
'-30.6 -42.4 68.1 41.7'
|
47
45
|
}.each do |value, expected|
|
48
46
|
describe 'parsing' do
|
49
47
|
let(:subject) { described_class.new(value) }
|
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: 3.
|
4
|
+
version: 3.1.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: 2022-
|
12
|
+
date: 2022-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mods
|