cirneco 0.9.20 → 0.9.21

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +42 -42
  3. data/cirneco.gemspec +1 -1
  4. data/lib/cirneco/api.rb +9 -0
  5. data/lib/cirneco/media.rb +0 -2
  6. data/lib/cirneco/metadata.rb +24 -0
  7. data/lib/cirneco/version.rb +1 -1
  8. data/resources/kernel-4.0/samples/datacite-example-complicated-v4.1.xml +1 -1
  9. data/spec/api_spec.rb +5 -5
  10. data/spec/doi_spec.rb +4 -4
  11. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml +488 -0
  12. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml +488 -0
  13. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml +50 -0
  14. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml +54 -0
  15. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml +488 -0
  16. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml +50 -0
  17. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi_not_found.yml +48 -0
  18. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml +54 -0
  19. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml +50 -0
  20. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml +52 -0
  21. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml +50 -0
  22. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml +51 -0
  23. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml +112 -0
  24. data/spec/fixtures/vcr_cassettes/Cirneco_Work/media/includes_media.yml +20 -18
  25. data/spec/fixtures/vcr_cassettes/Cirneco_Work/schema/BlogPosting.yml +21 -19
  26. data/spec/spec_helper.rb +2 -2
  27. data/spec/utils_spec.rb +7 -7
  28. data/spec/work_spec.rb +2 -3
  29. metadata +24 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3fb078ecfae4e617adca6f7aaf9b857afe63381868c2d0a4826eb8481838c1af
4
- data.tar.gz: d3b31bb507169a3979df77ba6f8f8a7add95316b08e25f013a73dcd4a50581ca
3
+ metadata.gz: a244cdbbb1fca3cc527a2f1114afa1646d82100ac8fbcabfb765e4029ecca712
4
+ data.tar.gz: f862c16828d3809da5633aa6ba094d45b1228cdf23760da86d72be738c1f5179
5
5
  SHA512:
6
- metadata.gz: 6834e6c25f262d966538020ff0f5db221dcad6797bff1bab9f494adac257d4f8044b58055a70804a8cd5f710c7f9212614d8c11fd65672cc2d76c9b523d37837
7
- data.tar.gz: 2454097fa4fe48e6236f3564b0a5f6a191ea4909a2787b15c14f7aa2ee8b32bc98e76ffc346c2fd8637a3e1bef9e87e8e2a1b607436d8404d7ce89328ca5d888
6
+ metadata.gz: f0ff8fa02880535859594d56313720d0620c6e298fae37785c26c5d7e96191a613b88cc5cb0c6daceb742249f5857cad5caf15fb4e113987712ff145454a535c
7
+ data.tar.gz: 10ed272c36c2f079c6dff35e1b7826c1c322127248a6856f091f065ef5a58edfc1c3befce53620a55cfc378baaad788d3da50acc5e1fb4d9688977058f8de0ed
data/Gemfile.lock CHANGED
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cirneco (0.9.20)
4
+ cirneco (0.9.21)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  base32-url (~> 0.5)
7
7
  bergamasco (~> 0.3)
8
8
  bolognese (~> 0.9)
9
9
  builder (~> 3.2, >= 3.2.2)
10
10
  dotenv (~> 2.1, >= 2.1.1)
11
- maremma (~> 3.5, >= 3.5.7)
11
+ maremma (>= 4.1, < 5)
12
12
  nokogiri (~> 1.8.1)
13
13
  thor (~> 0.19)
14
14
 
15
15
  GEM
16
16
  remote: https://rubygems.org/
17
17
  specs:
18
- activesupport (5.1.4)
18
+ activesupport (5.2.1)
19
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
20
- i18n (~> 0.7)
20
+ i18n (>= 0.7, < 2)
21
21
  minitest (~> 5.1)
22
22
  tzinfo (~> 1.1)
23
23
  addressable (2.5.2)
@@ -34,9 +34,9 @@ GEM
34
34
  oj (>= 2.8.3)
35
35
  pandoc-ruby (~> 2.0, >= 2.0.0)
36
36
  safe_yaml (~> 1.0, >= 1.0.4)
37
- bibtex-ruby (4.4.5)
37
+ bibtex-ruby (4.4.7)
38
38
  latex-decode (~> 0.0)
39
- bolognese (0.9.73)
39
+ bolognese (0.13.3)
40
40
  activesupport (>= 4.2.5, < 6)
41
41
  benchmark_methods (~> 0.7)
42
42
  bibtex-ruby (~> 4.1)
@@ -47,7 +47,7 @@ GEM
47
47
  json-ld (~> 2.1, >= 2.1.2)
48
48
  jsonlint (~> 0.2.0)
49
49
  loofah (~> 2.0, >= 2.0.3)
