bolognese 1.7.2 → 1.8.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7446775419fc2bf90ef92cae706c719008e19c5916eca5d9fa7fae985814103d
4
- data.tar.gz: 54c8eba0583ce6238d7adb52f19323de12f93b7ff8df787d19f5167ac636df72
3
+ metadata.gz: 9eff0ba27c9712dc643e647b3800df6177e13cb1e01c8269b2b172a61616dc9b
4
+ data.tar.gz: 8ef53004829fede6fdbcd4b5942a8e63950fe3b8bdcff770be69a66c34e6caa9
5
5
  SHA512:
6
- metadata.gz: 0452a44753fb0ed02b0a9f03a477b52a8edd569822ac972a13b0b950d0819023ada9bcac8801fd2b178d986b5617c895971deee44948960ead9dfef765c93f01
7
- data.tar.gz: e7fbfe6eb47e5111cb12b53bcf1125d97b2727221b2ffbf6b804496cb5585fdd17bb53573357aa2c8046045e6ed474c0da355c58672e4353cba5b714b6158798
6
+ metadata.gz: 476ec065a05d4c6fed3f4bee2deccf944723cbdbff07202f9e88ca29a1fb16310424b7e647a5e57c8cbc445adf345ef179e307b7aabaa61379e39ab42e03158d
7
+ data.tar.gz: 2115e97733f06c4d67fdcf75eb8496758aa85a60b78888c296a6b25d1f7eb98ef5b9f82bff196b9c9e5544de75806c5787715b2aac2ea1848df027ec1d862eb8
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (1.7.2)
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.2.0)
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.3)
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.6)
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.1)
152
- ebnf (~> 1.2)
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.3.1)
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
- schema_version = schema_version.to_s.start_with?("http://datacite.org/schema/kernel") ? schema_version : "http://datacite.org/schema/kernel-4"
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
- return xml unless identifiers.present?
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(identifiers).each do |alternate_identifier|
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
@@ -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(input: nil, from: nil, **options)
19
- id = normalize_id(input, options)
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 = bibliographic_metadata.dig("institution", "institution_name")
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" }
@@ -965,6 +965,8 @@ module Bolognese
965
965
  month = iso8601_time[5..6].to_i
966
966
  day = iso8601_time[8..9].to_i
967
967
  { 'date-parts' => [[year, month, day].reject { |part| part == 0 }] }
968
+ rescue TypeError
969
+ nil
968
970
  end
969
971
 
970
972
  def get_date_from_date_parts(date_as_parts)
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "1.7.2"
2
+ VERSION = "1.8.3"
3
3
  end
@@ -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
@@ -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
@@ -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("bioRxiv")
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 δ&lt;sup&gt;13&lt;/sup&gt;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.7.2
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-12 00:00:00.000000000 Z
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
- rubyforge_project:
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