bolognese 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4bf575907432b4cceb0c59f18c11f46f8d8a048
4
- data.tar.gz: 2688d21093927a3153ab67b8d492e18900b2d524
3
+ metadata.gz: 1463edb9e56dc1c3519c19a325f248d9e8d134d0
4
+ data.tar.gz: 44484bf41d55c1539b38f39bf6111bacead7e447
5
5
  SHA512:
6
- metadata.gz: 5e8af10f8bd60543bff089d952d4325b78986d5d6240d5555b6fd820331074da0f575fc451b1aeab07658ad1f07ea649ac4a7cd704f8a2b063d50a0072c646f8
7
- data.tar.gz: 552874744bd870c5a108593862bc9778bf80bd7c24673f2d62014685a5d01a135b41ca42fdf23025a749dae63bbc59ce523440f846bde7e0788cb4e3ef11f426
6
+ metadata.gz: a981e4ba58d96e9e2e67ae7ce15fd18a951ba3364d06723271d55634e2ccbda9a31bb882c96a9ad1f6ba4489b2537de8f7610f8d2c3dfaa48d7624c98d9fc537
7
+ data.tar.gz: fbb30ce05de64f05402a8e62b4a8d5617e26f0b7331a53ad3cd1a848fc46293b46d0c2bb35ac072f70fd5196ac1d3b5ccbd45e3a7bf216a78448ec5ad1add403
data/CITATION ADDED
@@ -0,0 +1,17 @@
1
+ To cite bolognese in publications, please use:
2
+
3
+ Fenner, M. (2017). Bolognese: a Ruby library for conversion of DOI Metadata.
4
+ DataCite. https://doi.org/10.5438/n138-z3mk
5
+
6
+ A BibTeX entry for bolognese is
7
+
8
+ @misc{https://doi.org/10.5438/n138-z3mk,
9
+ doi = {10.5438/n138-z3mk},
10
+ url = {https://github.com/datacite/bolognese},
11
+ author = {Fenner, Martin},
12
+ keywords = {doi, metadata, crossref, datacite, schema.org, bibtex, codemeta},
13
+ title = {Bolognese: a Ruby library for conversion of DOI Metadata},
14
+ publisher = {DataCite},
15
+ note = {Ruby gem and command-line utility for conversion of DOI metadata from and to different metadata formats, including schema.org.},
16
+ year = {2017}
17
+ }
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (0.9.17)
4
+ bolognese (0.9.18)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -84,11 +84,11 @@ GEM
84
84
  nokogiri (~> 1.6, >= 1.6.8)
85
85
  oj (~> 2.18, >= 2.18.1)
86
86
  mini_portile2 (2.1.0)
87
- minitest (5.10.1)
87
+ minitest (5.10.2)
88
88
  multi_json (1.12.1)
89
89
  multipart-post (2.0.0)
90
90
  namae (0.10.2)
91
- nokogiri (1.7.1)
91
+ nokogiri (1.7.2)
92
92
  mini_portile2 (~> 2.1.0)
93
93
  oj (2.18.5)
94
94
  postrank-uri (1.0.22)
@@ -96,7 +96,7 @@ GEM
96
96
  nokogiri (>= 1.6.1, < 1.8)
97
97
  public_suffix (>= 2.0.0, < 2.1)
98
98
  public_suffix (2.0.5)
99
- rack (2.0.1)
99
+ rack (2.0.2)
100
100
  rack-test (0.6.3)
101
101
  rack (>= 1.0)
102
102
  rake (12.0.0)
@@ -105,7 +105,7 @@ GEM
105
105
  link_header (~> 0.0, >= 0.0.8)
106
106
  rdf-aggregate-repo (2.2.0)
107
107
  rdf (~> 2.0)
108
- rdf-rdfa (2.2.0)
108
+ rdf-rdfa (2.2.1)
109
109
  haml (~> 4.0)
110
110
  htmlentities (~> 4.3)
111
111
  rdf (~> 2.2)
@@ -130,10 +130,10 @@ module Bolognese
130
130
  end
131
131
 
132
132
  def insert_funding_references(xml)
133
- return xml unless Array.wrap(funder).present?
133
+ return xml unless Array.wrap(funding).present?
134
134
 
135
135
  xml.fundingReferences do
136
- Array.wrap(funder).each do |funding_reference|
136
+ Array.wrap(funding).each do |funding_reference|
137
137
  xml.fundingReference do
138
138
  insert_funding_reference(xml, funding_reference)
139
139
  end
@@ -60,7 +60,7 @@ module Bolognese
60
60
  attr_reader :id, :from, :raw, :metadata, :doc, :provider, :schema_version, :license, :citation,
61
61
  :additional_type, :alternate_name, :url, :version, :keywords, :editor,
62
62
  :page_start, :page_end, :date_modified, :language, :spatial_coverage,
63
- :content_size, :funder, :journal, :bibtex_type, :date_created, :has_part,
63
+ :content_size, :funding, :journal, :bibtex_type, :date_created, :has_part,
64
64
  :publisher, :contributor, :same_as, :is_previous_version_of, :is_new_version_of,
65
65
  :should_passthru, :errors, :datacite_errors, :date_accepted, :date_available,
66
66
  :date_copyrighted, :date_collected, :date_submitted, :date_valid,
@@ -168,10 +168,6 @@ module Bolognese
168
168
  metadata.fetch("editor", nil)
169
169
  end
170
170
 
171
- def funder
172
- metadata.fetch("funder", nil)
173
- end
174
-
175
171
  def publisher
176
172
  metadata.fetch("publisher", nil)
177
173
  end
@@ -252,6 +248,10 @@ module Bolognese
252
248
  metadata.fetch("schema_version", nil)
253
249
  end
254
250
 
251
+ def funding
252
+ metadata.fetch("funding", nil)
253
+ end
254
+
255
255
  def is_identical_to
256
256
  metadata.fetch("is_identical_to", nil)
257
257
  end
@@ -111,7 +111,7 @@ module Bolognese
111
111
  "alternate_name" => crossref_alternate_name(bibliographic_metadata),
112
112
  "author" => crossref_people(bibliographic_metadata, "author"),
113
113
  "editor" => crossref_people(bibliographic_metadata, "editor"),
114
- "funder" => crossref_funder(program_metadata),
114
+ "funding" => crossref_funding_reference(program_metadata),
115
115
  "publisher" => nil,
116
116
  "provider" => "Crossref",
117
117
  "is_part_of" => crossref_is_part_of(journal_metadata),
@@ -168,15 +168,43 @@ module Bolognese
168
168
  end.unwrap
169
169
  end
170
170
 
171
- def crossref_funder(program_metadata)
171
+ def crossref_funding_reference(program_metadata)
172
172
  fundref = Array.wrap(program_metadata).find { |a| a["name"] == "fundref" } || {}
173
173
  Array.wrap(fundref.fetch("assertion", [])).select { |a| a["name"] == "fundgroup" }.map do |f|
174
174
  f = Array.wrap(f.fetch("assertion", nil)).first
175
- { "id" => normalize_id(f.dig("assertion", "__content__")),
176
- "name" => f.dig("__content__").strip }.compact
175
+ funder = { "type" => "Organization",
176
+ "id" => normalize_id(f.dig("assertion", "__content__")),
177
+ "name" => f.dig("__content__").strip }.compact
178
+ if f["awardNumber"].present? || f["awardTitle"].present?
179
+ { "type" => "Award",
180
+ "name" => f.fetch("awardTitle", nil),
181
+ "identifier" => f.dig("awardNumber", "__content__"),
182
+ "url" => f.dig("awardNumber", "awardURI"),
183
+ "funder" => funder }
184
+ else
185
+ funder
186
+ end
177
187
  end.unwrap
178
188
  end
179
189
 
190
+ # def datacite_funding_reference(meta)
191
+ # Array.wrap(meta.dig("fundingReferences", "fundingReference")).map do |f|
192
+ # funder_id = parse_attributes(f["funderIdentifier"])
193
+ # funder = { "type" => "Organization",
194
+ # "id" => normalize_id(funder_id),
195
+ # "name" => f["funderName"] }.compact
196
+ # if f["awardNumber"].present? || f["awardTitle"].present?
197
+ # { "type" => "Award",
198
+ # "name" => f.fetch("awardTitle", nil),
199
+ # "identifier" => f.dig("awardNumber", "__content__"),
200
+ # "url" => f.dig("awardNumber", "awardURI"),
201
+ # "funder" => funder }
202
+ # else
203
+ # funder
204
+ # end
205
+ # end.uniq
206
+ # end
207
+
180
208
  def crossref_date_published(bibliographic_metadata)
181
209
  pub_date = Array.wrap(bibliographic_metadata.fetch("publication_date", nil)).presence ||
182
210
  Array.wrap(bibliographic_metadata.fetch("acceptance_date", nil))
@@ -47,7 +47,7 @@ module Bolognese
47
47
  end
48
48
  end.compact.join(", ").presence
49
49
  dates = Array.wrap(meta.dig("dates", "date"))
50
- funder = begin
50
+ funding = begin
51
51
  f = datacite_funder_contributor(meta) + datacite_funding_reference(meta)
52
52
  f.length > 1 ? f : f.first
53
53
  end
@@ -66,9 +66,9 @@ module Bolognese
66
66
  "alternate_name" => alternate_name,
67
67
  "author" => get_authors(meta.dig("creators", "creator")),
68
68
  "editor" => get_authors(Array.wrap(meta.dig("contributors", "contributor")).select { |r| r["contributorType"] == "Editor" }),
69
- "funder" => funder,
70
69
  "publisher" => meta.fetch("publisher", nil),
71
70
  "provider" => "DataCite",
71
+ "funding" => funding,
72
72
  "is_identical_to" => datacite_is_identical_to(meta),
73
73
  "is_part_of" => datacite_is_part_of(meta),
74
74
  "has_part" => datacite_has_part(meta),
@@ -103,8 +103,18 @@ module Bolognese
103
103
  def datacite_funding_reference(meta)
104
104
  Array.wrap(meta.dig("fundingReferences", "fundingReference")).map do |f|
105
105
  funder_id = parse_attributes(f["funderIdentifier"])
106
- { "identifier" => normalize_id(funder_id),
107
- "name" => f["funderName"] }.compact
106
+ funder = { "type" => "Organization",
107
+ "id" => normalize_id(funder_id),
108
+ "name" => f["funderName"] }.compact
109
+ if f["awardNumber"].present? || f["awardTitle"].present?
110
+ { "type" => "Award",
111
+ "name" => f.fetch("awardTitle", nil),
112
+ "identifier" => f.dig("awardNumber", "__content__"),
113
+ "url" => f.dig("awardNumber", "awardURI"),
114
+ "funder" => funder }
115
+ else
116
+ funder
117
+ end
108
118
  end.uniq
109
119
  end
110
120
 
@@ -170,7 +180,15 @@ module Bolognese
170
180
  def datacite_funder_contributor(meta)
171
181
  Array.wrap(meta.dig("contributors", "contributor")).reduce([]) do |sum, f|
172
182
  if f["contributorType"] == "Funder"
173
- sum << { "name" => f["contributorName"] }
183
+ funder = { "type" => "Organization",
184
+ "name" => f["contributorName"] }.compact
185
+ if f.dig("nameIdentifier", "nameIdentifierScheme") == "info"
186
+ sum << { "type" => "Award",
187
+ "identifier" => f.dig("nameIdentifier", "__content__").split("/").last,
188
+ "funder" => funder }
189
+ else
190
+ sum << funder
191
+ end
174
192
  else
175
193
  sum
176
194
  end
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "0.9.17"
2
+ VERSION = "0.9.18"
3
3
  end
@@ -38,7 +38,7 @@ module Bolognese
38
38
  "issue" => issue,
39
39
  "pagination" => pagination,
40
40
  "spatial_coverage" => spatial_coverage,
41
- "funding_reference" => funder,
41
+ "funding_reference" => funding,
42
42
  "schema_version" => schema_version,
43
43
  "provider" => provider
44
44
  }.compact
