datacite-mapping 0.1.17.1 → 0.1.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/lib/datacite/mapping/module_info.rb +1 -1
- data/lib/datacite/mapping/nonvalidating/identifier.rb +3 -3
- data/lib/datacite/mapping/resource.rb +6 -2
- data/spec/unit/datacite/mapping/funding_reference_spec.rb +17 -0
- data/spec/unit/datacite/mapping/identifier_spec.rb +4 -0
- data/spec/unit/datacite/mapping/nonvalidating/identifier_spec.rb +14 -0
- data/spec/unit/datacite/mapping/resource_spec.rb +55 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 206495b36be88be8111bbb81c4634ea5e558134e
|
4
|
+
data.tar.gz: 87f325106c27c2c500e97885ff5422c445ec806f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 646bbce9bea6dd89c1a8608ce1647cc9727ba022dca531d6f11b2478707813afec72b7c6681fcb5ea784bb02409f4caff55aa4c0911e3776b848cf696038bf82
|
7
|
+
data.tar.gz: d522fcb20188b4d41f0fb076120a00741926987ac1142703a3f1592b98693e058ea6f06438ead7f84e2b89e369760e6bff8725aeda14247206d59d6e67e10291
|
data/CHANGES.md
CHANGED
@@ -9,7 +9,7 @@ module Datacite
|
|
9
9
|
# @!attribute [r] identifier_type
|
10
10
|
# @return [String] the identifier type (always 'DOI')
|
11
11
|
# @!attribute [rw] value
|
12
|
-
# @return [String] the identifier value.
|
12
|
+
# @return [String, nil] the identifier value. Should be a valid DOI value (`10.`_registrant code_`/`_suffix_)
|
13
13
|
class Identifier
|
14
14
|
include XML::Mapping
|
15
15
|
|
@@ -23,8 +23,8 @@ module Datacite
|
|
23
23
|
fallback_mapping(:_default, :nonvalidating)
|
24
24
|
|
25
25
|
# Initializes a new {Identifier}
|
26
|
-
# @param value [String]
|
27
|
-
# the identifier value.
|
26
|
+
# @param value [String, nil]
|
27
|
+
# the identifier value. Should be a valid DOI value (`10.`_registrant code_`/`_suffix_)
|
28
28
|
def initialize(value:)
|
29
29
|
self.identifier_type = DOI
|
30
30
|
self.value = value
|
@@ -20,7 +20,7 @@ module Datacite
|
|
20
20
|
# A collection of metadata properties chosen for the accurate and consistent identification
|
21
21
|
# of a resource for citation and retrieval purposes, along with recommended use instructions.
|
22
22
|
# The resource that is being identified can be of any kind, but it is typically a dataset.
|
23
|
-
class Resource
|
23
|
+
class Resource # rubocop:disable Metrics/ClassLength
|
24
24
|
include XML::MappingExtensions::Namespaced
|
25
25
|
|
26
26
|
namespace DATACITE_3_NAMESPACE
|
@@ -110,10 +110,14 @@ module Datacite
|
|
110
110
|
@publication_year = value.to_i
|
111
111
|
end
|
112
112
|
|
113
|
-
def
|
113
|
+
def subjects
|
114
114
|
(@subjects ||= []).select(&:value)
|
115
115
|
end
|
116
116
|
|
117
|
+
def subjects=(value)
|
118
|
+
@subjects = (value || []).select(&:value)
|
119
|
+
end
|
120
|
+
|
117
121
|
# @!attribute [rw] identifier
|
118
122
|
# @return [Identifier] a persistent identifier that identifies a resource.
|
119
123
|
object_node :identifier, 'identifier', class: Identifier
|
@@ -2,6 +2,23 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Datacite
|
4
4
|
module Mapping
|
5
|
+
|
6
|
+
describe FunderIdentifier do
|
7
|
+
describe '#new' do
|
8
|
+
it 'requires a non-nil type' do
|
9
|
+
expect do
|
10
|
+
FunderIdentifier.new(type: nil, value: 'http://doi.org/10.13039/501100000780')
|
11
|
+
end.to raise_error(ArgumentError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'requires a non-nil value' do
|
15
|
+
expect do
|
16
|
+
FunderIdentifier.new(type: FunderIdentifierType::CROSSREF_FUNDER_ID, value: nil)
|
17
|
+
end.to raise_error(ArgumentError)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
5
22
|
describe FundingReference do
|
6
23
|
|
7
24
|
describe '#initialize' do
|
@@ -11,6 +11,10 @@ module Datacite
|
|
11
11
|
expect(id.value).to eq(value)
|
12
12
|
end
|
13
13
|
|
14
|
+
it 'requires a non-nil value' do
|
15
|
+
expect { Identifier.new(value: nil) }.to raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
|
14
18
|
it 'sets the type' do
|
15
19
|
id = Identifier.new(value: '10.14749/1407399495')
|
16
20
|
expect(id.identifier_type).to eq('DOI')
|
@@ -4,6 +4,20 @@ module Datacite
|
|
4
4
|
module Mapping
|
5
5
|
module Nonvalidating
|
6
6
|
describe Identifier do
|
7
|
+
|
8
|
+
describe '#new' do
|
9
|
+
it 'accepts a nil value' do
|
10
|
+
id = Identifier.new(value: nil)
|
11
|
+
expect(id.identifier_type).to eq('DOI')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'accepts an invalid value' do
|
15
|
+
id = Identifier.new(value: 'elvis')
|
16
|
+
expect(id.value).to eq('elvis')
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
7
21
|
describe '#load_from_xml' do
|
8
22
|
it 'parses a valid identifier' do
|
9
23
|
xml_text = "<identifier identifierType='DOI'>10.14749/1407399498</identifier>"
|
@@ -587,6 +587,60 @@ module Datacite
|
|
587
587
|
describe 'subjects' do
|
588
588
|
it 'returns the subject list'
|
589
589
|
it 'returns an editable list'
|
590
|
+
|
591
|
+
describe 'nonvalidating mode' do
|
592
|
+
it 'filters out empty subjects' do
|
593
|
+
xml_text = "<resource xsi:schemaLocation='http://datacite.org/schema/kernel-3 http://schema.datacite.org/meta/kernel-3/metadata.xsd' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://datacite.org/schema/kernel-3'>
|
594
|
+
<identifier identifierType='DOI'>10.14749/1407399495</identifier>
|
595
|
+
<creators>
|
596
|
+
<creator>
|
597
|
+
<creatorName>Hedy Lamarr</creatorName>
|
598
|
+
</creator>
|
599
|
+
<creator>
|
600
|
+
<creatorName>Herschlag, Natalie</creatorName>
|
601
|
+
</creator>
|
602
|
+
</creators>
|
603
|
+
<titles>
|
604
|
+
<title>An Account of a Very Odd Monstrous Calf</title>
|
605
|
+
</titles>
|
606
|
+
<publisher>California Digital Library</publisher>
|
607
|
+
<publicationYear>2015</publicationYear>
|
608
|
+
<subjects>
|
609
|
+
<subject subjectScheme='LCSH' schemeURI='http://id.loc.gov/authorities/subjects' xml:lang='en-us'>Mammals--Embryology</subject>
|
610
|
+
<subject/>
|
611
|
+
<subject subjectScheme='dewey' schemeURI='http://dewey.info/' xml:lang='fr'>571.8 Croissance, développement, reproduction biologique (fécondation, sexualité)</subject>
|
612
|
+
<subject subjectScheme='dewey' schemeURI='http://dewey.info/'></subject>
|
613
|
+
</subjects>
|
614
|
+
<language>en</language>
|
615
|
+
</resource>"
|
616
|
+
resource = Resource.parse_xml(xml_text, mapping: :nonvalidating)
|
617
|
+
|
618
|
+
expected = [
|
619
|
+
Subject.new(
|
620
|
+
language: 'en-us',
|
621
|
+
scheme: 'LCSH',
|
622
|
+
scheme_uri: URI('http://id.loc.gov/authorities/subjects'),
|
623
|
+
value: 'Mammals--Embryology'
|
624
|
+
),
|
625
|
+
Subject.new(
|
626
|
+
language: 'fr',
|
627
|
+
scheme: 'dewey',
|
628
|
+
scheme_uri: URI('http://dewey.info/'),
|
629
|
+
value: '571.8 Croissance, développement, reproduction biologique (fécondation, sexualité)'
|
630
|
+
)
|
631
|
+
]
|
632
|
+
|
633
|
+
subjects = resource.subjects
|
634
|
+
expect(subjects.size).to eq(expected.size)
|
635
|
+
expected.each_with_index do |ex, i|
|
636
|
+
expect(subjects[i].language).to eq(ex.language)
|
637
|
+
expect(subjects[i].scheme).to eq(ex.scheme)
|
638
|
+
expect(subjects[i].scheme_uri).to eq(ex.scheme_uri)
|
639
|
+
expect(subjects[i].value).to eq(ex.value)
|
640
|
+
end
|
641
|
+
end
|
642
|
+
end
|
643
|
+
|
590
644
|
end
|
591
645
|
|
592
646
|
describe 'subjects=' do
|
@@ -745,6 +799,7 @@ module Datacite
|
|
745
799
|
.gsub(Regexp.new('<subjects>\p{space}</subjects>', Regexp::MULTILINE), '')
|
746
800
|
.gsub("'", ''')
|
747
801
|
.gsub('"', "'")
|
802
|
+
.gsub("<subject schemeURI='http://www.nlm.nih.gov/mesh/' subjectScheme='MeSH'/>", '')
|
748
803
|
|
749
804
|
begin
|
750
805
|
expect(actual_tidy).to be_xml(expected_tidy)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datacite-mapping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.17.
|
4
|
+
version: 0.1.17.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Moles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typesafe_enum
|