50
- maremma (~> 3.5, >= 3.5.7)
50
+ maremma (>= 3.5.7, < 5)
51
51
  namae (~> 0.11.3)
52
52
  nokogiri (~> 1.8.1)
53
53
  oj (>= 2.8.3)
@@ -62,19 +62,19 @@ GEM
62
62
  concurrent-ruby (1.0.5)
63
63
  crack (0.4.3)
64
64
  safe_yaml (~> 1.0.0)
65
- crass (1.0.3)
65
+ crass (1.0.4)
66
66
  diff-lcs (1.3)
67
67
  docile (1.1.5)
68
- dotenv (2.2.1)
68
+ dotenv (2.5.0)
69
69
  ebnf (1.1.2)
70
70
  rdf (>= 2.2, < 4.0)
71
71
  sxp (~> 1.0)
72
- excon (0.45.4)
73
- faraday (0.9.2)
72
+ excon (0.62.0)
73
+ faraday (0.15.2)
74
74
  multipart-post (>= 1.2, < 3)
75
75
  faraday-encoding (0.0.4)
76
76
  faraday
77
- faraday_middleware (0.10.1)
77
+ faraday_middleware (0.12.2)
78
78
  faraday (>= 0.7.4, < 1.0)
79
79
  gender_detector (0.1.2)
80
80
  unicode_utils (>= 1.3.0)
@@ -85,7 +85,7 @@ GEM
85
85
  concurrent-ruby (~> 1.0)
86
86
  hashdiff (0.3.7)
87
87
  htmlentities (4.3.4)
88
- i18n (0.9.3)
88
+ i18n (1.1.0)
89
89
  concurrent-ruby (~> 1.0)
90
90
  iso8601 (0.9.1)
91
91
  json (2.1.0)
@@ -97,17 +97,17 @@ GEM
97
97
  trollop (~> 2)
98
98
  latex-decode (0.3.1)
99
99
  link_header (0.0.8)
100
- loofah (2.1.1)
100
+ loofah (2.2.2)
101
101
  crass (~> 1.0.2)
102
102
  nokogiri (>= 1.5.9)
103
- maremma (3.6.2)
103
+ maremma (4.1.1)
104
104
  activesupport (>= 4.2.5, < 6)
105
105
  addressable (>= 2.3.6)
106
106
  builder (~> 3.2, >= 3.2.2)
107
- excon (~> 0.45.0)
108
- faraday (~> 0.9.2)
109
- faraday-encoding (~> 0.0.1)
110
- faraday_middleware (~> 0.10.0)
107
+ excon (~> 0.60)
108
+ faraday (~> 0.14)
109
+ faraday-encoding (~> 0.0.4)
110
+ faraday_middleware (~> 0.12.0)
111
111
  multi_json (~> 1.12)
112
112
  nokogiri (~> 1.8.1)
113
113
  oj (>= 2.8.3)
@@ -116,7 +116,7 @@ GEM
116
116
  multi_json (1.13.1)
117
117
  multipart-post (2.0.0)
118
118
  namae (0.11.3)
119
- nokogiri (1.8.2)
119
+ nokogiri (1.8.4)
120
120
  mini_portile2 (~> 2.3.0)
121
121
  oj (2.18.5)
122
122
  pandoc-ruby (2.0.2)
@@ -125,21 +125,21 @@ GEM
125
125
  nokogiri (>= 1.6.1, < 1.9)
126
126
  public_suffix (>= 2.0.0, < 2.1)
127
127
  public_suffix (2.0.5)
128
- rack (2.0.4)
129
- rack-test (0.8.2)
128
+ rack (2.0.5)
129
+ rack-test (0.8.3)
130
130
  rack (>= 1.0, < 3)
131
- rake (12.3.0)
132
- rdf (3.0.1)
131
+ rake (12.3.1)
132
+ rdf (3.0.2)
133
133
  hamster (~> 3.0)
134
134
  link_header (~> 0.0, >= 0.0.8)
135
135
  rdf-aggregate-repo (2.2.1)
136
136
  rdf (>= 2.2, < 4.0)
137
- rdf-rdfa (2.2.4)
137
+ rdf-rdfa (3.0.1)
138
138
  haml (~> 5.0)
139
139
  htmlentities (~> 4.3)
140
- rdf (>= 2.2, < 4.0)
140
+ rdf (~> 3.0)
141
141
  rdf-aggregate-repo (>= 2.2, < 4.0)
142
- rdf-xsd (>= 2.2, < 4.0)
142
+ rdf-xsd (~> 3.0)
143
143
  rdf-rdfxml (2.2.1)
144
144
  htmlentities (~> 4.3)
145
145
  rdf (>= 2.2, < 4.0)
@@ -150,19 +150,19 @@ GEM
150
150
  rdf (>= 2.2, < 4.0)
151
151
  rdf-xsd (3.0.0)