@@ -34,7 +34,7 @@ module Bolognese
34
34
  "rights" => license,
35
35
  "description" => description,
36
36
  "geo-location" => spatial_coverage,
37
- "funding-reference" => funder,
37
+ "funding-reference" => funding,
38
38
  "schemaVersion" => schema_version,
39
39
  "provider" => provider
40
40
  }.compact
@@ -32,7 +32,7 @@ module Bolognese
32
32
  "@reverse" => reverse.presence,
33
33
  "schemaVersion" => schema_version,
34
34
  "publisher" => publisher.present? ? { "@type" => "Organization", "name" => publisher } : nil,
35
- "funder" => funder,
35
+ "funding" => to_schema_org(funding),
36
36
  "provider" => provider.present? ? { "@type" => "Organization", "name" => provider } : nil
37
37
  }.compact.presence
38
38
  end
@@ -0,0 +1,38 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://search.datacite.org/api?fl=doi,xml,media,minted,updated&q=doi:10.5438/6423&wt=json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
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
+ Access-Control-Allow-Methods:
20
+ - GET, POST, OPTIONS
21
+ Access-Control-Allow-Origin:
22
+ - "*"
23
+ Content-Type:
24
+ - application/json;charset=UTF-8
25
+ Date:
26
+ - Fri, 12 May 2017 10:02:42 GMT
27
+ Server:
28
+ - openresty/1.11.2.2
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: UTF-8
33
+ string: '{"responseHeader":{"status":0,"QTime":1},"response":{"numFound":1,"start":0,"docs":[{"xml":"PHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00L21ldGFkYXRhLnhzZCI+CiAgPGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTQzOC82NDIzPC9pZGVudGlmaWVyPgogIDxjcmVhdG9ycz4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+RmFycXVoYXIsIEFkYW08L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPkFkYW08L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+RmFycXVoYXI8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAxLTUzMzEtNjU5MjwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5Ccml0aXNoIExpYnJhcnk8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5BcnlhbmksIEFtaXI8L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPkFtaXI8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+QXJ5YW5pPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMi00MjU5LTk3NzQ8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+QU5EUzwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPkJyb3duLCBKb3NoPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5Kb3NoPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkJyb3duPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMi04Njg5LTQ5MzU8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+T1JDSUQgRVU8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5CdXJ0b24sIEFkcmlhbjwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+QWRyaWFuPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkJ1cnRvbjwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDItODA5OS03NTM4PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkFORFM8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5DcnVpc2UsIFBhdHJpY2lhPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5QYXRyaWNpYTwvZ2l2ZW5OYW1lPgogICAgICA8ZmFtaWx5TmFtZT5DcnVpc2U8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAyLTkzMDAtNTI3ODwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5EYXRhQ2l0ZTwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPkRhbGxtZWllci1UaGllc3NlbiwgU8O8bmplPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5Tw7xuamU8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+RGFsbG1laWVyLVRoaWVzc2VuPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMi02MTM3LTIzNDg8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+Q0VSTjwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPkRhcHBlcnQsIEFuZ2VsYTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+QW5nZWxhPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkRhcHBlcnQ8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAzLTI2MTQtNjY3NjwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5Ccml0aXNoIExpYnJhcnk8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5EYXNsZXIsIFJvYmluPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5Sb2JuPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkRhc2xlcjwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDItNDY5NS03ODc0PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkNFUk48L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5EZW1lcmFudmlsbGUsIFRvbTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+VG9tPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkRlbWVyYW52aWxsZTwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDMtMDkwMi00Mzg2PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPk9SQ0lEIEVVPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+RGllcGVuYnJvZWssIE1pY2hhZWw8L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPk1pY2hhZWw8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+RGllcGVuYnJvZWs8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAzLTMwOTYtNjgyOTwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5QYW5nYWVhPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+RHVpbmUsIE1hYWlrZTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+TWFpa2U8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+RHVpbmU8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAzLTM0MTItNzE5MjwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5PUkNJRCBFVTwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPkZlbm5lciwgTWFydGluPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5NYXJ0aW48L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+RmVubmVyPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMy0xNDE5LTI0MDU8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+RGF0YUNpdGU8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5HYXJ6YSwgS3Jpc3RpYW48L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPktyaXN0aWFuPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPkdhcnphPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMy0zNDg0LTY4NzU8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+RGF0YUNpdGU8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5Hcm90aCwgUGF1bDwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+UGF1bDwvZ2l2ZW5OYW1lPgogICAgICA8ZmFtaWx5TmFtZT5Hcm90aDwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDMtMDE4My02OTEwPC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkVsc2V2aWVyPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+SGFhaywgTGF1cmVsPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5MYXVyZWw8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+SGFhazwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtNTEwOS0zNzAwPC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPk9SQ0lEIEVVPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+S2llcm1lciwgVmVyb25pcXVlPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5WZXJvbmlxdWU8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+S2llcm1lcjwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtODc3MS03MjM5PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPlB1YmxpYyBMaWJyYXJ5IG9mIFNjaWVuY2U8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5Lb3RhcnNraSwgUmFjaGFlbDwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+UmFjaGFlbDwvZ2l2ZW5OYW1lPgogICAgICA8ZmFtaWx5TmFtZT5Lb3RhcnNraTwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtNjg0My03OTYwPC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkJyaXRpc2ggTGlicmFyeTwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPk1hY0NhbGx1bSwgQ2F0cmlvbmE8L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPkNhdHJpb25hPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPk1hY0NhbGx1bTwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtOTYyMy0yMjI1PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPlB1YmxpYyBMaWJyYXJ5IG9mIFNjaWVuY2U8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5NY0VudHlyZSwgSm9oYW5uYTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+Sm9oYW5uYTwvZ2l2ZW5OYW1lPgogICAgICA8ZmFtaWx5TmFtZT5NY0VudHlyZTwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDItMTYxMS02OTM1PC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkV1cm9wZWFuIEJpb2luZm9ybWF0aWNzIEluc3RpdHV0ZTwvYWZmaWxpYXRpb24+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPk1lbGUsIFNhbHZhdG9yZTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+U2FsdmF0b3JlPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPk1lbGU8L2ZhbWlseU5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iT1JDSUQiIHNjaGVtZVVSST0iaHR0cDovL29yY2lkLm9yZyI+MDAwMC0wMDAzLTA3NjItMjIzNTwvbmFtZUlkZW50aWZpZXI+CiAgICAgIDxhZmZpbGlhdGlvbj5DRVJOPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+TWVsbG8sIEd1aWxoZXJtZTwvY3JlYXRvck5hbWU+CiAgICAgIDxnaXZlbk5hbWU+R3VpbGhlcm1lPC9naXZlbk5hbWU+CiAgICAgIDxmYW1pbHlOYW1lPk1lbGxvPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMi05ODI5LTA5MVg8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+RXVyb3BlYW4gQmlvaW5mb3JtYXRpY3MgSW5zdGl0dXRlPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+UnVlZGEsIExhdXJhPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5MYXVyYTwvZ2l2ZW5OYW1lPgogICAgICA8ZmFtaWx5TmFtZT5SdWVkYTwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtNTk1Mi03NjMwPC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPkRhdGFDaXRlPC9hZmZpbGlhdGlvbj4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+U3RvY2tlciwgTWFya3VzPC9jcmVhdG9yTmFtZT4KICAgICAgPGdpdmVuTmFtZT5NYXJrdXM8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+U3RvY2tlcjwvZmFtaWx5TmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDEtNTQ5Mi0zMjEyPC9uYW1lSWRlbnRpZmllcj4KICAgICAgPGFmZmlsaWF0aW9uPlBhbmdhZWE8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5WaXNpb24sIFRvZGQ8L2NyZWF0b3JOYW1lPgogICAgICA8Z2l2ZW5OYW1lPlRvZGQ8L2dpdmVuTmFtZT4KICAgICAgPGZhbWlseU5hbWU+VmlzaW9uPC9mYW1pbHlOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmciPjAwMDAtMDAwMi02MTMzLTI1ODE8L25hbWVJZGVudGlmaWVyPgogICAgICA8YWZmaWxpYXRpb24+RHJ5YWQ8L2FmZmlsaWF0aW9uPgogICAgPC9jcmVhdG9yPgogIDwvY3JlYXRvcnM+CiAgPGNvbnRyaWJ1dG9ycz4KICAgIDxjb250cmlidXRvciBjb250cmlidXRvclR5cGU9IlByb2plY3RMZWFkZXIiPgogICAgICA8Y29udHJpYnV0b3JOYW1lPlRoZSBCcml0aXNoIExpYnJhcnk8L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjM2MjEyLjM0PC9uYW1lSWRlbnRpZmllcj4KICAgIDwvY29udHJpYnV0b3I+CiAgICA8Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJQcm9qZWN0TWVtYmVyIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5Nb25hc2ggVW5pdmVyc2l0eTwvY29udHJpYnV0b3JOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9IkdSSUQiIHNjaGVtZVVSST0iaHR0cHM6Ly9ncmlkLmFjL2luc3RpdHV0ZXMiPmdyaWQuMTAwMi4zPC9uYW1lSWRlbnRpZmllcj4KICAgIDwvY29udHJpYnV0b3I+CiAgICA8Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJQcm9qZWN0TWVtYmVyIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5FdXJvcGVhbiBPcmdhbml6YXRpb24gZm9yIE51Y2xlYXIgUmVzZWFyY2g8L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjkxMzIuOTwvbmFtZUlkZW50aWZpZXI+CiAgICA8L2NvbnRyaWJ1dG9yPgogICAgPGNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yVHlwZT0iUHJvamVjdE1lbWJlciI+CiAgICAgIDxjb250cmlidXRvck5hbWU+RGF0YUNpdGU8L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjQ3NTgyNi5hPC9uYW1lSWRlbnRpZmllcj4KICAgIDwvY29udHJpYnV0b3I+CiAgICA8Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJQcm9qZWN0TWVtYmVyIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5UaGUgVW5pdmVyc2l0eSBvZiBOb3J0aCBDYXJvbGluYSBhdCBDaGFwZWwgSGlsbDwvY29udHJpYnV0b3JOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9IkdSSUQiIHNjaGVtZVVSST0iaHR0cHM6Ly9ncmlkLmFjL2luc3RpdHV0ZXMiPmdyaWQuMTA2OTguMzY8L25hbWVJZGVudGlmaWVyPgogICAgPC9jb250cmlidXRvcj4KICAgIDxjb250cmlidXRvciBjb250cmlidXRvclR5cGU9IlByb2plY3RNZW1iZXIiPgogICAgICA8Y29udHJpYnV0b3JOYW1lPkV1cm9wZWFuIE1vbGVjdWxhciBCaW9sb2d5IExhYm9yYXRvcnk8L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjQ3MDkuYTwvbmFtZUlkZW50aWZpZXI+CiAgICA8L2NvbnRyaWJ1dG9yPgogICAgPGNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yVHlwZT0iUHJvamVjdE1lbWJlciI+CiAgICAgIDxjb250cmlidXRvck5hbWU+RWxzZXZpZXI8L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjQ2MjIwNy41PC9uYW1lSWRlbnRpZmllcj4KICAgIDwvY29udHJpYnV0b3I+CiAgICA8Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJQcm9qZWN0TWVtYmVyIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5PUkNJRCBFVTwvY29udHJpYnV0b3JOYW1lPgogICAgPC9jb250cmlidXRvcj4KICAgIDxjb250cmlidXRvciBjb250cmlidXRvclR5cGU9IlByb2plY3RNZW1iZXIiPgogICAgICA8Y29udHJpYnV0b3JOYW1lPlVuaXZlcnNpdMOkdCBCcmVtZW48L2NvbnRyaWJ1dG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJHUklEIiBzY2hlbWVVUkk9Imh0dHBzOi8vZ3JpZC5hYy9pbnN0aXR1dGVzIj5ncmlkLjc3MDQuNDwvbmFtZUlkZW50aWZpZXI+CiAgICA8L2NvbnRyaWJ1dG9yPgogICAgPGNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yVHlwZT0iUHJvamVjdE1lbWJlciI+CiAgICAgIDxjb250cmlidXRvck5hbWU+UHVibGljIExpYnJhcnkgb2YgU2NpZW5jZTwvY29udHJpYnV0b3JOYW1lPgogICAgICA8bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9IkdSSUQiIHNjaGVtZVVSST0iaHR0cHM6Ly9ncmlkLmFjL2luc3RpdHV0ZXMiPmdyaWQuNDMxMzAyLjc8L25hbWVJZGVudGlmaWVyPgogICAgPC9jb250cmlidXRvcj4KICA8L2NvbnRyaWJ1dG9ycz4KICA8dGl0bGVzPgogICAgPHRpdGxlPlRlY2huaWNhbCBhbmQgSHVtYW4gSW5mcmFzdHJ1Y3R1cmUgZm9yIE9wZW4gUmVzZWFyY2ggKFRIT1IpPC90aXRsZT4KICA8L3RpdGxlcz4KICA8cHVibGlzaGVyPkRhdGFDaXRlPC9wdWJsaXNoZXI+CiAgPHB1YmxpY2F0aW9uWWVhcj4yMDE1PC9wdWJsaWNhdGlvblllYXI+CiAgPHJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVHZW5lcmFsPSJDb2xsZWN0aW9uIj5Qcm9qZWN0PC9yZXNvdXJjZVR5cGU+CiAgPHJlbGF0ZWRJZGVudGlmaWVycz4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL1pFTk9ETy4zMDc5OTwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS9aRU5PRE8uMzA4MDA8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvWkVOT0RPLjMxNzg3PC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL1pFTk9ETy4zMTkzMjwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS9aRU5PRE8uMzE5MzM8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvWkVOT0RPLjQ2NzYxPC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL1pFTk9ETy40ODIyODwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS9aRU5PRE8uNDg3MDU8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvWkVOT0RPLjU4OTcxPC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL1pFTk9ETy42MTE3NjwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS96ZW5vZG8uMTU0NTkyPC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL3plbm9kby4xNjgwNDM8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvemVub2RvLjE2ODE4MTwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS96ZW5vZG8uMTY4MTg0PC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL3plbm9kby4xNjgxODc8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvemVub2RvLjE2ODE4ODwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS96ZW5vZG8uMTY4MTkwPC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41MjgxL3plbm9kby4xNjgyMDI8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjUyODEvemVub2RvLjE2ODIxMzwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS96ZW5vZG8uMTY4MjE0PC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41NDM4L0JDMTEtQ1FXMTwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTQzOC9DSlQyLVQ2RFo8L3JlbGF0ZWRJZGVudGlmaWVyPgogICAgPHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0aW9uVHlwZT0iSGFzUGFydCIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJET0kiPjEwLjU0MzgvVzAyOS1ZNld+PC9yZWxhdGVkSWRlbnRpZmllcj4KICAgIDxyZWxhdGVkSWRlbnRpZmllciByZWxhdGlvblR5cGU9Ikhhc1BhcnQiIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iRE9JIj4xMC41NDM4L1M4R0YtMENLOTwvcmVsYXRlZElkZW50aWZpZXI+CiAgICA8cmVsYXRlZElkZW50aWZpZXIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0IiByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNjA4NC9NOS5GSUdTSEFSRS40MjM2NDI4PC9yZWxhdGVkSWRlbnRpZmllcj4KICA8L3JlbGF0ZWRJZGVudGlmaWVycz4KICA8cmlnaHRzTGlzdD4KICAgIDxyaWdodHMgcmlnaHRzVVJJPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMDwvcmlnaHRzPgogIDwvcmlnaHRzTGlzdD4KICA8ZGVzY3JpcHRpb25zPgogICAgPGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iQWJzdHJhY3QiPgombHQ7cCZndDtGaXZlIHllYXJzIGFnbywgYSBnbG9iYWwgaW5mcmFzdHJ1Y3R1cmUgdG8gdW5pcXVlbHkgYXR0cmlidXRlIHRvIHJlc2VhcmNoZXJzIHRoZWlyIHNjaWVudGlmaWMgYXJ0ZWZhY3RzIChhcnRpY2xlcywgZGF0YSwgc29mdHdhcmUmIzgyMzA7KSBhcHBlYXJlZCB0ZWNobmljYWxseSBhbmQgc29jaWFsbHkgaW5mZWFzaWJsZS4gU2luY2UgdGhlbiwgRGF0YUNpdGUgaGFzIG1pbnRlZCBvdmVyIDMuNW0gdW5pcXVlIGlkZW50aWZpZXJzIGZvciBkYXRhLiBPUkNJRCBoYXMgZGVwbG95ZWQgYW4gb3BlbiBzb2x1dGlvbiBmb3IgaWRlbnRpZmljYXRpb24gb2YgY29udHJpYnV0b3JzIHdpdGggb3ZlciA4NTAsMDAwIHJlZ2lzdHJhbnRzIGluIGxlc3MgdGhhbiAyIHllYXJzLiAgICBUSE9SIHdpbGwgbGV2ZXJhZ2UgdGhlc2UgZW1lcmdpbmcgZ2xvYmFsIGluZnJhc3RydWN0dXJlcyB0byBzdXBwb3J0IHRoZSBIMjAyMCBnb2FsIHRvIG1ha2UgZXZlcnkgcmVzZWFyY2hlciBkaWdpdGFsIGFuZCBpbmNyZWFzZSBjcmVhdGl2aXR5IGFuZCBlZmZpY2llbmN5IG9mIHJlc2VhcmNoLCB3aGlsZSBicmlkZ2luZyB0aGUgUiZhbXA7RCBkaXZpZGUgYmV0d2VlbiBkZXZlbG9wZWQgYW5kIGxlc3MtZGV2ZWxvcGVkIHJlZ2lvbnMuIFdlIHdpbGwgZXN0YWJsaXNoIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiBleGlzdGluZyByZXNvdXJjZXMsIGxpbmtpbmcgZGlnaXRhbCBpZGVudGlmaWVycyBhY3Jvc3MgcGxhdGZvcm1zIGFuZCBwcm9wYWdhdGluZyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gICBXZSB3aWxsIGludGVncmF0ZSBQSUQgc2VydmljZXMgYWNyb3NzIHRoZSByZXNlYXJjaCBsaWZlY3ljbGUgYW5kIGRhdGEgcHVibGlzaGluZyB3b3JrZmxvd3MgaW4gZm91ciBhZHZhbmNlZCByZXNlYXJjaCBjb21tdW5pdGllcywgYW5kIHRoZW4gcm9sbC1vdXQgY29yZSBzZXJ2aWNlcyBhbmQgc2VydmljZSBidWlsZGluZyBibG9ja3MgZm9yIHRoZSB3aWRlciBjb21tdW5pdHkuIFRoZXNlIG9wZW4gcmVzb3VyY2VzIHdpbGwgZm9zdGVyIGFuIG9wZW4gYW5kIHN1c3RhaW5hYmxlIGUtaW5mcmFzdHJ1Y3R1cmUgYWNyb3NzIHN0YWtlaG9sZGVycyB0byBhdm9pZCBkdXBsaWNhdGlvbnMsIGdpdmUgZWNvbm9taWVzIG9mIHNjYWxlLCByaWNobmVzcyBvZiBzZXJ2aWNlcyBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzcG9uZCByYXBpZGx5IHRvIG9wcG9ydHVuaXRpZXMgZm9yIGlubm92YXRpb24uICAgVEhPUiBpcyBub3QganVzdCByZWxldmFudCB0byB0aGUgRUlORlJBLTctMTAyNCBDYWxsLCBidXQgd2lsbCBiZWNvbWUgYSBwZXJ2YXNpdmUgZWxlbWVudCBvZiB0aGUgRUlORlJBIGZhbWlseSBvZiBlLUluZnJhc3RydWN0dXJlIHJlc291cmNlcyBvdmVyIHRoZSBuZXh0IDMgeWVhcnMuIEl0IHdpbGwgYWxsb3cgZGF0YS1tYW5hZ2VtZW50IGFuZCBjdXJhdGlvbiBzZXJ2aWNlcyB0byBleHBsb2l0IGtub3dsZWRnZSBvZiBkYXRhIGxvY2F0aW9uIGFuZCBhdHRyaWJ1dGlvbjsgcHJvdmlkZSByb2J1c3QgYW5kIHBlcnNpc3RlbnQgbWVjaGFuaXNtIGZvciBsaW5raW5nIGxpdGVyYXR1cmUgYW5kIGRhdGE7IGVuYWJsZSBzZWFyY2ggYW5kIHJlc29sdmluZyBzZXJ2aWNlcyBhbmQgZ2VuZXJhdGUgaW5jZW50aXZlcyBmb3IgT3BlbiBTY2llbmNlOyBkZWxpdmVyIHByb3ZlbmFuY2UgYW5kIGF0dHJpYnV0aW9uIG1lY2hhbmlzbXMgdG8gdW5kZXJwaW4gZGF0YSBleGNoYW5nZTsgYW5kIHByb3ZpZGUgbWludGluZyBhbmQgcmVzb2x2aW5nIHNlcnZpY2VzIGZvciBkYXRhIGNpdGF0aW9uIHdvcmtmbG93cy4gICBJdHMgaW1wYWN0IHdpbGwgZW5hYmxlIHRoaXJkLXBhcnR5IHNlcnZpY2VzLCBuby1wcm9maXQgYW5kIGNvbW1lcmNpYWwsIHRvIGxldmVyYWdlIHRoZSBzY2hvbGFybHkgcmVjb3JkLiZsdDsvcCZndDsKICAgIDwvZGVzY3JpcHRpb24+CiAgPC9kZXNjcmlwdGlvbnM+CiAgPGZ1bmRpbmdSZWZlcmVuY2VzPgogICAgPGZ1bmRpbmdSZWZlcmVuY2U+CiAgICAgIDxmdW5kZXJOYW1lPkV1cm9wZWFuIENvbW1pc3Npb248L2Z1bmRlck5hbWU+CiAgICAgIDxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJDcm9zc3JlZiBGdW5kZXIgSUQiPmh0dHA6Ly9keC5kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMDc4MDwvZnVuZGVySWRlbnRpZmllcj4KICAgICAgPGF3YXJkTnVtYmVyIGF3YXJkVVJJPSJodHRwOi8vY29yZGlzLmV1cm9wYS5ldS9wcm9qZWN0L3Jjbi8xOTQ5MjdfZW4uaHRtbCI+NjU0MDM5PC9hd2FyZE51bWJlcj4KICAgICAgPGF3YXJkVGl0bGU+VEhPUiDigJMgVGVjaG5pY2FsIGFuZCBIdW1hbiBJbmZyYXN0cnVjdHVyZSBmb3IgT3BlbiBSZXNlYXJjaDwvYXdhcmRUaXRsZT4KICAgIDwvZnVuZGluZ1JlZmVyZW5jZT4KICA8L2Z1bmRpbmdSZWZlcmVuY2VzPgo8L3Jlc291cmNlPgo=","minted":"2016-09-24T20:26:53Z","updated":"2017-02-06T14:24:31Z","doi":"10.5438/6423"}]}}
34
+
35
+ '
36
+ http_version:
37
+ recorded_at: Fri, 12 May 2017 10:02:42 GMT
38
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://search.datacite.org/api?fl=doi,xml,media,minted,updated&q=doi:10.5281/zenodo.1239&wt=json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
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
+ Access-Control-Allow-Methods:
20
+ - GET, POST, OPTIONS
21
+ Access-Control-Allow-Origin:
22
+ - "*"
23
+ Content-Type:
24
+ - application/json;charset=UTF-8
25
+ Date:
26
+ - Fri, 12 May 2017 10:05:17 GMT
27
+ Server:
28
+ - openresty/1.11.2.2
29
+ Content-Length:
30
+ - '3143'
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: UTF-8
35
+ string: '{"responseHeader":{"status":0,"QTime":0},"response":{"numFound":1,"start":0,"docs":[{"xml":"PHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtMyIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtMyBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC0zL21ldGFkYXRhLnhzZCI+CiAgPGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuNTI4MS9aRU5PRE8uMTIzOTwvaWRlbnRpZmllcj4KICA8Y3JlYXRvcnM+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPkphaG4sIE5hamtvPC9jcmVhdG9yTmFtZT4KICAgIDwvY3JlYXRvcj4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+RmVubmVyLCBNYXJ0aW48L2NyZWF0b3JOYW1lPgogICAgPC9jcmVhdG9yPgogICAgPGNyZWF0b3I+CiAgICAgIDxjcmVhdG9yTmFtZT5EaW1pdHJvcG91bG9zLCBIYXJyeTwvY3JlYXRvck5hbWU+CiAgICA8L2NyZWF0b3I+CiAgICA8Y3JlYXRvcj4KICAgICAgPGNyZWF0b3JOYW1lPlNjaGlycndhZ2VuLCBKb2NoZW48L2NyZWF0b3JOYW1lPgogICAgPC9jcmVhdG9yPgogIDwvY3JlYXRvcnM+CiAgPHRpdGxlcz4KICAgIDx0aXRsZT5QdWJsaWNhdGlvbiBGUDcgRnVuZGluZyBBY2tub3dsZWRnbWVudCAtIFBMT1MgT3BlbkFJUkU8L3RpdGxlPgogIDwvdGl0bGVzPgogIDxwdWJsaXNoZXI+T3BlbkFJUkUgT3JwaGFuIFJlY29yZCBSZXBvc2l0b3J5PC9wdWJsaXNoZXI+CiAgPHB1YmxpY2F0aW9uWWVhcj4yMDEzPC9wdWJsaWNhdGlvblllYXI+CiAgPHN1YmplY3RzPgogICAgPHN1YmplY3Q+QXJ0aWNsZS1MZXZlbCBNZXRyaWNzPC9zdWJqZWN0PgogICAgPHN1YmplY3Q+RGF0YSBtaW5pbmc8L3N1YmplY3Q+CiAgICA8c3ViamVjdD5TdGF0aXN0aWNhbCBDb21wdXRpbmcgTGFuZ3VhZ2UgUjwvc3ViamVjdD4KICAgIDxzdWJqZWN0PmZ1bmRlZCByZXNlYXJjaCBwdWJsaWNhdGlvbnM8L3N1YmplY3Q+CiAgPC9zdWJqZWN0cz4KICA8Y29udHJpYnV0b3JzPgogICAgPGNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yVHlwZT0iRnVuZGVyIj4KICAgICAgPGNvbnRyaWJ1dG9yTmFtZT5FdXJvcGVhbiBDb21taXNzaW9uPC9jb250cmlidXRvck5hbWU+CiAgICAgIDxuYW1lSWRlbnRpZmllciBuYW1lSWRlbnRpZmllclNjaGVtZT0iaW5mbyI+aW5mbzpldS1yZXBvL2dyYW50QWdyZWVtZW50L0VDL0ZQNy8yNDY2ODY8L25hbWVJZGVudGlmaWVyPgogICAgPC9jb250cmlidXRvcj4KICA8L2NvbnRyaWJ1dG9ycz4KICA8ZGF0ZXM+CiAgICA8ZGF0ZSBkYXRlVHlwZT0iSXNzdWVkIj4yMDEzLTA0LTAzPC9kYXRlPgogICAgPGRhdGUgZGF0ZVR5cGU9Iklzc3VlZCI+MjAxMzwvZGF0ZT4KICA8L2RhdGVzPgogIDxsYW5ndWFnZT5lbmc8L2xhbmd1YWdlPgogIDxyZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlR2VuZXJhbD0iRGF0YXNldCIvPgogIDxhbHRlcm5hdGVJZGVudGlmaWVycz4KICAgIDxhbHRlcm5hdGVJZGVudGlmaWVyIGFsdGVybmF0ZUlkZW50aWZpZXJUeXBlPSJVUkwiPmh0dHA6Ly96ZW5vZG8ub3JnL3JlY29yZC8xMjM5PC9hbHRlcm5hdGVJZGVudGlmaWVyPgogIDwvYWx0ZXJuYXRlSWRlbnRpZmllcnM+CiAgPHJpZ2h0c0xpc3Q+CiAgICA8cmlnaHRzIHJpZ2h0c1VSST0iaW5mbzpldS1yZXBvL3NlbWFudGljcy9vcGVuQWNjZXNzIj5PcGVuIEFjY2VzczwvcmlnaHRzPgogICAgPHJpZ2h0cyByaWdodHNVUkk9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8iPkNyZWF0aXZlIENvbW1vbnMgWmVybyAxLjAgVW5pdmVyc2FsPC9yaWdodHM+CiAgPC9yaWdodHNMaXN0PgogIDxkZXNjcmlwdGlvbnM+CiAgICA8ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJBYnN0cmFjdCI+VGhlIGRhdGFzZXQgY29udGFpbnMgYSBzYW1wbGUgb2YgbWV0YWRhdGEgZGVzY3JpYmluZyBwYXBlcnMgcHVibGlzaGVkIGluIFBMT1MgYW5kIHRoZWlyIGlkZW50aWZpZWQgZ3JhbnQgYWdyZWVtZW50IG51bWJlciBvZiBGUDcgcHJvamVjdHMuIEEgc2Vjb25kIGZpbGUgc2hvd3MgdGhlIGZyZXF1ZW5jeSBvZiBGUDcgZ3JhbnRzLiBUaGUgc2FtcGxlIHdhcyBjcmVhdGVkIGluIEp1bHkgMjAxMi48L2Rlc2NyaXB0aW9uPgogIDwvZGVzY3JpcHRpb25zPgo8L3Jlc291cmNlPgoNCg0K","minted":"2013-04-03T09:52:22Z","updated":"2014-04-15T08:13:50Z","doi":"10.5281/ZENODO.1239"}]}}
36
+
37
+ '
38
+ http_version:
39
+ recorded_at: Fri, 12 May 2017 10:05:17 GMT
40
+ recorded_with: VCR 3.0.3
@@ -29,13 +29,16 @@ describe Bolognese::Metadata, vcr: true do
29
29
  expect(subject.is_part_of).to eq("type"=>"Periodical", "title"=>"eLife", "issn"=>"2050-084X")
