mods 3.0.2 → 3.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mods/date.rb +10 -8
- data/lib/mods/name.rb +4 -4
- data/lib/mods/nom_terminology.rb +3 -0
- data/lib/mods/version.rb +1 -1
- data/spec/lib/date_spec.rb +4 -3
- data/spec/lib/name_spec.rb +28 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba231dc5a8e9d54605e9b7a066419c6d0bb63430bf0a245b7c143b206360daf6
|
4
|
+
data.tar.gz: 9ae4a4448f22fb661ff683dc1f4612be5a0531a7f41a1f8d0f2b59ef2232d180
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d8680c108fb0b5f915474530a73d097b52efd5ecb940b701a02d08228f56bf63be8194e034713949dfed6548a38236fe736089e0a792e453a50b00e627442ef
|
7
|
+
data.tar.gz: 3ddc2d8b385002a230a5a913f9f393ae8aabe4919569a19cd1c847404fe51e9ecc2e8e0951c87e07a312971eb5095619672487ffa9d0963cb7dfebbca11c8437
|
data/lib/mods/date.rb
CHANGED
@@ -183,7 +183,7 @@ module Mods
|
|
183
183
|
|
184
184
|
def self.munge_to_yyyy(text)
|
185
185
|
value = roman_to_int(text.upcase)
|
186
|
-
(value - 1).to_s.rjust(2, "0") + '
|
186
|
+
(value - 1).to_s.rjust(2, "0") + 'xx'
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
@@ -194,7 +194,7 @@ module Mods
|
|
194
194
|
REGEX = /(?<century>\d{2})--/
|
195
195
|
def self.normalize_to_edtf(text)
|
196
196
|
matches = text.match(REGEX)
|
197
|
-
"#{matches[:century]}
|
197
|
+
"#{matches[:century]}xx"
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
@@ -204,7 +204,7 @@ module Mods
|
|
204
204
|
|
205
205
|
def self.normalize_to_edtf(text)
|
206
206
|
matches = text.match(REGEX)
|
207
|
-
"#{matches[:century].to_i - 1}
|
207
|
+
"#{matches[:century].to_i - 1}xx"
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
@@ -224,7 +224,7 @@ module Mods
|
|
224
224
|
|
225
225
|
def self.normalize_to_edtf(text)
|
226
226
|
matches = text.match(REGEX)
|
227
|
-
"#{matches[:year]}
|
227
|
+
"#{matches[:year]}x"
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
@@ -234,7 +234,7 @@ module Mods
|
|
234
234
|
|
235
235
|
def self.normalize_to_edtf(text)
|
236
236
|
matches = text.match(REGEX)
|
237
|
-
"#{matches[:year]}
|
237
|
+
"#{matches[:year]}x"
|
238
238
|
end
|
239
239
|
end
|
240
240
|
|
@@ -460,6 +460,8 @@ module Mods
|
|
460
460
|
:century
|
461
461
|
elsif date_range.is_a? EDTF::Decade
|
462
462
|
:decade
|
463
|
+
elsif date.is_a? EDTF::Season
|
464
|
+
:month
|
463
465
|
elsif date.is_a? EDTF::Interval
|
464
466
|
date_range.precision
|
465
467
|
else
|
@@ -497,7 +499,7 @@ module Mods
|
|
497
499
|
case date_range
|
498
500
|
when EDTF::Unknown
|
499
501
|
nil
|
500
|
-
when EDTF::Epoch, EDTF::Interval
|
502
|
+
when EDTF::Epoch, EDTF::Interval, EDTF::Season
|
501
503
|
date_range.min
|
502
504
|
when EDTF::Set
|
503
505
|
date_range.to_a.first
|
@@ -522,7 +524,7 @@ module Mods
|
|
522
524
|
case date_range
|
523
525
|
when EDTF::Unknown
|
524
526
|
nil
|
525
|
-
when EDTF::Epoch, EDTF::Interval
|
527
|
+
when EDTF::Epoch, EDTF::Interval, EDTF::Season
|
526
528
|
date_range.max
|
527
529
|
when EDTF::Set
|
528
530
|
date_range.to_a.last.change(month: 12, day: 31)
|
@@ -538,7 +540,7 @@ module Mods
|
|
538
540
|
|
539
541
|
def date_range
|
540
542
|
@date_range ||= if text =~ /u/
|
541
|
-
::Date.edtf(text.gsub('u', 'X')) || date
|
543
|
+
::Date.edtf(text.gsub('u', 'x').gsub('X', 'x')) || date
|
542
544
|
else
|
543
545
|
date
|
544
546
|
end
|
data/lib/mods/name.rb
CHANGED
@@ -2,8 +2,8 @@ module Mods
|
|
2
2
|
|
3
3
|
class Name
|
4
4
|
|
5
|
-
CHILD_ELEMENTS = ['namePart', 'displayForm', 'affiliation', 'role', 'description']
|
6
|
-
|
5
|
+
CHILD_ELEMENTS = ['namePart', 'displayForm', 'affiliation', 'role', 'nameIdentifier', 'description']
|
6
|
+
|
7
7
|
# attributes on name node
|
8
8
|
ATTRIBUTES = Mods::AUTHORITY_ATTRIBS + Mods::LANG_ATTRIBS + ['type', 'displayLabel', 'usage', 'altRepGroup', 'nameTitleGroup']
|
9
9
|
|
@@ -11,7 +11,7 @@ module Mods
|
|
11
11
|
TYPES = ['personal', 'corporate', 'conference', 'family']
|
12
12
|
# valid values for type attribute on namePart node <name><namePart type="val"/></name>
|
13
13
|
NAME_PART_TYPES = ['date', 'family', 'given', 'termsOfAddress']
|
14
|
-
|
14
|
+
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
end
|
data/lib/mods/nom_terminology.rb
CHANGED
@@ -143,6 +143,9 @@ module Mods
|
|
143
143
|
end
|
144
144
|
n.displayForm :path => 'm:displayForm'
|
145
145
|
n.affiliation :path => 'm:affiliation'
|
146
|
+
n.nameIdentifier :path => 'm:nameIdentifier' do |ni|
|
147
|
+
with_attributes(ni, Mods::LANG_ATTRIBS | %w[displayLabel type typeURI invalid])
|
148
|
+
end
|
146
149
|
n.description_el :path => 'm:description' # description is used by Nokogiri
|
147
150
|
n.role :path => 'm:role' do |r|
|
148
151
|
r.roleTerm :path => 'm:roleTerm' do |rt|
|
data/lib/mods/version.rb
CHANGED
data/spec/lib/date_spec.rb
CHANGED
@@ -101,7 +101,8 @@ RSpec.describe Mods::Date do
|
|
101
101
|
'1900-06' => :month,
|
102
102
|
'1900-06-uu' => :month,
|
103
103
|
'1900-06-15' => :day,
|
104
|
-
'2014-01-01/2020-12-31' => :day
|
104
|
+
'2014-01-01/2020-12-31' => :day,
|
105
|
+
'1986-22' => :month
|
105
106
|
}.each do |data, expected|
|
106
107
|
describe "with #{data}" do
|
107
108
|
let(:date_element) { "<dateCreated encoding=\"edtf\">#{data}</dateCreated>" }
|
@@ -201,9 +202,9 @@ RSpec.describe Mods::Date do
|
|
201
202
|
{
|
202
203
|
'1905' => Date.parse('1905-01-01')..Date.parse('1905-12-31'),
|
203
204
|
'190u' => Date.parse('1900-01-01')..Date.parse('1909-12-31'),
|
204
|
-
'
|
205
|
+
'190x' => Date.parse('1900-01-01')..Date.parse('1909-12-31'),
|
205
206
|
'19uu' => Date.parse('1900-01-01')..Date.parse('1999-12-31'),
|
206
|
-
'
|
207
|
+
'19xx' => Date.parse('1900-01-01')..Date.parse('1999-12-31'),
|
207
208
|
'1856/1876' => Date.parse('1856-01-01')..Date.parse('1876-12-31'),
|
208
209
|
'[1667,1668,1670..1672]' => Date.parse('1667-01-01')..Date.parse('1672-12-31'),
|
209
210
|
'1900-uu' => Date.parse('1900-01-01')..Date.parse('1900-12-31'),
|
data/spec/lib/name_spec.rb
CHANGED
@@ -197,6 +197,7 @@ RSpec.describe "Mods <name> Element" do
|
|
197
197
|
<name>
|
198
198
|
<namePart>Exciting Prints</namePart>
|
199
199
|
<affiliation>whatever</affiliation>
|
200
|
+
<nameIdentifier typeURI="https://orcid.org" type="orcid">0000-0002-0666-0666</nameIdentifier>
|
200
201
|
<description>anything</description>
|
201
202
|
<role><roleTerm type='text'>some role</roleTerm></role>
|
202
203
|
</name>
|
@@ -280,6 +281,26 @@ RSpec.describe "Mods <name> Element" do
|
|
280
281
|
end
|
281
282
|
end
|
282
283
|
|
284
|
+
context 'with a nameIdentifier' do
|
285
|
+
subject(:record) do
|
286
|
+
mods_record(<<-XML)
|
287
|
+
<name>
|
288
|
+
<name type="personal">Whoopie Goldberg</name>
|
289
|
+
<nameIdentifier typeURI="https://orcid.org" type="orcid">0000-0002-0666-0666</nameIdentifier>
|
290
|
+
<role><roleTerm type='text'>some role</roleTerm></role>
|
291
|
+
</name>
|
292
|
+
XML
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'has the expected attributes for nameIdentifier' do
|
296
|
+
expect(record.plain_name.nameIdentifier.first).to have_attributes(
|
297
|
+
text: '0000-0002-0666-0666',
|
298
|
+
typeURI: 'https://orcid.org',
|
299
|
+
type_at: 'orcid'
|
300
|
+
)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
283
304
|
context 'without a family name and given name' do
|
284
305
|
subject(:record) do
|
285
306
|
mods_record("<name type='personal'>
|
@@ -349,6 +370,7 @@ RSpec.describe "Mods <name> Element" do
|
|
349
370
|
</name>
|
350
371
|
<name>
|
351
372
|
<namePart>Daniel Craig</namePart>
|
373
|
+
<nameIdentifier typeURI="https://orcid.org" type="orcid">0000-0002-0666-0666</nameIdentifier>
|
352
374
|
<role>
|
353
375
|
<roleTerm type='text' authority='marcrelator'>Actor</roleTerm>
|
354
376
|
<roleTerm type='code' authority='marcrelator'>cre</roleTerm>
|
@@ -363,6 +385,12 @@ RSpec.describe "Mods <name> Element" do
|
|
363
385
|
have_attributes(role: have_attributes(value: ['CreatorFake', 'Actor'], code: ['cre'], authority: ['marcrelator', 'marcrelator'], size: 2)),
|
364
386
|
have_attributes(role: have_attributes(value: ['Actor'], code: ['cre'], authority: ['marcrelator'], size: 1)),
|
365
387
|
])
|
388
|
+
expect(record.plain_name.last.nameIdentifier.first).to have_attributes(
|
389
|
+
text: '0000-0002-0666-0666',
|
390
|
+
typeURI: 'https://orcid.org',
|
391
|
+
type_at: 'orcid'
|
392
|
+
)
|
393
|
+
expect(record.plain_name.first.nameIdentifier).to be_empty
|
366
394
|
end
|
367
395
|
end
|
368
396
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
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: 2023-10-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -222,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '0'
|
224
224
|
requirements: []
|
225
|
-
rubygems_version: 3.
|
225
|
+
rubygems_version: 3.4.13
|
226
226
|
signing_key:
|
227
227
|
specification_version: 4
|
228
228
|
summary: Parse MODS (Metadata Object Description Schema) records.
|