152
152
  rdf (~> 3.0)
153
- rspec (3.7.0)
154
- rspec-core (~> 3.7.0)
155
- rspec-expectations (~> 3.7.0)
156
- rspec-mocks (~> 3.7.0)
157
- rspec-core (3.7.1)
158
- rspec-support (~> 3.7.0)
159
- rspec-expectations (3.7.0)
153
+ rspec (3.8.0)
154
+ rspec-core (~> 3.8.0)
155
+ rspec-expectations (~> 3.8.0)
156
+ rspec-mocks (~> 3.8.0)
157
+ rspec-core (3.8.0)
158
+ rspec-support (~> 3.8.0)
159
+ rspec-expectations (3.8.1)
160
160
  diff-lcs (>= 1.2.0, < 2.0)
161
- rspec-support (~> 3.7.0)
162
- rspec-mocks (3.7.0)
161
+ rspec-support (~> 3.8.0)
162
+ rspec-mocks (3.8.0)
163
163
  diff-lcs (>= 1.2.0, < 2.0)
164
- rspec-support (~> 3.7.0)
165
- rspec-support (3.7.1)
164
+ rspec-support (~> 3.8.0)
165
+ rspec-support (3.8.0)
166
166
  rspec-xsd (0.1.0)
167
167
  nokogiri (~> 1.6)
168
168
  rspec (~> 3)
@@ -178,12 +178,12 @@ GEM
178
178
  thor (0.20.0)
179
179
  thread_safe (0.3.6)
180
180
  tilt (2.0.8)
181
- trollop (2.1.2)
182
- tzinfo (1.2.4)
181
+ trollop (2.9.9)
182
+ tzinfo (1.2.5)
183
183
  thread_safe (~> 0.1)
184
184
  unicode_utils (1.4.0)
185
185
  vcr (3.0.3)
186
- webmock (3.3.0)
186
+ webmock (3.4.2)
187
187
  addressable (>= 2.3.6)
188
188
  crack (>= 0.3.2)
189
189
  hashdiff
@@ -204,4 +204,4 @@ DEPENDENCIES
204
204
  webmock (~> 3.0, >= 3.0.1)
205
205
 
206
206
  BUNDLED WITH
207
- 1.16.0
207
+ 1.16.1
data/cirneco.gemspec CHANGED
@@ -15,7 +15,7 @@ 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.5', '>= 3.5.7'
18
+ s.add_dependency 'maremma', '>= 4.1', '< 5'
19
19
  s.add_dependency 'bergamasco', '~> 0.3'
20
20
  s.add_dependency 'bolognese', '~> 0.9'
21
21
  s.add_dependency 'base32-url', '~> 0.5'
data/lib/cirneco/api.rb CHANGED
@@ -12,6 +12,15 @@ module Cirneco
12
12
  Maremma.post(url, content_type: 'application/xml;charset=UTF-8', data: data, username: options[:username], password: options[:password])
13
13
  end
14
14
 
15
+ def put_metadata(doi, options={})
16
+ return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
17
+
18
+ mds_url = options[:sandbox] ? 'https://mds.test.datacite.org' : 'https://mds.datacite.org'
19
+
20
+ url = "#{mds_url}/metadata/#{doi}"
21
+ Maremma.put(url, content_type: 'application/xml;charset=UTF-8', data: options[:data], username: options[:username], password: options[:password])
22
+ end
23
+
15
24
  def get_metadata(doi, options={})
16
25
  return OpenStruct.new(body: { "errors" => [{ "title" => "Username or password missing" }] }) unless options[:username].present? && options[:password].present?
17
26
 
data/lib/cirneco/media.rb CHANGED
@@ -44,7 +44,5 @@ module Cirneco
44
44
  puts response.body["data"]
45
45
  end
46
46
  end
47
-
48
-
49
47
  end
50
48
  end
@@ -43,6 +43,30 @@ module Cirneco
43
43
  end
44
44
  end
45
45
 
46
+ desc "put DOIs", "put metadata for multiple DOIs"
47
+ method_option :username, :default => ENV['MDS_USERNAME']
48
+ method_option :password, :default => ENV['MDS_PASSWORD']
49
+ method_option :sandbox, :type => :boolean, :force => false
50
+ def put(file)
51
+ data = JSON.parse(IO.read(file))
52
+ count = 0
53
+ data.each do |json|
54
+ doi = doi_from_url(json["@id"])
55
+ next unless doi.present?
56
+
57
+ response = put_metadata(doi, options.merge(data: json.to_json))
58
+
59
+ if response.body["errors"]
60
+ puts "Error: " + response.body["errors"].first.fetch("title", "An error occured")
61
+ else
62
+ puts response.headers["Location"]
63
+ count += 1
64
+ end
65
+ end
66
+
67
+ puts "#{count} DOIs registered/updated."
68
+ end
69
+
46
70
  desc "delete DOI", "hide metadata for DOI"