30
30
  expect(subject.references.count).to eq(25)
31
31
  expect(subject.references[19]).to eq("id"=>"https://doi.org/10.5061/dryad.b835k", "type"=>"CreativeWork")
32
- expect(subject.funder).to eq([{"name"=>"SystemsX"},
33
- {"id"=>"https://doi.org/10.13039/501100003043",
34
- "name"=>"EMBO"},
35
- {"id"=>"https://doi.org/10.13039/501100001711",
36
- "name"=>"Swiss National Science Foundation"},
37
- {"id"=>"https://doi.org/10.13039/501100006390",
38
- "name"=>"University of Lausanne"}])
32
+ expect(subject.funding).to eq([{"type"=>"Organization", "name"=>"SystemsX"},
33
+ {"type"=>"Organization",
34
+ "id"=>"https://doi.org/10.13039/501100003043",
35
+ "name"=>"EMBO"},
36
+ {"type"=>"Organization",
37
+ "id"=>"https://doi.org/10.13039/501100001711",
38
+ "name"=>"Swiss National Science Foundation"},
39
+ {"type"=>"Organization",
40
+ "id"=>"https://doi.org/10.13039/501100006390",
41
+ "name"=>"University of Lausanne"}])
39
42
  expect(subject.provider).to eq("Crossref")
