bolognese 1.7.2 → 1.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +10 -7
- data/lib/bolognese/datacite_utils.rb +10 -3
- data/lib/bolognese/metadata.rb +11 -10
- data/lib/bolognese/metadata_utils.rb +1 -1
- data/lib/bolognese/readers/crossref_reader.rb +2 -1
- data/lib/bolognese/utils.rb +2 -0
- data/lib/bolognese/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content_copernicus.yml +94 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Another_dataset.yml +73 -0
- data/spec/metadata_spec.rb +1 -1
- data/spec/readers/crossref_reader_spec.rb +22 -1
- data/spec/readers/datacite_json_reader_spec.rb +1 -1
- data/spec/readers/datacite_reader_spec.rb +3 -1
- data/spec/writers/bibtex_writer_spec.rb +12 -0
- data/spec/writers/citeproc_writer_spec.rb +13 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9eff0ba27c9712dc643e647b3800df6177e13cb1e01c8269b2b172a61616dc9b
|
4
|
+
data.tar.gz: 8ef53004829fede6fdbcd4b5942a8e63950fe3b8bdcff770be69a66c34e6caa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 476ec065a05d4c6fed3f4bee2deccf944723cbdbff07202f9e88ca29a1fb16310424b7e647a5e57c8cbc445adf345ef179e307b7aabaa61379e39ab42e03158d
|
7
|
+
data.tar.gz: 2115e97733f06c4d67fdcf75eb8496758aa85a60b78888c296a6b25d1f7eb98ef5b9f82bff196b9c9e5544de75806c5787715b2aac2ea1848df027ec1d862eb8
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bolognese (1.
|
4
|
+
bolognese (1.8.3)
|
5
5
|
activesupport (>= 4.2.5)
|
6
6
|
benchmark_methods (~> 0.7)
|
7
7
|
bibtex-ruby (>= 5.1.0)
|
@@ -58,8 +58,10 @@ GEM
|
|
58
58
|
csl (~> 1.0)
|
59
59
|
diff-lcs (1.4.4)
|
60
60
|
docile (1.3.2)
|
61
|
-
ebnf (1.
|
61
|
+
ebnf (2.1.1)
|
62
|
+
htmlentities (~> 4.3)
|
62
63
|
rdf (~> 3.1)
|
64
|
+
scanf (~> 1.0)
|
63
65
|
sxp (~> 1.1)
|
64
66
|
edtf (3.0.5)
|
65
67
|
activesupport (>= 3.0, < 7.0)
|
@@ -79,7 +81,7 @@ GEM
|
|
79
81
|
concurrent-ruby (~> 1.0)
|
80
82
|
hashdiff (1.0.1)
|
81
83
|
htmlentities (4.3.4)
|
82
|
-
i18n (1.8.
|
84
|
+
i18n (1.8.5)
|
83
85
|
concurrent-ruby (~> 1.0)
|
84
86
|
iso8601 (0.9.1)
|
85
87
|
json-canonicalization (0.2.0)
|
@@ -119,7 +121,7 @@ GEM
|
|
119
121
|
namae (1.0.1)
|
120
122
|
nokogiri (1.10.10)
|
121
123
|
mini_portile2 (~> 2.4.0)
|
122
|
-
oj (3.10.
|
124
|
+
oj (3.10.8)
|
123
125
|
oj_mimic_json (1.0.1)
|
124
126
|
optimist (3.0.1)
|
125
127
|
postrank-uri (1.0.24)
|
@@ -148,8 +150,8 @@ GEM
|
|
148
150
|
rdf (~> 3.1)
|
149
151
|
rdf-rdfa (~> 3.1)
|
150
152
|
rdf-xsd (~> 3.1)
|
151
|
-
rdf-turtle (3.1.
|
152
|
-
ebnf (~>
|
153
|
+
rdf-turtle (3.1.2)
|
154
|
+
ebnf (~> 2.0)
|
153
155
|
rdf (~> 3.1, >= 3.1.2)
|
154
156
|
rdf-vocab (3.1.7)
|
155
157
|
rdf (~> 3.1, >= 3.1.2)
|
@@ -172,6 +174,7 @@ GEM
|
|
172
174
|
nokogiri (~> 1.6)
|
173
175
|
rspec (~> 3)
|
174
176
|
safe_yaml (1.0.5)
|
177
|
+
scanf (1.0.0)
|
175
178
|
simplecov (0.18.5)
|
176
179
|
docile (~> 1.1)
|
177
180
|
simplecov-html (~> 0.11)
|
@@ -190,7 +193,7 @@ GEM
|
|
190
193
|
addressable (>= 2.3.6)
|
191
194
|
crack (>= 0.3.2)
|
192
195
|
hashdiff (>= 0.4.0, < 2.0.0)
|
193
|
-
zeitwerk (2.
|
196
|
+
zeitwerk (2.4.0)
|
194
197
|
|
195
198
|
PLATFORMS
|
196
199
|
ruby
|
@@ -11,7 +11,13 @@ module Bolognese
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def datacite_errors(xml: nil, schema_version: nil)
|
14
|
-
|
14
|
+
if xml.present?
|
15
|
+
namespaces = Nokogiri::XML(xml, nil, 'UTF-8').root.namespaces
|
16
|
+
schema_version = namespaces.fetch('xmlns',nil).presence || namespaces.fetch('xmlns:ns0',nil).presence
|
17
|
+
else
|
18
|
+
schema_version = schema_version.to_s.start_with?("http://datacite.org/schema/kernel") ? schema_version : "http://datacite.org/schema/kernel-4"
|
19
|
+
end
|
20
|
+
|
15
21
|
kernel = schema_version.to_s.split("/").last
|
16
22
|
filepath = File.expand_path("../../../resources/#{kernel}/metadata.xsd", __FILE__)
|
17
23
|
schema = Nokogiri::XML::Schema(open(filepath))
|
@@ -116,10 +122,11 @@ module Bolognese
|
|
116
122
|
end
|
117
123
|
|
118
124
|
def insert_alternate_identifiers(xml)
|
119
|
-
|
125
|
+
alternate_identifiers = Array.wrap(identifiers).select { |r| r["identifierType"] != "DOI" }
|
126
|
+
return xml unless alternate_identifiers.present?
|
120
127
|
|
121
128
|
xml.alternateIdentifiers do
|
122
|
-
Array.wrap(
|
129
|
+
Array.wrap(alternate_identifiers).each do |alternate_identifier|
|
123
130
|
xml.alternateIdentifier(alternate_identifier["identifier"], 'alternateIdentifierType' => alternate_identifier["identifierType"])
|
124
131
|
end
|
125
132
|
end
|
data/lib/bolognese/metadata.rb
CHANGED
@@ -15,12 +15,13 @@ module Bolognese
|
|
15
15
|
:format, :funding_references, :state, :geo_locations,
|
16
16
|
:types, :content_url, :related_identifiers, :style, :locale, :date_registered
|
17
17
|
|
18
|
-
def initialize(
|
19
|
-
|
18
|
+
def initialize(options={})
|
19
|
+
options.symbolize_keys!
|
20
|
+
id = normalize_id(options[:input], options)
|
20
21
|
ra = nil
|
21
22
|
|
22
23
|
if id.present?
|
23
|
-
@from = from || find_from_format(id: id)
|
24
|
+
@from = options[:from] || find_from_format(id: id)
|
24
25
|
|
25
26
|
# mEDRA, KISTI, JaLC and OP DOIs are found in the Crossref index
|
26
27
|
if @from == "medra"
|
@@ -37,9 +38,9 @@ module Bolognese
|
|
37
38
|
hsh = @from.present? ? send("get_" + @from, id: id, sandbox: options[:sandbox]) : {}
|
38
39
|
string = hsh.fetch("string", nil)
|
39
40
|
|
40
|
-
elsif input.present? && File.exist?(input)
|
41
|
-
filename = File.basename(input)
|
42
|
-
ext = File.extname(input)
|
41
|
+
elsif options[:input].present? && File.exist?(options[:input])
|
42
|
+
filename = File.basename(options[:input])
|
43
|
+
ext = File.extname(options[:input])
|
43
44
|
if %w(.bib .ris .xml .json).include?(ext)
|
44
45
|
hsh = {
|
45
46
|
"url" => options[:url],
|
@@ -49,8 +50,8 @@ module Bolognese
|
|
49
50
|
"provider_id" => options[:provider_id],
|
50
51
|
"client_id" => options[:client_id],
|
51
52
|
"content_url" => options[:content_url] }
|
52
|
-
string = IO.read(input)
|
53
|
-
@from = from || find_from_format(string: string, filename: filename, ext: ext)
|
53
|
+
string = IO.read(options[:input])
|
54
|
+
@from = options[:from] || find_from_format(string: string, filename: filename, ext: ext)
|
54
55
|
else
|
55
56
|
$stderr.puts "File type #{ext} not supported"
|
56
57
|
exit 1
|
@@ -69,8 +70,8 @@ module Bolognese
|
|
69
70
|
"titles" => options[:titles],
|
70
71
|
"publisher" => options[:publisher],
|
71
72
|
"publication_year" => options[:publication_year] }
|
72
|
-
string = input
|
73
|
-
@from = from || find_from_format(string: string)
|
73
|
+
string = options[:input]
|
74
|
+
@from = options[:from] || find_from_format(string: string)
|
74
75
|
end
|
75
76
|
|
76
77
|
# make sure input is encoded as utf8
|
@@ -153,7 +153,7 @@ module Bolognese
|
|
153
153
|
"language" => language,
|
154
154
|
"author" => author,
|
155
155
|
"contributor" => to_citeproc(contributors),
|
156
|
-
"issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : get_date_parts(publication_year),
|
156
|
+
"issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : get_date_parts(publication_year.to_s),
|
157
157
|
"submitted" => Array.wrap(dates).find { |d| d["dateType"] == "Submitted" }.to_h.fetch("__content__", nil),
|
158
158
|
"abstract" => parse_attributes(descriptions, content: "description", first: true),
|
159
159
|
"container-title" => container_title,
|
@@ -41,6 +41,7 @@ module Bolognese
|
|
41
41
|
journal_issue = {}
|
42
42
|
journal_metadata = nil
|
43
43
|
publisher = query.dig("crm_item", 0)
|
44
|
+
publisher = nil unless publisher.is_a?(String)
|
44
45
|
|
45
46
|
case model
|
46
47
|
when "book"
|
@@ -69,7 +70,7 @@ module Bolognese
|
|
69
70
|
end
|
70
71
|
when "posted_content"
|
71
72
|
bibliographic_metadata = meta.dig("crossref", "posted_content").to_h
|
72
|
-
publisher
|
73
|
+
publisher ||= bibliographic_metadata.dig("institution", "institution_name")
|
73
74
|
when "sa_component"
|
74
75
|
bibliographic_metadata = meta.dig("crossref", "sa_component", "component_list", "component").to_h
|
75
76
|
related_identifier = Array.wrap(query.to_h["crm_item"]).find { |cr| cr["name"] == "relation" }
|
data/lib/bolognese/utils.rb
CHANGED
data/lib/bolognese/version.rb
CHANGED
@@ -0,0 +1,94 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://doi.org/ra/10.5194
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.7.1; mailto:info@datacite.org)
|
12
|
+
Accept:
|
13
|
+
- text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: ''
|
18
|
+
headers:
|
19
|
+
Date:
|
20
|
+
- Wed, 29 Jul 2020 06:09:32 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json;charset=UTF-8
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Set-Cookie:
|
26
|
+
- __cfduid=d405b79b8c70ba4b495e3fcba1355b80c1596002972; expires=Fri, 28-Aug-20
|
27
|
+
06:09:32 GMT; path=/; domain=.doi.org; HttpOnly; SameSite=Lax; Secure
|
28
|
+
Cf-Cache-Status:
|
29
|
+
- DYNAMIC
|
30
|
+
Cf-Request-Id:
|
31
|
+
- 043ac9cad6000005bbc5b4f200000001
|
32
|
+
Expect-Ct:
|
33
|
+
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
|
34
|
+
Strict-Transport-Security:
|
35
|
+
- max-age=31536000; includeSubDomains; preload
|
36
|
+
Server:
|
37
|
+
- cloudflare
|
38
|
+
Cf-Ray:
|
39
|
+
- 5ba4abf15d0705bb-FRA
|
40
|
+
body:
|
41
|
+
encoding: ASCII-8BIT
|
42
|
+
string: |-
|
43
|
+
[
|
44
|
+
{
|
45
|
+
"DOI": "10.5194",
|
46
|
+
"RA": "Crossref"
|
47
|
+
}
|
48
|
+
]
|
49
|
+
http_version:
|
50
|
+
recorded_at: Wed, 29 Jul 2020 06:09:32 GMT
|
51
|
+
- request:
|
52
|
+
method: get
|
53
|
+
uri: https://api.crossref.org/works/10.5194/cp-2020-95/transform/application/vnd.crossref.unixsd+xml
|
54
|
+
body:
|
55
|
+
encoding: US-ASCII
|
56
|
+
string: ''
|
57
|
+
headers:
|
58
|
+
User-Agent:
|
59
|
+
- Mozilla/5.0 (compatible; Maremma/4.7.1; mailto:info@datacite.org)
|
60
|
+
Accept:
|
61
|
+
- text/xml
|
62
|
+
response:
|
63
|
+
status:
|
64
|
+
code: 200
|
65
|
+
message: OK
|
66
|
+
headers:
|
67
|
+
Link:
|
68
|
+
- <http://dx.doi.org/10.5194/cp-2020-95>; rel="canonical", <https://creativecommons.org/licenses/by/4.0/>;
|
69
|
+
rel="license", <http://orcid.org/0000-0001-6130-6474>; title="Jun Shao"; rel="author",
|
70
|
+
<http://orcid.org/0000-0002-5068-1591>; title="Laurie Menviel"; rel="author",
|
71
|
+
<http://orcid.org/0000-0003-3306-0969>; title="Mayhar Mohtadi"; rel="author"
|
72
|
+
Access-Control-Allow-Origin:
|
73
|
+
- "*"
|
74
|
+
Access-Control-Allow-Headers:
|
75
|
+
- X-Requested-With
|
76
|
+
Content-Length:
|
77
|
+
- '7366'
|
78
|
+
Server:
|
79
|
+
- http-kit
|
80
|
+
Date:
|
81
|
+
- Wed, 29 Jul 2020 06:09:33 GMT
|
82
|
+
X-Rate-Limit-Limit:
|
83
|
+
- '50'
|
84
|
+
X-Rate-Limit-Interval:
|
85
|
+
- 1s
|
86
|
+
Connection:
|
87
|
+
- close
|
88
|
+
body:
|
89
|
+
encoding: ASCII-8BIT
|
90
|
+
string: !binary |-
|
91
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGNyb3NzcmVmX3Jlc3VsdCB4bWxucz0iaHR0cDovL3d3dy5jcm9zc3JlZi5vcmcvcXJzY2hlbWEvMy4wIiB2ZXJzaW9uPSIzLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5jcm9zc3JlZi5vcmcvcXJzY2hlbWEvMy4wIGh0dHA6Ly93d3cuY3Jvc3NyZWYub3JnL3NjaGVtYXMvY3Jvc3NyZWZfcXVlcnlfb3V0cHV0My4wLnhzZCI+DQogIDxxdWVyeV9yZXN1bHQ+DQogICAgPGhlYWQ+DQogICAgICA8ZG9pX2JhdGNoX2lkPm5vbmU8L2RvaV9iYXRjaF9pZD4NCiAgICA8L2hlYWQ+DQogICAgPGJvZHk+DQogICAgICA8cXVlcnkgc3RhdHVzPSJyZXNvbHZlZCI+DQogICAgICAgIDxkb2kgdHlwZT0icG9zdGVkX2NvbnRlbnQiPjEwLjUxOTQvY3AtMjAyMC05NTwvZG9pPg0KICAgICAgICA8Y3JtLWl0ZW0gbmFtZT0icHVibGlzaGVyLW5hbWUiIHR5cGU9InN0cmluZyI+Q29wZXJuaWN1cyBHbWJIPC9jcm0taXRlbT4NCiAgICAgICAgPGNybS1pdGVtIG5hbWU9InByZWZpeC1uYW1lIiB0eXBlPSJzdHJpbmciPkNvcGVybmljdXMgR21iSDwvY3JtLWl0ZW0+DQogICAgICAgIDxjcm0taXRlbSBuYW1lPSJtZW1iZXItaWQiIHR5cGU9Im51bWJlciI+MzE0NTwvY3JtLWl0ZW0+DQogICAgICAgIDxjcm0taXRlbSBuYW1lPSJjaXRhdGlvbi1pZCIgdHlwZT0ibnVtYmVyIj4xMTgzMTgxNTE8L2NybS1pdGVtPg0KICAgICAgICA8Y3JtLWl0ZW0gbmFtZT0iYm9vay1pZCIgdHlwZT0ibnVtYmVyIj4zNDMwMzQyPC9jcm0taXRlbT4NCiAgICAgICAgPGNybS1pdGVtIG5hbWU9ImRlcG9zaXQtdGltZXN0YW1wIiB0eXBlPSJudW1iZXIiPjIwMjAwNzI4MDczNjMxPC9jcm0taXRlbT4NCiAgICAgICAgPGNybS1pdGVtIG5hbWU9Im93bmVyLXByZWZpeCIgdHlwZT0ic3RyaW5nIj4xMC41MTk0PC9jcm0taXRlbT4NCiAgICAgICAgPGNybS1pdGVtIG5hbWU9Imxhc3QtdXBkYXRlIiB0eXBlPSJkYXRlIj4yMDIwLTA3LTI4VDA5OjE2OjExWjwvY3JtLWl0ZW0+DQogICAgICAgIDxjcm0taXRlbSBuYW1lPSJjcmVhdGVkIiB0eXBlPSJkYXRlIj4yMDIwLTA3LTI4VDA5OjE2OjEwWjwvY3JtLWl0ZW0+DQogICAgICAgIDxjcm0taXRlbSBuYW1lPSJjaXRlZGJ5LWNvdW50IiB0eXBlPSJudW1iZXIiPjA8L2NybS1pdGVtPg0KICAgICAgICA8Y3JtLWl0ZW0gbmFtZT0icmVsYXRpb24iIHR5cGU9ImRvaSIgY2xhaW09ImlzU3VwcGxlbWVudFRvIj4xMC41MTk0L2NwLTIwMjAtOTUtc3VwcGxlbWVudDwvY3JtLWl0ZW0+DQogICAgICAgIDxkb2lfcmVjb3JkPg0KICAgICAgICAgIDxjcm9zc3JlZiB4bWxucz0iaHR0cDovL3d3dy5jcm9zc3JlZi5vcmcveHNjaGVtYS8xLjEiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5jcm9zc3JlZi5vcmcveHNjaGVtYS8xLjEgaHR0cDovL2RvaS5jcm9zc3JlZi5vcmcvc2NoZW1hcy91bml4cmVmMS4xLnhzZCI+DQogICAgICAgICAgICA8cG9zdGVkX2NvbnRlbnQgdHlwZT0icHJlcHJpbnQiPg0KICAgICAgICAgICAgICA8Z3JvdXBfdGl0bGU+Q2FyYm9uIEN5Y2xlL01vZGVsbGluZyBvbmx5L01pbGxlbmlhbC9ELU88L2dyb3VwX3RpdGxlPg0KICAgICAgICAgICAgICA8Y29udHJpYnV0b3JzPg0KICAgICAgICAgICAgICAgIDxwZXJzb25fbmFtZSBzZXF1ZW5jZT0iZmlyc3QiIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciI+DQogICAgICAgICAgICAgICAgICA8Z2l2ZW5fbmFtZT5KdW48L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgICAgICA8c3VybmFtZT5TaGFvPC9zdXJuYW1lPg0KICAgICAgICAgICAgICAgICAgPE9SQ0lEPmh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMS02MTMwLTY0NzQ8L09SQ0lEPg0KICAgICAgICAgICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgICAgICAgPHBlcnNvbl9uYW1lIHNlcXVlbmNlPSJhZGRpdGlvbmFsIiBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiPg0KICAgICAgICAgICAgICAgICAgPGdpdmVuX25hbWU+TG93ZWxsIEQ8L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgICAgICA8c3VybmFtZT5TdG90dDwvc3VybmFtZT4NCiAgICAgICAgICAgICAgICA8L3BlcnNvbl9uYW1lPg0KICAgICAgICAgICAgICAgIDxwZXJzb25fbmFtZSBzZXF1ZW5jZT0iYWRkaXRpb25hbCIgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIj4NCiAgICAgICAgICAgICAgICAgIDxnaXZlbl9uYW1lPkxhdXJpZTwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgICAgICAgIDxzdXJuYW1lPk1lbnZpZWw8L3N1cm5hbWU+DQogICAgICAgICAgICAgICAgICA8T1JDSUQ+aHR0cHM6Ly9vcmNpZC5vcmcvMDAwMC0wMDAyLTUwNjgtMTU5MTwvT1JDSUQ+DQogICAgICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICAgICAgICA8cGVyc29uX25hbWUgc2VxdWVuY2U9ImFkZGl0aW9uYWwiIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciI+DQogICAgICAgICAgICAgICAgICA8Z2l2ZW5fbmFtZT5BbmR5PC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgICAgICAgPHN1cm5hbWU+UmlkZ3dlbGw8L3N1cm5hbWU+DQogICAgICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICAgICAgICA8cGVyc29uX25hbWUgc2VxdWVuY2U9ImFkZGl0aW9uYWwiIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciI+DQogICAgICAgICAgICAgICAgICA8Z2l2ZW5fbmFtZT5NYWxpbjwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgICAgICAgIDxzdXJuYW1lPsOWZGFsZW48L3N1cm5hbWU+DQogICAgICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICAgICAgICA8cGVyc29uX25hbWUgc2VxdWVuY2U9ImFkZGl0aW9uYWwiIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciI+DQogICAgICAgICAgICAgICAgICA8Z2l2ZW5fbmFtZT5NYXloYXI8L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgICAgICA8c3VybmFtZT5Nb2h0YWRpPC9zdXJuYW1lPg0KICAgICAgICAgICAgICAgICAgPE9SQ0lEPmh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0zMzA2LTA5Njk8L09SQ0lEPg0KICAgICAgICAgICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgICAgIDwvY29udHJpYnV0b3JzPg0KICAgICAgICAgICAgICA8dGl0bGVzPg0KICAgICAgICAgICAgICAgIDx0aXRsZT5UaGUgQXRtb3NwaGVyaWMgQnJpZGdlIENvbW11bmljYXRlZCB0aGUgzrQmYW1wO2x0O3N1cCZhbXA7Z3Q7MTMmYW1wO2x0Oy9zdXAmYW1wO2d0O0MgRGVjbGluZWR1cmluZyB0aGUgTGFzdCBEZWdsYWNpYXRpb24gdG8gdGhlIEdsb2JhbCBVcHBlciBPY2VhbjwvdGl0bGU+DQogICAgICAgICAgICAgIDwvdGl0bGVzPg0KICAgICAgICAgICAgICA8cG9zdGVkX2RhdGU+DQogICAgICAgICAgICAgICAgPG1vbnRoPjc8L21vbnRoPg0KICAgICAgICAgICAgICAgIDxkYXk+Mjg8L2RheT4NCiAgICAgICAgICAgICAgICA8eWVhcj4yMDIwPC95ZWFyPg0KICAgICAgICAgICAgICA8L3Bvc3RlZF9kYXRlPg0KICAgICAgICAgICAgICA8amF0czphYnN0cmFjdCB4bWxuczpqYXRzPSJodHRwOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvSkFUUzEiPg0KICAgICAgICAgICAgICAgIDxqYXRzOnA+PCFbQ0RBVEFbQWJzdHJhY3QuIER1cmluZyB0aGUgZWFybHkgbGFzdCBnbGFjaWFsIHRlcm1pbmF0aW9uICgxNy4y4oCTMTXigIlrYSkgYXRtb3NwaGVyaWMgzrQxM0MgZGVjbGluZWQgc2hhcnBseSBieSAwLjPigJMwLjTigInigLAgYXMgYXRtb3NwaGVyaWMgcENPMiByb3NlLiBUaGlzIHdhcyB0aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBhdG1vc3BoZXJpYyDOtDEzQyBleGN1cnNpb24gdGhhdCBsYXN0ZWQgZm9yIG11bHRpcGxlIHRob3VzYW5kIHllYXJzLiBBIHNpbWlsYXIgzrQxM0MgZGVjbGluZSBoYXMgYmVlbiBkb2N1bWVudGVkIGluIG1hcmluZSBwcm94eSByZWNvcmRzIGZyb20gYm90aCBzdXJmYWNlIGFuZCB0aGVybW9jbGluZS1kd2VsbGluZyBwbGFua3RpYyBmb3JhbWluaWZlcmEuIFRoZSBmb3JhbWluaWZlcmFsIM60MTNDIGRlY2xpbmUgaGFzIHByZXZpb3VzbHkgYmVlbiBhdHRyaWJ1dGVkIHRvIGEgZmx1eCBvZiByZXNwaXJlZCBjYXJib24gZnJvbSB0aGUgZGVlcCBvY2VhbiB0aGF0IHdhcyBzdWJzZXF1ZW50bHkgdHJhbnNwb3J0ZWQgd2l0aGluIHRoZSB1cHBlciBvY2VhbiAoaS5lLiBib3R0b20gdXAgdHJhbnNwb3J0KSB0byBzaXRlcyB3aGVyZSB0aGUgc2lnbmFsIGlzIHJlY29yZGVkLiBIZXJlLCB3ZSBwcm92aWRlIG1vZGVsaW5nIGV2aWRlbmNlIHRoYXQgd2hlbiByZXNwaXJlZCBjYXJib24gdXB3ZWxscyBpbiB0aGUgU291dGhlcm4gT2NlYW4sIG5lZ2F0aXZlIM60MTNDIGFub21hbGllcyBpbiB0aGUgZ2xvYmFsIHVwcGVyIG9jZWFuIHdlcmUgaW5zdGVhZCB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBhdG1vc3BoZXJlIChpLmUuIHRvcCBkb3duIHRyYW5zcG9ydCkuIER1ZSB0byB0aGlzIGVmZmljaWVudCBhdG1vc3BoZXJpYyBicmlkZ2UsIHRoZSBwYXRod2F5IG9mIM60MTNDIHRyYW5zcG9ydCB3YXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBmcm9tIG51dHJpZW50IHRyYW5zcG9ydCBkdXJpbmcgdGhlIGVhcmx5IGRlZ2xhY2lhdGlvbi4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHVzYWdlIG9mIHBsYW5rdGljIM60MTNDIHJlY29yZHMgZm9yIGlkZW50aWZ5aW5nIHRoZSBjYXJib24gc291cmNlKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgYXRtb3NwaGVyaWMgcENPMiByaXNlIGR1cmluZyB0aGUgZWFybHkgZGVnbGFjaWF0aW9uIGlzIGxpbWl0ZWQuIFRoZSBtb2RlbCByZXN1bHRzIGFsc28gc3VnZ2VzdCB0aGF0IHRoZXJtb2NsaW5lIHdhdGVycyBpbiB1cHdlbGxpbmcgc3lzdGVtcyBsaWtlIHRoZSBlYXN0ZXJuIGVxdWF0b3JpYWwgUGFjaWZpYywgYW5kIGV2ZW4gdXBwZXIgZGVlcCB3YXRlcnMgYWJvdmUgMjAwMOKAiW0sIGNhbiBiZSBhZmZlY3RlZCBieSB0aGlzIGF0bW9zcGhlcmljIGJyaWRnZSBkdXJpbmcgdGhlIGVhcmx5IGRlZ2xhY2lhdGlvbi4gT3VyIHJlc3VsdHMgaW1wbHkgdGhhdCBjYXV0aW9uIG11c3QgYmUgYXBwbGllZCB3aGVuIGludGVycHJldGluZyBlYXJseSBkZWdsYWNpYWwgbWFyaW5lIM60MTNDIHJlY29yZHMgZnJvbSBkZXB0aHMgdGhhdCBhcmUgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIGF0bW9zcGhlcmUuXV0+PC9qYXRzOnA+DQogICAgICAgICAgICAgIDwvamF0czphYnN0cmFjdD4NCiAgICAgICAgICAgICAgPGZyOnByb2dyYW0geG1sbnM6ZnI9Imh0dHA6Ly93d3cuY3Jvc3NyZWYub3JnL2Z1bmRyZWYueHNkIiBuYW1lPSJmdW5kcmVmIj4NCiAgICAgICAgICAgICAgICA8ZnI6YXNzZXJ0aW9uIG5hbWU9ImZ1bmRncm91cCI+DQogICAgICAgICAgICAgICAgICA8ZnI6YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9uYW1lIj4NCiAgICAgICAgICAgICAgICAgICAgRGl2aXNpb24gb2YgT2NlYW4gU2NpZW5jZXMNCiAgICAgICAgICAgICAgICAgICAgPGZyOmFzc2VydGlvbiBuYW1lPSJmdW5kZXJfaWRlbnRpZmllciI+aHR0cDovL2R4LmRvaS5vcmcvMTAuMTMwMzkvMTAwMDAwMTQxPC9mcjphc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8L2ZyOmFzc2VydGlvbj4NCiAgICAgICAgICAgICAgICAgIDxmcjphc3NlcnRpb24gbmFtZT0iYXdhcmRfbnVtYmVyIj4xNTU4OTkwPC9mcjphc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8ZnI6YXNzZXJ0aW9uIG5hbWU9ImF3YXJkX251bWJlciI+MTczNjc3MTwvZnI6YXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDwvZnI6YXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDxmcjphc3NlcnRpb24gbmFtZT0iZnVuZGdyb3VwIj4NCiAgICAgICAgICAgICAgICAgIDxmcjphc3NlcnRpb24gbmFtZT0iZnVuZGVyX25hbWUiPg0KICAgICAgICAgICAgICAgICAgICBBdXN0cmFsaWFuIFJlc2VhcmNoIENvdW5jaWwNCiAgICAgICAgICAgICAgICAgICAgPGZyOmFzc2VydGlvbiBuYW1lPSJmdW5kZXJfaWRlbnRpZmllciI+aHR0cDovL2R4LmRvaS5vcmcvMTAuMTMwMzkvNTAxMTAwMDAwOTIzPC9mcjphc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8L2ZyOmFzc2VydGlvbj4NCiAgICAgICAgICAgICAgICAgIDxmcjphc3NlcnRpb24gbmFtZT0iYXdhcmRfbnVtYmVyIj5GVDE4MDEwMDYwNjwvZnI6YXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPGZyOmFzc2VydGlvbiBuYW1lPSJhd2FyZF9udW1iZXIiPkRQMTgwMTAwMDQ4PC9mcjphc3NlcnRpb24+DQogICAgICAgICAgICAgICAgPC9mcjphc3NlcnRpb24+DQogICAgICAgICAgICAgIDwvZnI6cHJvZ3JhbT4NCiAgICAgICAgICAgICAgPGFpOnByb2dyYW0geG1sbnM6YWk9Imh0dHA6Ly93d3cuY3Jvc3NyZWYub3JnL0FjY2Vzc0luZGljYXRvcnMueHNkIiBuYW1lPSJBY2Nlc3NJbmRpY2F0b3JzIj4NCiAgICAgICAgICAgICAgICA8YWk6bGljZW5zZV9yZWY+aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC88L2FpOmxpY2Vuc2VfcmVmPg0KICAgICAgICAgICAgICA8L2FpOnByb2dyYW0+DQogICAgICAgICAgICAgIDxyZWw6cHJvZ3JhbSB4bWxuczpyZWw9Imh0dHA6Ly93d3cuY3Jvc3NyZWYub3JnL3JlbGF0aW9ucy54c2QiIG5hbWU9InJlbGF0aW9ucyI+DQogICAgICAgICAgICAgICAgPHJlbDpyZWxhdGVkX2l0ZW0+DQogICAgICAgICAgICAgICAgICA8cmVsOmRlc2NyaXB0aW9uPlN1cHBsZW1lbnRhcnkgbWF0ZXJpYWw8L3JlbDpkZXNjcmlwdGlvbj4NCiAgICAgICAgICAgICAgICAgIDxyZWw6aW50ZXJfd29ya19yZWxhdGlvbiBpZGVudGlmaWVyLXR5cGU9ImRvaSIgcmVsYXRpb25zaGlwLXR5cGU9ImlzU3VwcGxlbWVudGVkQnkiPjEwLjUxOTQvY3AtMjAyMC05NS1zdXBwbGVtZW50PC9yZWw6aW50ZXJfd29ya19yZWxhdGlvbj4NCiAgICAgICAgICAgICAgICA8L3JlbDpyZWxhdGVkX2l0ZW0+DQogICAgICAgICAgICAgIDwvcmVsOnByb2dyYW0+DQogICAgICAgICAgICAgIDxkb2lfZGF0YT4NCiAgICAgICAgICAgICAgICA8ZG9pPjEwLjUxOTQvY3AtMjAyMC05NTwvZG9pPg0KICAgICAgICAgICAgICAgIDxyZXNvdXJjZT5odHRwczovL2NwLmNvcGVybmljdXMub3JnL3ByZXByaW50cy9jcC0yMDIwLTk1LzwvcmVzb3VyY2U+DQogICAgICAgICAgICAgIDwvZG9pX2RhdGE+DQogICAgICAgICAgICA8L3Bvc3RlZF9jb250ZW50Pg0KICAgICAgICAgIDwvY3Jvc3NyZWY+DQogICAgICAgIDwvZG9pX3JlY29yZD4NCiAgICAgIDwvcXVlcnk+DQogICAgPC9ib2R5Pg0KICA8L3F1ZXJ5X3Jlc3VsdD4NCjwvY3Jvc3NyZWZfcmVzdWx0Pg==
|
92
|
+
http_version:
|
93
|
+
recorded_at: Wed, 29 Jul 2020 06:09:33 GMT
|
94
|
+
recorded_with: VCR 3.0.3
|
data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Another_dataset.yml
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.datacite.org/dois/10.26301/qdpd-2250?include=media,client
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.7.1; mailto:info@datacite.org)
|
12
|
+
Accept:
|
13
|
+
- text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
Date:
|
20
|
+
- Fri, 24 Jul 2020 09:45:26 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Status:
|
26
|
+
- 200 OK
|
27
|
+
X-Anonymous-Consumer:
|
28
|
+
- 'true'
|
29
|
+
Cache-Control:
|
30
|
+
- max-age=0, private, must-revalidate
|
31
|
+
Vary:
|
32
|
+
- Accept-Encoding, Origin
|
33
|
+
X-Request-Id:
|
34
|
+
- 9e991a49-1b31-467e-8398-17c65f21adff
|
35
|
+
Etag:
|
36
|
+
- W/"f61889405ef061735e59275bdbe3242a"
|
37
|
+
X-Runtime:
|
38
|
+
- '1.280903'
|
39
|
+
X-Powered-By:
|
40
|
+
- Phusion Passenger 6.0.6
|
41
|
+
Server:
|
42
|
+
- nginx/1.14.0 + Phusion Passenger 6.0.6
|
43
|
+
body:
|
44
|
+
encoding: ASCII-8BIT
|
45
|
+
string: '{"data":{"id":"10.26301/qdpd-2250","type":"dois","attributes":{"doi":"10.26301/qdpd-2250","prefix":"10.26301","suffix":"qdpd-2250","identifiers":[],"alternateIdentifiers":[],"creators":[{"name":"USS
|
46
|
+
Pampanito","nameType":"Organizational","givenName":null,"familyName":null,"affiliation":[],"nameIdentifiers":[]}],"titles":[{"lang":null,"title":"USS
|
47
|
+
Pampanito Submarine","titleType":null}],"publisher":"Open Heritage 3D","container":{},"publicationYear":2020,"subjects":[],"contributors":[],"dates":[],"language":null,"types":{"ris":"DATA","bibtex":"misc","citeproc":"dataset","schemaOrg":"Dataset","resourceType":"3D
|
48
|
+
Data","resourceTypeGeneral":"Dataset"},"relatedIdentifiers":[],"sizes":[],"formats":[],"version":null,"rightsList":[],"descriptions":[],"geoLocations":[],"fundingReferences":[],"xml":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJlc291cmNlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00L21ldGFkYXRhLnhzZCI+CiAgPGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuMjYzMDEvUURQRC0yMjUwPC9pZGVudGlmaWVyPgogIDxjcmVhdG9ycz4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWUgbmFtZVR5cGU9Ik9yZ2FuaXphdGlvbmFsIj5VU1MgUGFtcGFuaXRvPC9jcmVhdG9yTmFtZT4KICAgIDwvY3JlYXRvcj4KICA8L2NyZWF0b3JzPgogIDx0aXRsZXM+CiAgICA8dGl0bGU+VVNTIFBhbXBhbml0byBTdWJtYXJpbmU8L3RpdGxlPgogIDwvdGl0bGVzPgogIDxwdWJsaXNoZXI+T3BlbiBIZXJpdGFnZSAzRDwvcHVibGlzaGVyPgogIDxwdWJsaWNhdGlvblllYXI+MjAyMDwvcHVibGljYXRpb25ZZWFyPgogIDxyZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlR2VuZXJhbD0iRGF0YXNldCI+M0QgRGF0YTwvcmVzb3VyY2VUeXBlPgogIDxzaXplcy8+CiAgPGZvcm1hdHMvPgogIDx2ZXJzaW9uLz4KPC9yZXNvdXJjZT4K","url":"https://openheritage3d.org/project.php?id=qdpd-2250","contentUrl":null,"metadataVersion":1,"schemaVersion":"http://datacite.org/schema/kernel-4","source":"fabricaForm","isActive":true,"state":"findable","reason":null,"viewCount":0,"viewsOverTime":[],"downloadCount":0,"downloadsOverTime":[],"referenceCount":0,"citationCount":0,"citationsOverTime":[],"partCount":0,"partOfCount":0,"versionCount":0,"versionOfCount":0,"created":"2020-01-10T18:51:00.000Z","registered":"2020-01-16T00:17:10.000Z","published":"2020","updated":"2020-07-24T09:41:35.000Z"},"relationships":{"client":{"data":{"id":"cyark.oh","type":"clients"}},"media":{"data":{"id":"10.26301/qdpd-2250","type":"media"}},"references":{"data":[]},"citations":{"data":[]},"parts":{"data":[]},"partOf":{"data":[]},"versions":{"data":[]},"versionOf":{"data":[]}}},"included":[{"id":"cyark.oh","type":"clients","attributes":{"name":"OpenHeritage3D","symbol":"CYARK.OH","year":2019,"contactEmail":"scott.lee@cyark.org","alternateName":"Open
|
49
|
+
Heritage 3D","description":"As 3D and reality capture strategies for heritage
|
50
|
+
documentation become more widespread and available, there has emerged a growing
|
51
|
+
need to assist with guiding and facilitating accessibility to data, while
|
52
|
+
maintaining scientific rigor, cultural and ethical sensitivity, discoverability,
|
53
|
+
and archival standards. In response to these areas of need, The Open Heritage
|
54
|
+
3D Alliance (OHA) has developed as an advisory group governing the Open Heritage
|
55
|
+
3D initiative. This collaborative advisory group are among some of the earliest
|
56
|
+
adopters of 3D heritage documentation technologies, and offer first-hand guidance
|
57
|
+
for best practices in data management, sharing, and dissemination approaches
|
58
|
+
for 3D cultural heritage projects.\n\nThe founding members of the OHA, consist
|
59
|
+
of experts and organizational leaders from CyArk, Historic Environment Scotland,
|
60
|
+
and the University of South Florida Libraries, who together have significant
|
61
|
+
repositories of legacy and on-going 3D research and documentation projects.
|
62
|
+
These groups offer unique insight into not only the best practices for 3D
|
63
|
+
data capture and sharing, but also have come together around concerns dealing
|
64
|
+
with standards, formats, approach, ethics, and archive commitment. Together,
|
65
|
+
the OHA has begun the journey to provide open access to cultural heritage
|
66
|
+
3D data, while maintaining integrity, security, and standards relating to
|
67
|
+
discoverable dissemination. Together, the OHA will work to provide democratized
|
68
|
+
access to primary heritage 3D data submitted from donors and organizations,
|
69
|
+
and will help to facilitate an operation platform, archive, and organization
|
70
|
+
of resources into the future","language":["en"],"clientType":"repository","domains":"*","re3data":null,"opendoar":null,"issn":{},"url":"https://openheritage3d.org/","created":"2019-03-26T16:21:19.000Z","updated":"2020-04-27T15:30:01.000Z","isActive":true,"hasPassword":true},"relationships":{"provider":{"data":{"id":"cyark","type":"providers"}},"prefixes":{"data":[{"id":"10.26301","type":"prefixes"}]}}}]}'
|
71
|
+
http_version:
|
72
|
+
recorded_at: Fri, 24 Jul 2020 09:45:26 GMT
|
73
|
+
recorded_with: VCR 3.0.3
|
data/spec/metadata_spec.rb
CHANGED
@@ -153,7 +153,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
153
153
|
it "missing_comma" do
|
154
154
|
json = IO.read(fixture_path + "datacite_software_missing_comma.json")
|
155
155
|
response = subject.jsonlint(json)
|
156
|
-
expect(response).to eq(["expected comma, not a string (doi) at line 4, column 11 [parse.c:373]"])
|
156
|
+
expect(response).to eq(["expected comma, not a string (after doi) at line 4, column 11 [parse.c:373]"])
|
157
157
|
end
|
158
158
|
|
159
159
|
it "overlapping_keys" do
|
@@ -175,7 +175,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
175
175
|
expect(subject.descriptions.first["description"]).to start_with("This article presents a practical roadmap")
|
176
176
|
expect(subject.dates).to include({"date"=>"2017-10-09", "dateType"=>"Issued"})
|
177
177
|
expect(subject.publication_year).to eq("2017")
|
178
|
-
expect(subject.publisher).to eq("
|
178
|
+
expect(subject.publisher).to eq("Cold Spring Harbor Laboratory")
|
179
179
|
expect(subject.agency).to eq("Crossref")
|
180
180
|
end
|
181
181
|
|
@@ -602,6 +602,27 @@ describe Bolognese::Metadata, vcr: true do
|
|
602
602
|
expect(subject.date_registered).to eq("2019-11-02T09:30:06Z")
|
603
603
|
end
|
604
604
|
|
605
|
+
it "posted content copernicus" do
|
606
|
+
input = "https://doi.org/10.5194/CP-2020-95"
|
607
|
+
subject = Bolognese::Metadata.new(input: input)
|
608
|
+
expect(subject.valid?).to be true
|
609
|
+
expect(subject.url).to eq("https://cp.copernicus.org/preprints/cp-2020-95/")
|
610
|
+
expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"PostedContent", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
|
611
|
+
expect(subject.creators.count).to eq(6)
|
612
|
+
expect(subject.creators.first).to eq("nameType" => "Personal", "familyName" => "Shao",
|
613
|
+
"givenName" => "Jun",
|
614
|
+
"name" => "Shao, Jun",
|
615
|
+
"nameIdentifiers" => [{"nameIdentifier"=>"https://orcid.org/0000-0001-6130-6474", "nameIdentifierScheme"=>"ORCID", "schemeUri"=>"https://orcid.org"}])
|
616
|
+
expect(subject.titles).to eq([{"title"=>"The Atmospheric Bridge Communicated the δ<sup>13</sup>C Declineduring the Last Deglaciation to the Global Upper Ocean"}])
|
617
|
+
expect(subject.id).to eq("https://doi.org/10.5194/cp-2020-95")
|
618
|
+
expect(subject.identifiers).to be_empty
|
619
|
+
expect(subject.descriptions.first["description"]).to start_with("Abstract. During the early last glacial termination")
|
620
|
+
expect(subject.dates).to include({"date"=>"2020-07-28", "dateType"=>"Issued"})
|
621
|
+
expect(subject.publication_year).to eq("2020")
|
622
|
+
expect(subject.publisher).to eq("Copernicus GmbH")
|
623
|
+
expect(subject.agency).to eq("Crossref")
|
624
|
+
end
|
625
|
+
|
605
626
|
it "journal issue" do
|
606
627
|
input = "https://doi.org/10.6002/ect.2015.0371"
|
607
628
|
subject = Bolognese::Metadata.new(input: input)
|
@@ -46,7 +46,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
46
46
|
input = fixture_path + "datacite_software_missing_comma.json"
|
47
47
|
subject = Bolognese::Metadata.new(input: input, from: "datacite_json", show_errors: true)
|
48
48
|
expect(subject.valid?).to be false
|
49
|
-
expect(subject.errors).to eq(["expected comma, not a string (doi) at line 4, column 11 [parse.c:373]"])
|
49
|
+
expect(subject.errors).to eq(["expected comma, not a string (after doi) at line 4, column 11 [parse.c:373]"])
|
50
50
|
expect(subject.codemeta).to be_nil
|
51
51
|
end
|
52
52
|
|
@@ -340,7 +340,8 @@ describe Bolognese::Metadata, vcr: true do
|
|
340
340
|
"funderIdentifier"=>"https://doi.org/10.13039/501100000780",
|
341
341
|
"funderIdentifierType"=>"Crossref Funder ID",
|
342
342
|
"funderName"=>"European Commission"}],
|
343
|
-
types: { "resourceTypeGeneral" => "Dataset", "schemaOrg" => "Dataset" }
|
343
|
+
types: { "resourceTypeGeneral" => "Dataset", "schemaOrg" => "Dataset" },
|
344
|
+
"identifiers" => [{ "identifierType"=>"Repository ID", "identifier"=>"123" }])
|
344
345
|
|
345
346
|
expect(subject.valid?).to be true
|
346
347
|
expect(subject.doi).to eq("10.5281/zenodo.1239")
|
@@ -359,6 +360,7 @@ describe Bolognese::Metadata, vcr: true do
|
|
359
360
|
"funderIdentifier"=>"https://doi.org/10.13039/501100000780",
|
360
361
|
"funderIdentifierType"=>"Crossref Funder ID",
|
361
362
|
"funderName"=>"European Commission"}])
|
363
|
+
expect(subject.identifiers).to eq([{"identifier"=>"123", "identifierType"=>"Repository ID"}])
|
362
364
|
expect(subject.agency).to eq("DataCite")
|
363
365
|
expect(subject.schema_version).to eq("http://datacite.org/schema/kernel-4")
|
364
366
|
expect(subject.state).to eq("findable")
|
@@ -19,6 +19,18 @@ describe Bolognese::Metadata, vcr: true do
|
|
19
19
|
expect(bibtex[:copyright]).to eq("Creative Commons Attribution 3.0 Unported")
|
20
20
|
end
|
21
21
|
|
22
|
+
it "with schema_3" do
|
23
|
+
# input = fixture_path + "datacite_kernel_3.json"
|
24
|
+
input = fixture_path + "datacite_schema_3.xml"
|
25
|
+
json = Bolognese::Metadata.new(input: input, from: "datacite")
|
26
|
+
subject = Bolognese::Metadata.new(input: json.meta.to_json, from: "datacite_json")
|
27
|
+
bibtex = BibTeX.parse(subject.bibtex).to_a(quotes: '').first
|
28
|
+
expect(bibtex[:bibtex_type].to_s).to eq("misc")
|
29
|
+
expect(bibtex[:bibtex_key]).to eq("https://doi.org/10.5061/dryad.8515")
|
30
|
+
expect(bibtex[:doi]).to eq("10.5061/dryad.8515")
|
31
|
+
expect(bibtex[:year]).to eq("2011")
|
32
|
+
end
|
33
|
+
|
22
34
|
it "with pages" do
|
23
35
|
input = "https://doi.org/10.1155/2012/291294"
|
24
36
|
subject = Bolognese::Metadata.new(input: input, from: "crossref")
|
@@ -67,6 +67,19 @@ describe Bolognese::Metadata, vcr: true do
|
|
67
67
|
expect(json["issued"]).to eq("date-parts" => [[2016, 12, 20]])
|
68
68
|
end
|
69
69
|
|
70
|
+
it "Another dataset" do
|
71
|
+
input = "10.26301/qdpd-2250"
|
72
|
+
subject = Bolognese::Metadata.new(input: input, from: "datacite")
|
73
|
+
json = JSON.parse(subject.citeproc)
|
74
|
+
expect(json["type"]).to eq("dataset")
|
75
|
+
expect(json["id"]).to eq("https://doi.org/10.26301/qdpd-2250")
|
76
|
+
expect(json["DOI"]).to eq("10.26301/qdpd-2250")
|
77
|
+
expect(json["title"]).to eq("USS Pampanito Submarine")
|
78
|
+
expect(json["author"]).to eq([{"literal"=>"USS Pampanito"}])
|
79
|
+
expect(json["publisher"]).to eq("Open Heritage 3D")
|
80
|
+
expect(json["issued"]).to eq("date-parts"=>[[2020]])
|
81
|
+
end
|
82
|
+
|
70
83
|
it "journal article" do
|
71
84
|
input = "10.7554/eLife.01567"
|
72
85
|
subject = Bolognese::Metadata.new(input: input, from: "crossref")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bolognese
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maremma
|
@@ -926,6 +926,7 @@ files:
|
|
926
926
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_titles.yml
|
927
927
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml
|
928
928
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml
|
929
|
+
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content_copernicus.yml
|
929
930
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml
|
930
931
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book.yml
|
931
932
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book_chapter.yml
|
@@ -1117,6 +1118,7 @@ files:
|
|
1117
1118
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Missing_author.yml
|
1118
1119
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/interactive_resource_without_dates.yml
|
1119
1120
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/software_w/version.yml
|
1121
|
+
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Another_dataset.yml
|
1120
1122
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting.yml
|
1121
1123
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting_schema_org.yml
|
1122
1124
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Dataset.yml
|
@@ -1248,8 +1250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1248
1250
|
- !ruby/object:Gem::Version
|
1249
1251
|
version: '0'
|
1250
1252
|
requirements: []
|
1251
|
-
|
1252
|
-
rubygems_version: 2.7.7
|
1253
|
+
rubygems_version: 3.0.8
|
1253
1254
|
signing_key:
|
1254
1255
|
specification_version: 4
|
1255
1256
|
summary: Ruby client library for conversion of DOI Metadata
|