47
71
  method_option :username, :default => ENV['MDS_USERNAME']
48
72
  method_option :password, :default => ENV['MDS_PASSWORD']
@@ -1,3 +1,3 @@
1
1
  module Cirneco
2
- VERSION = "0.9.20"
2
+ VERSION = "0.9.21"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datacite.org/schema/kernel-4" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4.1/metadata.xsd">
3
- <identifier identifierType="DOI">10.5072/079j-xh42</identifier>
3
+ <identifier identifierType="DOI">10.5438/6brg-2m37</identifier>
4
4
  <creators>
5
5
  <creator>
6
6
  <creatorName nameType="Personal">Smith, John</creatorName>
data/spec/api_spec.rb CHANGED
@@ -19,9 +19,9 @@ describe Cirneco::Work, vcr: true, :order => :defined do
19
19
  context "post" do
20
20
  it 'should post metadata' do
21
21
  response = subject.post_metadata(subject.datacite, options)
22
- expect(response.body["data"]).to eq("OK (10.5072/079j-xh42)")
22
+ expect(response.body["data"]).to eq("OK (10.5438/6BRG-2M37)")
23
23
  expect(response.status).to eq(201)
24
- expect(response.headers["Location"]).to eq("http://mds.test.datacite.org/metadata/10.5072/079j-xh42")
24
+ expect(response.headers["Location"]).to eq("https://mds.test.datacite.org/metadata/10.5438/6brg-2m37")
25
25
  end
26
26
  end
27
27
 
@@ -55,8 +55,8 @@ describe Cirneco::Work, vcr: true, :order => :defined do
55
55
  it 'should get all dois' do
56
56
  response = subject.get_dois(options)
57
57
  dois = response.body["data"]
58
- expect(dois.length).to eq(9)
59
- expect(dois.first).to eq("10.5072/0007-NW90")
58
+ expect(dois.length).to eq(438)
59
+ expect(dois.first).to eq("10.5438/0000-00SS")
60
60
  end
61
61
 
62
62
  it 'should get doi' do
@@ -91,7 +91,7 @@ describe Cirneco::Work, vcr: true, :order => :defined do
91
91
  response = subject.get_media(subject.doi, options)
92
92
  media = response.body["data"]
93
93
  expect(media.length).to eq(1)
94
- expect(media.first).to eq(:mime_type=>"application/pdf", :url=>"http://www.datacite.org/cirneco-test.pdf")
94
+ expect(media).to eq([{:mime_type=>"application/pdf", :url=>"http://www.datacite.org/cirneco-test.pdf"}])
95
95
  end
96
96
  end
97
97
  end
data/spec/doi_spec.rb CHANGED
@@ -8,7 +8,7 @@ describe Cirneco::Doi do
8
8
 
9
9
  let(:number) { 123 }
10
10
  let(:prefix) { ENV['PREFIX'] }
11
- let(:doi) { "10.5072/079j-xh42" }
11
+ let(:doi) { "10.5072/nmr3-xm61" }
12
12
  let(:url) { "http://www.datacite.org" }
13
13
  let(:username) { ENV['MDS_USERNAME'] }
14
14
  let(:password) { ENV['MDS_PASSWORD'] }
@@ -25,7 +25,7 @@ describe Cirneco::Doi do
25
25
  context "get" do
26
26
  it 'should get all dois' do
27
27
  subject.options = api_options.merge(limit: 3)
28
- expect { subject.get "all" }.to output("10.5072/0007-NW90\n10.5072/079J-XH42\n10.5072/1-4CWY-2C14\n").to_stdout
28
+ expect { subject.get "all" }.to output("10.5438/0000-00SS\n10.5438/0000-01HC\n10.5438/0000-03VC\n").to_stdout
29
29
  end
30
30
 
31
31
  it 'should get doi' do
@@ -50,7 +50,7 @@ describe Cirneco::Doi do
50
50
  context "base32" do
51
51
  it 'generates a doi' do
52
52
  subject.options = { number: number, prefix: prefix }
53
- expect { subject.generate }.to output("10.5072/0000-3v20\n").to_stdout
53
+ expect { subject.generate }.to output("10.5438/0000-3v20\n").to_stdout
54
54
  end
55
55
 
56
56
  it 'requires a prefix' do
@@ -59,7 +59,7 @@ describe Cirneco::Doi do
59
59
  end
60
60
 
61
61
  it 'decodes a doi' do
62
- expect { subject.decode doi }.to output("DOI #{doi} was encoded with 7654321\n").to_stdout
62
+ expect { subject.decode doi }.to output("DOI #{doi} was encoded with 726405044\n").to_stdout
63
63
  end
64
64
 
65
65
  it 'checks a doi' do