cirneco 0.9.12 → 0.9.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +124 -49
- data/cirneco.gemspec +5 -4
- data/lib/cirneco/api.rb +8 -8
- data/lib/cirneco/base.rb +2 -2
- data/lib/cirneco/cli.rb +1 -1
- data/lib/cirneco/utils.rb +48 -95
- data/lib/cirneco/version.rb +1 -1
- data/lib/cirneco/work.rb +8 -203
- data/spec/api_spec.rb +16 -28
- data/spec/doi_spec.rb +9 -11
- data/spec/fixtures/cool-dois-minted/index.html +189 -234
- data/spec/fixtures/cool-dois-minted.html.md +1 -1
- data/spec/fixtures/cool-dois.html.md +2 -2
- data/spec/fixtures/index-minted.html +1 -1
- data/spec/fixtures/index.html +50 -1
- data/spec/fixtures/index.html.erb +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml +20 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/jats/should_generate_jats_for_all_urls.yml +38 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_all_urls.yml +20 -20
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_url.yml +19 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_metadata_for_work.yml +19 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_all_urls.yml +204 -108
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_url.yml +72 -64
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_all_urls.yml +17 -291
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_post_metadata_for_work.yml +47 -82
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml +22 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml +19 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml +20 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/jats/writes_jats_for_list_of_urls.yml +38 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/hides_a_doi.yml +19 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/hides_dois_for_list_of_urls.yml +81 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_a_doi.yml +72 -64
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_dois_for_list_of_urls.yml +204 -108
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_dois_for_list_of_urls.yml +17 -291
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml +140 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml +137 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi_not_found.yml +134 -16
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/username_missing.yml +121 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml +138 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml +135 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml +137 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml +137 -17
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml +170 -27
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml +173 -28
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/media/includes_media.yml +121 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/schema/BlogPosting.yml +121 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/utils_spec.rb +28 -41
- data/spec/work_spec.rb +33 -43
- metadata +43 -19
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_url.yml +0 -174
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_a_doi.yml +0 -174
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26264768a88f4fa5359062dc47a64fd378baee79
|
4
|
+
data.tar.gz: f6a57d8575940385bd04000497800080be5f6216
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ec100120cb41af67f14bdf17c70a82e819b24ccf7897f35238336c348ae6fab1773ecb582b42375a9daecc0905d25f758677bd06c672d320c8010e3c5813ada
|
7
|
+
data.tar.gz: 120c30769c64f9f173e3d1a9d2239c17c2e288cd17f83986c85d501fa288d3c35945101b76f4d1f874d7d8ace745acc54c6f09dca76ce8ef48e0bd4bcbbf59d4
|
data/Gemfile.lock
CHANGED
@@ -1,46 +1,71 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cirneco (0.9.
|
5
|
-
activesupport (
|
4
|
+
cirneco (0.9.13)
|
5
|
+
activesupport (>= 4.2.5, < 6)
|
6
6
|
base32-crockford-checksum (~> 0.2.2)
|
7
7
|
bergamasco (~> 0.3)
|
8
|
+
bolognese (~> 0.9.32)
|
8
9
|
builder (~> 3.2, >= 3.2.2)
|
9
10
|
dotenv (~> 2.1, >= 2.1.1)
|
10
|
-
maremma (~> 3.
|
11
|
+
maremma (~> 3.5, >= 3.5.7)
|
11
12
|
nokogiri (~> 1.6, >= 1.6.8)
|
12
13
|
thor (~> 0.19)
|
13
14
|
|
14
15
|
GEM
|
15
16
|
remote: https://rubygems.org/
|
16
17
|
specs:
|
17
|
-
activesupport (
|
18
|
+
activesupport (5.1.2)
|
19
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
20
|
i18n (~> 0.7)
|
19
|
-
json (~> 1.7, >= 1.7.7)
|
20
21
|
minitest (~> 5.1)
|
21
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
22
22
|
tzinfo (~> 1.1)
|
23
|
-
addressable (2.5.
|
23
|
+
addressable (2.5.1)
|
24
24
|
public_suffix (~> 2.0, >= 2.0.2)
|
25
25
|
base32-crockford-checksum (0.2.3)
|
26
|
-
|
27
|
-
|
26
|
+
benchmark_methods (0.7)
|
27
|
+
bergamasco (0.3.15)
|
28
|
+
activesupport (>= 4.2.5, < 6)
|
28
29
|
addressable (>= 2.3.6)
|
29
30
|
builder (~> 3.2, >= 3.2.2)
|
30
31
|
loofah (~> 2.0, >= 2.0.3)
|
31
|
-
multi_json (~> 1.
|
32
|
-
nokogiri (~> 1.6.
|
33
|
-
oj (~> 2.
|
32
|
+
multi_json (~> 1.12)
|
33
|
+
nokogiri (~> 1.6, >= 1.6.8)
|
34
|
+
oj (~> 2.18, >= 2.18.1)
|
34
35
|
pandoc-ruby (~> 2.0, >= 2.0.0)
|
35
36
|
safe_yaml (~> 1.0, >= 1.0.4)
|
37
|
+
bibtex-ruby (4.4.4)
|
38
|
+
latex-decode (~> 0.0)
|
39
|
+
bolognese (0.9.32)
|
40
|
+
activesupport (>= 4.2.5, < 6)
|
41
|
+
benchmark_methods (~> 0.7)
|
42
|
+
bibtex-ruby (~> 4.1)
|
43
|
+
builder (~> 3.2, >= 3.2.2)
|
44
|
+
colorize (~> 0.8.1)
|
45
|
+
gender_detector (~> 0.1.2)
|
46
|
+
json-ld (~> 2.1, >= 2.1.2)
|
47
|
+
jsonlint (~> 0.2.0)
|
48
|
+
loofah (~> 2.0, >= 2.0.3)
|
49
|
+
maremma (~> 3.5, >= 3.5.7)
|
50
|
+
namae (~> 0.11.3)
|
51
|
+
nokogiri (~> 1.6, >= 1.6.8)
|
52
|
+
postrank-uri (~> 1.0, >= 1.0.18)
|
53
|
+
rdf-rdfxml (~> 2.0)
|
54
|
+
rdf-turtle (~> 2.2)
|
55
|
+
thor (~> 0.19)
|
36
56
|
builder (3.2.3)
|
37
|
-
codeclimate-test-reporter (1.0.
|
57
|
+
codeclimate-test-reporter (1.0.7)
|
38
58
|
simplecov
|
59
|
+
colorize (0.8.1)
|
60
|
+
concurrent-ruby (1.0.5)
|
39
61
|
crack (0.4.3)
|
40
62
|
safe_yaml (~> 1.0.0)
|
41
63
|
diff-lcs (1.3)
|
42
64
|
docile (1.1.5)
|
43
|
-
dotenv (2.2.
|
65
|
+
dotenv (2.2.1)
|
66
|
+
ebnf (1.1.1)
|
67
|
+
rdf (~> 2.2)
|
68
|
+
sxp (~> 1.0)
|
44
69
|
excon (0.45.4)
|
45
70
|
faraday (0.9.2)
|
46
71
|
multipart-post (>= 1.2, < 3)
|
@@ -48,63 +73,113 @@ GEM
|
|
48
73
|
faraday
|
49
74
|
faraday_middleware (0.10.1)
|
50
75
|
faraday (>= 0.7.4, < 1.0)
|
51
|
-
|
52
|
-
|
53
|
-
|
76
|
+
gender_detector (0.1.2)
|
77
|
+
unicode_utils (>= 1.3.0)
|
78
|
+
haml (5.0.1)
|
79
|
+
temple (>= 0.8.0)
|
80
|
+
tilt
|
81
|
+
hamster (3.0.0)
|
82
|
+
concurrent-ruby (~> 1.0)
|
83
|
+
hashdiff (0.3.4)
|
84
|
+
htmlentities (4.3.4)
|
85
|
+
i18n (0.8.6)
|
86
|
+
json (2.1.0)
|
87
|
+
json-ld (2.1.5)
|
88
|
+
multi_json (~> 1.12)
|
89
|
+
rdf (~> 2.2)
|
90
|
+
jsonlint (0.2.0)
|
91
|
+
oj (~> 2)
|
92
|
+
trollop (~> 2)
|
93
|
+
latex-decode (0.2.2)
|
94
|
+
unicode (~> 0.4)
|
95
|
+
link_header (0.0.8)
|
54
96
|
loofah (2.0.3)
|
55
97
|
nokogiri (>= 1.5.9)
|
56
|
-
maremma (3.
|
57
|
-
activesupport (
|
58
|
-
addressable (
|
98
|
+
maremma (3.5.8)
|
99
|
+
activesupport (>= 4.2.5)
|
100
|
+
addressable (>= 2.3.6)
|
59
101
|
builder (~> 3.2, >= 3.2.2)
|
60
102
|
excon (~> 0.45.0)
|
61
103
|
faraday (~> 0.9.2)
|
62
104
|
faraday-encoding (~> 0.0.1)
|
63
105
|
faraday_middleware (~> 0.10.0)
|
64
|
-
multi_json (~> 1.
|
65
|
-
nokogiri (~> 1.6.
|
66
|
-
oj (~> 2.
|
106
|
+
multi_json (~> 1.12)
|
107
|
+
nokogiri (~> 1.6, >= 1.6.8)
|
108
|
+
oj (~> 2.18, >= 2.18.1)
|
67
109
|
mini_portile2 (2.1.0)
|
68
|
-
minitest (5.10.
|
69
|
-
multi_json (1.
|
110
|
+
minitest (5.10.3)
|
111
|
+
multi_json (1.12.1)
|
70
112
|
multipart-post (2.0.0)
|
71
|
-
|
113
|
+
namae (0.11.3)
|
114
|
+
nokogiri (1.7.2)
|
72
115
|
mini_portile2 (~> 2.1.0)
|
73
|
-
oj (2.
|
116
|
+
oj (2.18.5)
|
74
117
|
pandoc-ruby (2.0.1)
|
118
|
+
postrank-uri (1.0.22)
|
119
|
+
addressable (>= 2.3.0, < 2.6)
|
120
|
+
nokogiri (>= 1.6.1, < 1.8)
|
121
|
+
public_suffix (>= 2.0.0, < 2.1)
|
75
122
|
public_suffix (2.0.5)
|
76
|
-
rack (2.0.
|
77
|
-
rack-test (0.
|
78
|
-
rack (>= 1.0)
|
123
|
+
rack (2.0.3)
|
124
|
+
rack-test (0.7.0)
|
125
|
+
rack (>= 1.0, < 3)
|
79
126
|
rake (12.0.0)
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
127
|
+
rdf (2.2.6)
|
128
|
+
hamster (~> 3.0)
|
129
|
+
link_header (~> 0.0, >= 0.0.8)
|
130
|
+
rdf-aggregate-repo (2.2.0)
|
131
|
+
rdf (~> 2.0)
|
132
|
+
rdf-rdfa (2.2.2)
|
133
|
+
haml (~> 5.0)
|
134
|
+
htmlentities (~> 4.3)
|
135
|
+
rdf (~> 2.2)
|
136
|
+
rdf-aggregate-repo (~> 2.2)
|
137
|
+
rdf-xsd (~> 2.1)
|
138
|
+
rdf-rdfxml (2.0.0)
|
139
|
+
htmlentities (~> 4.3)
|
140
|
+
rdf (~> 2.0)
|
141
|
+
rdf-rdfa (~> 2.0)
|
142
|
+
rdf-xsd (~> 2.0)
|
143
|
+
rdf-turtle (2.2.0)
|
144
|
+
ebnf (~> 1.1)
|
145
|
+
rdf (~> 2.2)
|
146
|
+
rdf-xsd (2.2.0)
|
147
|
+
rdf (~> 2.1)
|
148
|
+
rspec (3.6.0)
|
149
|
+
rspec-core (~> 3.6.0)
|
150
|
+
rspec-expectations (~> 3.6.0)
|
151
|
+
rspec-mocks (~> 3.6.0)
|
152
|
+
rspec-core (3.6.0)
|
153
|
+
rspec-support (~> 3.6.0)
|
154
|
+
rspec-expectations (3.6.0)
|
87
155
|
diff-lcs (>= 1.2.0, < 2.0)
|
88
|
-
rspec-support (~> 3.
|
89
|
-
rspec-mocks (3.
|
156
|
+
rspec-support (~> 3.6.0)
|
157
|
+
rspec-mocks (3.6.0)
|
90
158
|
diff-lcs (>= 1.2.0, < 2.0)
|
91
|
-
rspec-support (~> 3.
|
92
|
-
rspec-support (3.
|
159
|
+
rspec-support (~> 3.6.0)
|
160
|
+
rspec-support (3.6.0)
|
93
161
|
rspec-xsd (0.1.0)
|
94
162
|
nokogiri (~> 1.6)
|
95
163
|
rspec (~> 3)
|
96
164
|
safe_yaml (1.0.4)
|
97
|
-
simplecov (0.
|
165
|
+
simplecov (0.14.1)
|
98
166
|
docile (~> 1.1.0)
|
99
167
|
json (>= 1.8, < 3)
|
100
168
|
simplecov-html (~> 0.10.0)
|
101
|
-
simplecov-html (0.10.
|
169
|
+
simplecov-html (0.10.1)
|
170
|
+
sxp (1.0.0)
|
171
|
+
rdf (~> 2.0)
|
172
|
+
temple (0.8.0)
|
102
173
|
thor (0.19.4)
|
103
|
-
thread_safe (0.3.
|
104
|
-
|
174
|
+
thread_safe (0.3.6)
|
175
|
+
tilt (2.0.7)
|
176
|
+
trollop (2.1.2)
|
177
|
+
tzinfo (1.2.3)
|
105
178
|
thread_safe (~> 0.1)
|
179
|
+
unicode (0.4.4.4)
|
180
|
+
unicode_utils (1.4.0)
|
106
181
|
vcr (3.0.3)
|
107
|
-
webmock (
|
182
|
+
webmock (3.0.1)
|
108
183
|
addressable (>= 2.3.6)
|
109
184
|
crack (>= 0.3.2)
|
110
185
|
hashdiff
|
@@ -120,9 +195,9 @@ DEPENDENCIES
|
|
120
195
|
rake (~> 12.0)
|
121
196
|
rspec (~> 3.4)
|
122
197
|
rspec-xsd (~> 0.1.0)
|
123
|
-
simplecov (~> 0.
|
198
|
+
simplecov (~> 0.14.1)
|
124
199
|
vcr (~> 3.0, >= 3.0.3)
|
125
|
-
webmock (~>
|
200
|
+
webmock (~> 3.0, >= 3.0.1)
|
126
201
|
|
127
202
|
BUNDLED WITH
|
128
|
-
1.
|
203
|
+
1.15.3
|
data/cirneco.gemspec
CHANGED
@@ -15,12 +15,13 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
17
|
# Declary dependencies here, rather than in the Gemfile
|
18
|
-
s.add_dependency 'maremma', '~> 3.
|
18
|
+
s.add_dependency 'maremma', '~> 3.5', '>= 3.5.7'
|
19
19
|
s.add_dependency 'bergamasco', '~> 0.3'
|
20
|
+
s.add_dependency 'bolognese', '~> 0.9.32'
|
20
21
|
s.add_dependency 'base32-crockford-checksum', '~> 0.2.2'
|
21
22
|
s.add_dependency 'nokogiri', '~> 1.6', '>= 1.6.8'
|
22
23
|
s.add_dependency 'builder', '~> 3.2', '>= 3.2.2'
|
23
|
-
s.add_dependency 'activesupport', '
|
24
|
+
s.add_dependency 'activesupport', '>= 4.2.5', '< 6'
|
24
25
|
s.add_dependency 'dotenv', '~> 2.1', '>= 2.1.1'
|
25
26
|
s.add_dependency 'thor', '~> 0.19'
|
26
27
|
s.add_development_dependency 'bundler', '~> 1.0'
|
@@ -29,9 +30,9 @@ Gem::Specification.new do |s|
|
|
29
30
|
s.add_development_dependency 'rake', '~> 12.0'
|
30
31
|
s.add_development_dependency 'rack-test', '~> 0'
|
31
32
|
s.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.3'
|
32
|
-
s.add_development_dependency 'webmock', '~>
|
33
|
+
s.add_development_dependency 'webmock', '~> 3.0', '>= 3.0.1'
|
33
34
|
s.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.0'
|
34
|
-
s.add_development_dependency 'simplecov', '~> 0.
|
35
|
+
s.add_development_dependency 'simplecov', '~> 0.14.1'
|
35
36
|
|
36
37
|
s.require_paths = ["lib"]
|
37
38
|
s.files = `git ls-files`.split($/)
|
data/lib/cirneco/api.rb
CHANGED
@@ -6,7 +6,7 @@ module Cirneco
|
|
6
6
|
def post_metadata(data, options={})
|
7
7
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
8
8
|
|
9
|
-
mds_url = options[:sandbox] ? 'https://mds
|
9
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
10
10
|
|
11
11
|
url = "#{mds_url}/metadata"
|
12
12
|
Maremma.post(url, content_type: 'application/xml;charset=UTF-8', data: data, username: options[:username], password: options[:password])
|
@@ -15,7 +15,7 @@ module Cirneco
|
|
15
15
|
def get_metadata(doi, options={})
|
16
16
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
17
17
|
|
18
|
-
mds_url = options[:sandbox] ? 'https://mds
|
18
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
19
19
|
|
20
20
|
url = "#{mds_url}/metadata/#{doi}"
|
21
21
|
Maremma.get(url, accept: 'application/xml', username: options[:username], password: options[:password], raw: true)
|
@@ -24,7 +24,7 @@ module Cirneco
|
|
24
24
|
def delete_metadata(doi, options={})
|
25
25
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
26
26
|
|
27
|
-
mds_url = options[:sandbox] ? 'https://mds
|
27
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
28
28
|
|
29
29
|
url = "#{mds_url}/metadata/#{doi}"
|
30
30
|
Maremma.delete(url, username: options[:username], password: options[:password])
|
@@ -35,7 +35,7 @@ module Cirneco
|
|
35
35
|
|
36
36
|
payload = "doi=#{doi}\nurl=#{options[:url]}"
|
37
37
|
|
38
|
-
mds_url = options[:sandbox] ? 'https://mds
|
38
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
39
39
|
|
40
40
|
url = "#{mds_url}/doi/#{doi}"
|
41
41
|
Maremma.put(url, content_type: 'text/plain;charset=UTF-8', data: payload, username: options[:username], password: options[:password])
|
@@ -44,7 +44,7 @@ module Cirneco
|
|
44
44
|
def get_doi(doi, options={})
|
45
45
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
46
46
|
|
47
|
-
mds_url = options[:sandbox] ? 'https://mds
|
47
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
48
48
|
|
49
49
|
url = "#{mds_url}/doi/#{doi}"
|
50
50
|
Maremma.get(url, username: options[:username], password: options[:password])
|
@@ -53,7 +53,7 @@ module Cirneco
|
|
53
53
|
def get_dois(options={})
|
54
54
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
55
55
|
|
56
|
-
mds_url = options[:sandbox] ? 'https://mds
|
56
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
57
57
|
|
58
58
|
url = "#{mds_url}/doi"
|
59
59
|
response = Maremma.get(url, username: options[:username], password: options[:password])
|
@@ -66,7 +66,7 @@ module Cirneco
|
|
66
66
|
|
67
67
|
payload = options[:raw] ? options[:media] : options[:media].map { |m| "#{m[:mime_type]}=#{m[:url]}" }.join("\n")
|
68
68
|
|
69
|
-
mds_url = options[:sandbox] ? 'https://mds
|
69
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
70
70
|
|
71
71
|
url = "#{mds_url}/media/#{doi}"
|
72
72
|
Maremma.post(url, content_type: 'text/plain;charset=UTF-8', data: payload, username: options[:username], password: options[:password])
|
@@ -75,7 +75,7 @@ module Cirneco
|
|
75
75
|
def get_media(doi, options={})
|
76
76
|
return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
|
77
77
|
|
78
|
-
mds_url = options[:sandbox] ? 'https://mds
|
78
|
+
mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
|
79
79
|
|
80
80
|
url = "#{mds_url}/media/#{doi}"
|
81
81
|
response = Maremma.get(url, accept: 'application/xml', username: options[:username], password: options[:password])
|
data/lib/cirneco/base.rb
CHANGED
@@ -4,7 +4,7 @@ module Cirneco
|
|
4
4
|
env_file = File.expand_path("../../../.env", __FILE__)
|
5
5
|
if File.exist?(env_file)
|
6
6
|
require 'dotenv'
|
7
|
-
Dotenv.
|
7
|
+
Dotenv.overload env_file
|
8
8
|
end
|
9
9
|
|
10
10
|
# load ENV variables from container environment if json file exists
|
@@ -16,6 +16,6 @@ module Cirneco
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# default values for some ENV variables
|
19
|
-
ENV['MDS_URL'] ||= "https://mds
|
19
|
+
ENV['MDS_URL'] ||= "https://mds.test.datacite.org"
|
20
20
|
end
|
21
21
|
end
|
data/lib/cirneco/cli.rb
CHANGED
data/lib/cirneco/utils.rb
CHANGED
@@ -107,13 +107,14 @@ module Cirneco
|
|
107
107
|
def mint_doi_for_url(url, options={})
|
108
108
|
filename, build_path, source_path = filepath_from_url(url, options)
|
109
109
|
|
110
|
-
|
111
|
-
|
110
|
+
json = get_json_ld_from_work(build_path, options)
|
111
|
+
metadata = JSON.parse(json)
|
112
|
+
return "DOI #{metadata["doi"]} not changed for #{filename}" if metadata["doi"] && metadata["dateModified"] == metadata["datePublished"] && options[:force].blank?
|
112
113
|
|
113
|
-
|
114
|
-
|
114
|
+
prefix = options[:prefix] || ENV['PREFIX']
|
115
|
+
doi = encode_doi(prefix, number: metadata["alternateName"]) if metadata["doi"].blank?
|
115
116
|
|
116
|
-
new_metadata = Bergamasco::Markdown.update_file(source_path, "doi" =>
|
117
|
+
new_metadata = Bergamasco::Markdown.update_file(source_path, "doi" => doi, "date" => metadata["dateModified"])
|
117
118
|
"DOI #{new_metadata["doi"]} minted for #{filename}"
|
118
119
|
end
|
119
120
|
|
@@ -121,14 +122,22 @@ module Cirneco
|
|
121
122
|
def mint_and_hide_doi_for_url(url, options={})
|
122
123
|
filename, build_path, source_path = filepath_from_url(url, options)
|
123
124
|
|
124
|
-
|
125
|
-
|
125
|
+
json = get_json_ld_from_work(build_path, options)
|
126
|
+
metadata = JSON.parse(json)
|
127
|
+
metadata["doi"] = doi_from_url(metadata["@id"])
|
128
|
+
return "DOI #{metadata["doi"]} not changed for #{filename}" if metadata["doi"] && metadata["dateModified"] == metadata["datePublished"] && options[:force].blank?
|
129
|
+
|
130
|
+
prefix = options[:prefix] || ENV['PREFIX']
|
131
|
+
metadata["doi"] = encode_doi(prefix, number: metadata["alternateName"]) if metadata["doi"].blank?
|
132
|
+
|
133
|
+
response = post_metadata_for_work(json, options.merge(doi: metadata["doi"]))
|
134
|
+
return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors'].present?
|
126
135
|
|
127
|
-
response =
|
136
|
+
response = hide_metadata_for_work(json, options.merge(doi: metadata["doi"]))
|
128
137
|
return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors'].present?
|
129
138
|
|
130
|
-
new_metadata = Bergamasco::Markdown.update_file(source_path, "
|
131
|
-
"DOI #{
|
139
|
+
new_metadata = Bergamasco::Markdown.update_file(source_path, "published" => false)
|
140
|
+
"DOI #{metadata["doi"]} minted and hidden for #{filename}"
|
132
141
|
end
|
133
142
|
|
134
143
|
# fetch schema.org metadata in JSON-LD format to mint DOI
|
@@ -136,11 +145,13 @@ module Cirneco
|
|
136
145
|
def hide_doi_for_url(url, options={})
|
137
146
|
filename, build_path, source_path = filepath_from_url(url, options)
|
138
147
|
|
139
|
-
|
148
|
+
json = get_json_ld_from_work(build_path, options)
|
149
|
+
metadata = JSON.parse(json)
|
150
|
+
metadata["doi"] = doi_from_url(metadata["@id"])
|
140
151
|
return "No DOI for #{filename}" unless metadata["doi"]
|
141
|
-
return "DOI #{metadata["doi"]} not active for #{filename}" unless metadata["
|
152
|
+
return "DOI #{metadata["doi"]} not active for #{filename}" unless metadata["datePublished"] || options[:force].present?
|
142
153
|
|
143
|
-
response = hide_metadata_for_work(
|
154
|
+
response = hide_metadata_for_work(json, options)
|
144
155
|
return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors'].present?
|
145
156
|
|
146
157
|
new_metadata = Bergamasco::Markdown.update_file(source_path, "published" => false)
|
@@ -177,111 +188,52 @@ module Cirneco
|
|
177
188
|
metadata.fetch("hasPart", []).map { |p| p["@id"] } + [url]
|
178
189
|
end
|
179
190
|
|
180
|
-
def
|
191
|
+
def get_json_ld_from_work(url, options={})
|
181
192
|
doc = Nokogiri::HTML(open(url))
|
182
193
|
json = doc.at_xpath("//script[@type='application/ld+json']")
|
183
194
|
return { "error" => "Error: no schema.org metadata found" } unless json.present?
|
184
195
|
|
185
|
-
|
186
|
-
return { "error" => "Error: blog post not published" } if metadata["published"].to_s == "false"
|
187
|
-
return { "error" => "Error: required metadata missing" } unless ["name", "author", "publisher", "datePublished", "@type"].all? { |k| metadata.key? k }
|
188
|
-
|
189
|
-
# required metadata
|
190
|
-
if /(http|https):\/\/(dx\.)?doi\.org\/(\w+)/.match(metadata["@id"])
|
191
|
-
uri = Addressable::URI.parse(metadata["@id"])
|
192
|
-
metadata["doi"] = uri.path[1..-1].upcase
|
193
|
-
end
|
194
|
-
|
195
|
-
metadata["title"] = metadata["name"]
|
196
|
-
|
197
|
-
metadata["creators"] = format_authors(metadata["author"])
|
198
|
-
|
199
|
-
metadata["publisher"] = metadata.fetch("publisher", {}).fetch("name", nil)
|
200
|
-
metadata["publication_year"] = metadata["datePublished"][0..3].to_i
|
201
|
-
|
202
|
-
resource_type_general = case metadata["@type"]
|
203
|
-
when "Dataset" then "Dataset"
|
204
|
-
when "Blog" then "Collection"
|
205
|
-
when "Code" then "Software"
|
206
|
-
else "Text"
|
207
|
-
end
|
208
|
-
|
209
|
-
metadata["resource_type"] = { value: metadata["@type"],
|
210
|
-
resource_type_general: resource_type_general }
|
211
|
-
|
212
|
-
# recommended metadata
|
213
|
-
|
214
|
-
# use alternate_identifier to generate DOI
|
215
|
-
metadata["alternate_identifier"] = metadata["alternateName"]
|
216
|
-
|
217
|
-
if metadata["description"].present?
|
218
|
-
metadata["descriptions"] = [{ value: metadata["description"], description_type: "Abstract" }]
|
219
|
-
end
|
220
|
-
|
221
|
-
# use default version 1.0
|
222
|
-
metadata["version"] ||= "1.0"
|
223
|
-
|
224
|
-
# fetch reference metadata if available
|
225
|
-
metadata["related_identifiers"] = get_related_identifiers(metadata)
|
226
|
-
|
227
|
-
if metadata["license"].present?
|
228
|
-
value = LICENSES.fetch(metadata["license_url"], nil)
|
229
|
-
metadata["rights_list"] = [{ value: value, rights_uri: metadata["license"] }] if value.present?
|
230
|
-
end
|
231
|
-
|
232
|
-
if metadata["keywords"].present?
|
233
|
-
metadata["subjects"] = Array(metadata["keywords"].split(", ")).select { |k| k != "featured" }
|
234
|
-
end
|
235
|
-
|
236
|
-
metadata["media"] = format_media(metadata)
|
237
|
-
|
238
|
-
metadata["date_created"] = metadata["dateCreated"]
|
239
|
-
metadata["date_issued"] = metadata["datePublished"]
|
240
|
-
metadata["date_updated"] = metadata["dateModified"]
|
241
|
-
|
242
|
-
metadata = metadata.extract!(*%w(doi alternate_identifier url creators title
|
243
|
-
publisher publication_year resource_type descriptions version rights_list
|
244
|
-
subjects date_issued date_created date_updated related_identifiers media))
|
196
|
+
json.text
|
245
197
|
end
|
246
198
|
|
247
|
-
def post_metadata_for_work(
|
248
|
-
|
199
|
+
def post_metadata_for_work(input, options={})
|
200
|
+
metadata = JSON.parse(input)
|
249
201
|
|
250
202
|
prefix = options[:prefix] || ENV['PREFIX']
|
251
|
-
|
203
|
+
doi = encode_doi(prefix, number: metadata["alternateName"]) if metadata["doi"].blank?
|
252
204
|
|
253
|
-
work = Cirneco::Work.new(
|
254
|
-
return work.
|
205
|
+
work = Cirneco::Work.new(input: input, doi: doi)
|
206
|
+
return work.errors if work.errors.present?
|
255
207
|
|
256
|
-
response = work.post_metadata(work.
|
208
|
+
response = work.post_metadata(work.datacite, options)
|
257
209
|
return response unless response.status == 201
|
258
210
|
|
259
|
-
response = work.put_doi(
|
211
|
+
response = work.put_doi(work.doi, options.merge(url: metadata["url"]))
|
260
212
|
return response unless response.status == 201
|
261
213
|
|
262
214
|
if work.media.present?
|
263
|
-
work.post_media(metadata
|
215
|
+
work.post_media(metadata.doi, options.merge(media: work.media))
|
264
216
|
else
|
265
217
|
response
|
266
218
|
end
|
267
219
|
end
|
268
220
|
|
269
|
-
def post_and_hide_metadata_for_work(
|
270
|
-
|
221
|
+
def post_and_hide_metadata_for_work(input, options={})
|
222
|
+
metadata = JSON.parse(input)
|
271
223
|
|
272
224
|
prefix = options[:prefix] || ENV['PREFIX']
|
273
|
-
|
225
|
+
doi = encode_doi(prefix, number: metadata["alternateName"]) if metadata["doi"].blank?
|
274
226
|
|
275
|
-
work = Cirneco::Work.new(
|
276
|
-
return work.
|
227
|
+
work = Cirneco::Work.new(input: input, doi: doi)
|
228
|
+
return work.errors if work.errors.present?
|
277
229
|
|
278
|
-
response = work.post_metadata(work.
|
230
|
+
response = work.post_metadata(work.datacite, options)
|
279
231
|
return response unless response.status == 201
|
280
232
|
|
281
|
-
response = work.put_doi(
|
233
|
+
response = work.put_doi(work.doi, options.merge(url: metadata["url"]))
|
282
234
|
return response unless response.status == 201
|
283
235
|
|
284
|
-
response = work.delete_metadata(
|
236
|
+
response = work.delete_metadata(doi, options)
|
285
237
|
return response unless response.status == 201
|
286
238
|
|
287
239
|
if work.media.present?
|
@@ -291,14 +243,15 @@ module Cirneco
|
|
291
243
|
end
|
292
244
|
end
|
293
245
|
|
294
|
-
def hide_metadata_for_work(
|
295
|
-
|
246
|
+
def hide_metadata_for_work(input, options={})
|
247
|
+
metadata = JSON.parse(input)
|
248
|
+
metadata["doi"] = doi_from_url(metadata["@id"])
|
296
249
|
|
297
250
|
prefix = options[:prefix] || ENV['PREFIX']
|
298
|
-
metadata["doi"] = encode_doi(prefix, number: metadata["
|
251
|
+
metadata["doi"] = encode_doi(prefix, number: metadata["alternateName"]) if metadata["doi"].blank?
|
299
252
|
|
300
|
-
work = Cirneco::Work.new(metadata)
|
301
|
-
return work.
|
253
|
+
work = Cirneco::Work.new(input: input, doi: metadata["doi"])
|
254
|
+
return work.errors if work.errors.present?
|
302
255
|
|
303
256
|
work.delete_metadata(metadata["doi"], options)
|
304
257
|
end
|
data/lib/cirneco/version.rb
CHANGED