toccatore 0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/toccatore/base.rb +4 -2
- data/lib/toccatore/cli.rb +18 -9
- data/lib/toccatore/orcid_update.rb +9 -9
- data/lib/toccatore/version.rb +1 -1
- data/lib/toccatore.rb +1 -0
- data/spec/cli_spec.rb +11 -1
- data/spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_succeed_with_no_works.yml +38 -0
- data/spec/orcid_update_spec.rb +2 -1
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53ede9be3b0700d3355c2c77084cdc23a2107f05
|
4
|
+
data.tar.gz: f5ba51ea0e1541d3fd03678f1d724672d444d79a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d194a51974f6896f8ea00fb50895ad510612e788e7d84fb3a1b399e2ff727aa2a6d8978c8be3cc2dfff29bd8676743d8ddd8416813ccd0e64c8f3dc5a2c0769
|
7
|
+
data.tar.gz: 9276f36b39523aef67e1075034ac804811441da779aaddaf0ee576d8f93bcaf0424a671550061c1268fd9eb3e7c5fde32291e3e0a5baec4d0d28d62d9cc3f62b
|
data/Gemfile.lock
CHANGED
data/lib/toccatore/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'maremma'
|
2
|
+
require 'active_support/all'
|
1
3
|
require 'namae'
|
2
4
|
require 'gender_detector'
|
3
5
|
|
@@ -63,8 +65,8 @@ module Toccatore
|
|
63
65
|
data = get_data(options.merge(timeout: timeout, source_id: source_id))
|
64
66
|
data = parse_data(data, options.merge(source_id: source_id))
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
+
return [OpenStruct.new(body: { "data" => [] })] if data.empty?
|
69
|
+
|
68
70
|
push_data(data, options)
|
69
71
|
end
|
70
72
|
|
data/lib/toccatore/cli.rb
CHANGED
@@ -19,18 +19,27 @@ module Toccatore
|
|
19
19
|
|
20
20
|
desc "orcid_update", "push ORCID IDs from DataCite MDS to ORCID"
|
21
21
|
method_option :access_token, type: :string, required: true
|
22
|
-
method_option :from_date, type: :string
|
23
|
-
method_option :until_date, type: :string
|
22
|
+
method_option :from_date, type: :string, default: (Time.now.to_date - 1.day).iso8601
|
23
|
+
method_option :until_date, type: :string, default: Time.now.to_date.iso8601
|
24
24
|
method_option :push_url, type: :string
|
25
25
|
def orcid_update
|
26
26
|
orcid_update = Toccatore::OrcidUpdate.new
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
|
28
|
+
data = orcid_update.get_data(options.merge(timeout: orcid_update.timeout, source_id: orcid_update.source_id))
|
29
|
+
data = orcid_update.parse_data(data, options.merge(source_id: orcid_update.source_id))
|
30
|
+
|
31
|
+
if data.empty?
|
32
|
+
puts "No works found for date range #{options[:from_date]} - #{options[:until_date]}."
|
33
|
+
else
|
34
|
+
data.each do |item|
|
35
|
+
response = orcid_update.push_item(item, options)
|
36
|
+
if response.body["data"].present?
|
37
|
+
doi = response.body.fetch("data", {}).fetch("attributes", {}).fetch("doi", nil)
|
38
|
+
orcid = response.body.fetch("data", {}).fetch("attributes", {}).fetch("orcid", nil)
|
39
|
+
puts "DOI #{doi} for ORCID ID #{orcid} pushed to Profiles service."
|
40
|
+
elsif response.body["errors"].present?
|
41
|
+
puts "An error occured: #{response.body['errors'].first['title']}"
|
42
|
+
end
|
34
43
|
end
|
35
44
|
end
|
36
45
|
end
|
@@ -40,17 +40,17 @@ module Toccatore
|
|
40
40
|
|
41
41
|
# push to Volpino API if no error and we have collected works
|
42
42
|
def push_data(items, options={})
|
43
|
-
|
44
|
-
|
43
|
+
Array(items).map { |item| push_item(item, options) }
|
44
|
+
end
|
45
45
|
|
46
|
-
|
47
|
-
return
|
46
|
+
def push_item(item, options={})
|
47
|
+
return OpenStruct.new(body: { "errors" => [{ "title" => "Access token missing." }] }) if options[:access_token].blank?
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
push_url = (options[:push_url].presence || "https://profiles.datacite.org/api") + "/claims"
|
50
|
+
|
51
|
+
Maremma.post(push_url, data: { "claim" => item }.to_json,
|
52
|
+
token: options[:access_token],
|
53
|
+
content_type: 'json')
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
data/lib/toccatore/version.rb
CHANGED
data/lib/toccatore.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
@@ -21,9 +21,19 @@ describe Toccatore::CLI do
|
|
21
21
|
expect { subject.orcid_update }.to output(/DOI 10.6084\/M9.FIGSHARE.1041547 for ORCID ID 0000-0002-3546-1048 pushed to Profiles service.\n/).to_stdout
|
22
22
|
end
|
23
23
|
|
24
|
+
it 'should succeed with no works' do
|
25
|
+
from_date = "2009-04-07"
|
26
|
+
until_date = "2009-04-08"
|
27
|
+
subject.options = { push_url: push_url,
|
28
|
+
access_token: access_token,
|
29
|
+
from_date: from_date,
|
30
|
+
until_date: until_date }
|
31
|
+
expect { subject.orcid_update }.to output("No works found for date range 2009-04-07 - 2009-04-08.\n").to_stdout
|
32
|
+
end
|
33
|
+
|
24
34
|
it 'should fail' do
|
25
35
|
subject.options = cli_options.except(:access_token)
|
26
|
-
expect { subject.orcid_update }.to output(
|
36
|
+
expect { subject.orcid_update }.to output(/An error occured: Access token missing.\n/).to_stdout
|
27
37
|
end
|
28
38
|
end
|
29
39
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://search.datacite.org/api?fl=doi,creator,title,publisher,publicationYear,resourceTypeGeneral,datacentre_symbol,relatedIdentifier,nameIdentifier,xml,minted,updated&fq=updated:%5B2009-04-07T00:00:00Z%20TO%202009-04-08T23:59:59Z%5D%20AND%20has_metadata:true%20AND%20is_active:true&q=nameIdentifier:ORCID%5C:*&rows=1000&start=0&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
|
+
Server:
|
20
|
+
- openresty/1.11.2.1
|
21
|
+
Date:
|
22
|
+
- Mon, 30 Jan 2017 09:15:48 GMT
|
23
|
+
Content-Type:
|
24
|
+
- application/json;charset=UTF-8
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Access-Control-Allow-Origin:
|
28
|
+
- "*"
|
29
|
+
Access-Control-Allow-Methods:
|
30
|
+
- GET, POST, OPTIONS
|
31
|
+
body:
|
32
|
+
encoding: UTF-8
|
33
|
+
string: '{"responseHeader":{"status":0,"QTime":1},"response":{"numFound":0,"start":0,"docs":[]}}
|
34
|
+
|
35
|
+
'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Mon, 30 Jan 2017 09:15:48 GMT
|
38
|
+
recorded_with: VCR 3.0.3
|
data/spec/orcid_update_spec.rb
CHANGED
@@ -97,7 +97,8 @@ describe Toccatore::OrcidUpdate, vcr: true do
|
|
97
97
|
context "push_data" do
|
98
98
|
it "should report if there are no works returned by the Datacite Metadata Search API" do
|
99
99
|
result = []
|
100
|
-
|
100
|
+
response = subject.push_data(result)
|
101
|
+
expect(response.count).to eq(0)
|
101
102
|
end
|
102
103
|
|
103
104
|
it "should report if there are works returned by the Datacite Metadata Search API" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toccatore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- spec/fixtures/orcid_update_nil.json
|
263
263
|
- spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_fail.yml
|
264
264
|
- spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_succeed.yml
|
265
|
+
- spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_succeed_with_no_works.yml
|
265
266
|
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_data/should_report_if_there_are_no_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
266
267
|
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_data/should_report_if_there_are_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
267
268
|
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_total/with_no_works.yml
|
@@ -292,23 +293,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
292
293
|
version: '0'
|
293
294
|
requirements: []
|
294
295
|
rubyforge_project:
|
295
|
-
rubygems_version: 2.
|
296
|
+
rubygems_version: 2.4.5
|
296
297
|
signing_key:
|
297
298
|
specification_version: 4
|
298
299
|
summary: Ruby library to find ORCID IDs in the DataCite Solr index
|
299
|
-
test_files:
|
300
|
-
- spec/cli_spec.rb
|
301
|
-
- spec/fixtures/orcid_update.json
|
302
|
-
- spec/fixtures/orcid_update_nil.json
|
303
|
-
- spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_fail.yml
|
304
|
-
- spec/fixtures/vcr_cassettes/Toccatore_CLI/orcid_update/should_succeed.yml
|
305
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_data/should_report_if_there_are_no_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
306
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_data/should_report_if_there_are_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
307
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_total/with_no_works.yml
|
308
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/get_total/with_works.yml
|
309
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/push_data/should_report_if_there_are_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
310
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/queue_jobs/should_report_if_there_are_no_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
311
|
-
- spec/fixtures/vcr_cassettes/Toccatore_OrcidUpdate/queue_jobs/should_report_if_there_are_works_returned_by_the_Datacite_Metadata_Search_API.yml
|
312
|
-
- spec/orcid_update_spec.rb
|
313
|
-
- spec/spec_helper.rb
|
314
|
-
has_rdoc:
|
300
|
+
test_files: []
|