40
43
  end
41
44
 
@@ -124,7 +124,7 @@ describe Bolognese::Metadata, vcr: true do
124
124
  expect(subject.description["text"]).to start_with("The dataset contains a sample of metadata describing papers")
125
125
  expect(subject.date_published).to eq("2013-04-03")
126
126
  expect(subject.publisher).to eq("OpenAIRE Orphan Record Repository")
127
- expect(subject.funder).to eq("name" => "European Commission")
127
+ expect(subject.funding).to eq("type"=>"Award", "identifier"=>"246686", "funder"=>{"type"=>"Organization", "name"=>"European Commission"})
128
128
  expect(subject.provider).to eq("DataCite")
129
129
  expect(subject.schema_version).to eq("http://datacite.org/schema/kernel-3")
130
130
  end
@@ -181,7 +181,11 @@ describe Bolognese::Metadata, vcr: true do
181
181
  expect(subject.description["text"]).to start_with("Five years ago, a global infrastructure")
182
182
  expect(subject.date_published).to eq("2015")
183
183
  expect(subject.publisher).to eq("DataCite")
184
- expect(subject.funder).to eq("identifier"=>"https://doi.org/10.13039/501100000780", "name"=>"European Commission")
184
+ expect(subject.funding).to eq("type"=>"Award",
185
+ "funder" => {"type"=>"Organization", "id"=>"https://doi.org/10.13039/501100000780", "name"=>"European Commission"},
186
+ "identifier" => "654039",
187
+ "name" => "THOR – Technical and Human Infrastructure for Open Research",
188
+ "url" => "http://cordis.europa.eu/project/rcn/194927_en.html")
185
189
  expect(subject.provider).to eq("DataCite")
186
190
  expect(subject.schema_version).to eq("http://datacite.org/schema/kernel-4")
187
191
  end
@@ -7,6 +7,16 @@ describe Bolognese::Metadata, vcr: true do
7
7
  subject = Bolognese::Metadata.new(input: input, from: "crossref")
8
8
  json = JSON.parse(subject.schema_org)
9
9
  expect(json["@id"]).to eq("https://doi.org/10.7554/elife.01567")
10
+ expect(json["funding"]).to eq([{"name"=>"SystemsX", "@type"=>"Organization"},
11
+ {"name"=>"EMBO",
12
+ "@type"=>"Organization",
13
+ "@id"=>"https://doi.org/10.13039/501100003043"},
14
+ {"name"=>"Swiss National Science Foundation",
15
+ "@type"=>"Organization",
16
+ "@id"=>"https://doi.org/10.13039/501100001711"},
17
+ {"name"=>"University of Lausanne",
18
+ "@type"=>"Organization",
19
+ "@id"=>"https://doi.org/10.13039/501100006390"}])
10
20
  end
11
21
 
12
22
  it "maremma schema.org JSON" do
@@ -64,5 +74,27 @@ describe Bolognese::Metadata, vcr: true do
64
74
  {"name"=>"University Of California, Santa Barbara", "@type"=>"Organization"}])
65
75
  expect(json["version"]).to eq("2.0.0")
66
76
  end
77
+
78
+ it "Funding" do
79
+ input = "https://doi.org/10.5438/6423"
80
+ subject = Bolognese::Metadata.new(input: input, from: "datacite")
81
+ json = JSON.parse(subject.schema_org)
82
+ expect(json["@id"]).to eq("https://doi.org/10.5438/6423")
83
+ expect(json["funding"]).to eq("@type" => "Award",
84
+ "funder" => {"type"=>"Organization", "id"=>"https://doi.org/10.13039/501100000780", "name"=>"European Commission"},
85
+ "identifier" => "654039",
86
+ "name" => "THOR – Technical and Human Infrastructure for Open Research",
87
+ "url" => "http://cordis.europa.eu/project/rcn/194927_en.html")
88
+ end
89
+
90
+ it "Funding OpenAIRE" do
91
+ input = "https://doi.org/10.5281/ZENODO.1239"
92
+ subject = Bolognese::Metadata.new(input: input, from: "datacite")
93
+ json = JSON.parse(subject.schema_org)
94
+ expect(json["@id"]).to eq("https://doi.org/10.5281/zenodo.1239")
95
+ expect(json["funding"]).to eq("@type" => "Award",
96
+ "funder" => {"type"=>"Organization", "name"=>"European Commission"},
97
+ "identifier" => "246686")
98
+ end
67
99
  end
68
100
  end
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: 0.9.17
4
+ version: 0.9.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-08 00:00:00.000000000 Z
11
+ date: 2017-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: maremma
@@ -431,6 +431,7 @@ extra_rdoc_files:
431
431
  files:
432
432
  - ".gitignore"
433
433
  - ".travis.yml"
434
+ - CITATION
434
435
  - Gemfile
435
436
  - Gemfile.lock
436
437
  - LICENSE.md
@@ -720,6 +721,8 @@ files:
720
721
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/journal_article.yml
721
722
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/maremma.yml
722
723
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/with_pages.yml
724
+ - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding.yml
725
+ - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding_OpenAIRE.yml
723
726
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON.yml
724
727
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_IsSupplementTo.yml
725
728
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_isReferencedBy.yml