ref2bibtex 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +3 -1
- data/Gemfile.lock +8 -8
- data/lib/ref2bibtex.rb +29 -13
- data/lib/ref2bibtex/version.rb +1 -1
- data/ref2bibtex.gemspec +5 -4
- data/spec/ref2bibtex_spec.rb +8 -4
- data/spec/support/citations.yml +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ca0c289e6130dd3be2e0f7a550a7d05c3f492c9cf1fe0d3ec66e64ec04d2dba2
|
4
|
+
data.tar.gz: 2f2f5e9d4c1b79092a72a27851b64a6cf4e608d44c9f4ac6acfac30d5afdaaaa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fea65fa7e3b3931440512a5df8c6f4c01ea8ae2537868c97a6e83a6118f4efe9a5f0f0eb615db08080cbb3fc1e4f67368725c1c31db84c9bc053914660f49fe
|
7
|
+
data.tar.gz: 3923cc54cfbf6c0cff0c1c2d1fe5d170af15dad1de7b47d4000aaf04c3352dcfd94d4ecc2f136de991f47b0cfcbcfb7c27e976877fec51c0b0aab98002b75d5d
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ref2bibtex (0.
|
5
|
-
addressable (~> 2.
|
4
|
+
ref2bibtex (0.3.0)
|
5
|
+
addressable (~> 2.6)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
addressable (2.
|
10
|
+
addressable (2.6.0)
|
11
11
|
public_suffix (>= 2.0.2, < 4.0)
|
12
12
|
awesome_print (1.8.0)
|
13
|
-
byebug (
|
13
|
+
byebug (11.0.0)
|
14
14
|
diff-lcs (1.3)
|
15
15
|
public_suffix (3.0.3)
|
16
16
|
rake (12.3.2)
|
@@ -33,11 +33,11 @@ PLATFORMS
|
|
33
33
|
|
34
34
|
DEPENDENCIES
|
35
35
|
awesome_print (~> 1.8.0)
|
36
|
-
bundler (~>
|
37
|
-
byebug (~>
|
36
|
+
bundler (~> 2.0)
|
37
|
+
byebug (~> 11)
|
38
38
|
rake (~> 12.3)
|
39
39
|
ref2bibtex!
|
40
|
-
rspec
|
40
|
+
rspec (~> 3.8)
|
41
41
|
|
42
42
|
BUNDLED WITH
|
43
|
-
|
43
|
+
2.0.1
|
data/lib/ref2bibtex.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
recent_ruby = RUBY_VERSION >= '2.
|
2
|
-
raise "IMPORTANT: gem requires ruby >= 2.
|
1
|
+
recent_ruby = RUBY_VERSION >= '2.3.0'
|
2
|
+
raise "IMPORTANT: gem requires ruby >= 2.3.0" unless recent_ruby
|
3
3
|
|
4
4
|
require "ref2bibtex/version"
|
5
5
|
require 'json'
|
6
6
|
require 'net/http'
|
7
7
|
require 'cgi'
|
8
|
-
require
|
8
|
+
require 'addressable/uri'
|
9
|
+
|
10
|
+
# require 'serrano'
|
9
11
|
|
10
12
|
module Ref2bibtex
|
11
13
|
|
@@ -48,33 +50,46 @@ module Ref2bibtex
|
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
|
-
#
|
52
|
-
#
|
53
|
+
# @params doi [String]
|
54
|
+
# @return [String, false]
|
53
55
|
def self.get_bibtex(doi)
|
54
56
|
return false if !doi
|
57
|
+
|
55
58
|
doi = Addressable::URI.parse(doi).normalize.to_s
|
56
59
|
uri = URI(doi)
|
57
60
|
return false if uri.class == URI::Generic
|
58
|
-
|
61
|
+
|
62
|
+
# Serrano.content_negotiation(ids: doi).first
|
63
|
+
|
64
|
+
Ref2bibtex.request(uri, headers: {'Accept' => 'application/x-bibtex' }, protocol: 'GET', process_response_as: 'text')
|
59
65
|
end
|
60
|
-
|
66
|
+
|
67
|
+
# @param citation [String]
|
68
|
+
# @return [String, false]
|
61
69
|
# Pass a String citation, get a DOI back
|
62
70
|
def self.get_doi(citation)
|
63
71
|
citation = validate_query(citation)
|
64
72
|
response = Ref2bibtex.request(payload: citation)
|
65
|
-
|
66
|
-
return false if !response['results'][0]['match']
|
73
|
+
return false unless has_match?(response)
|
67
74
|
return false if response['results'][0]['score'] < @@cutoff
|
68
|
-
|
69
75
|
response['results'][0]['doi']
|
70
76
|
end
|
71
77
|
|
78
|
+
# @param citation [String]
|
79
|
+
# @return [Float, -1.0
|
72
80
|
# Pass a String citation, get a score back
|
73
81
|
def self.get_score(citation)
|
74
82
|
citation = validate_query(citation)
|
75
83
|
response = Ref2bibtex.request(payload: citation)
|
76
|
-
|
77
|
-
|
84
|
+
if has_match?(response)
|
85
|
+
response['results'].first['score']
|
86
|
+
else
|
87
|
+
-1.0
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.has_match?(response)
|
92
|
+
response['query_ok'] && response['results']&.first['match']
|
78
93
|
end
|
79
94
|
|
80
95
|
def self.validate_query(citation)
|
@@ -116,10 +131,11 @@ module Ref2bibtex
|
|
116
131
|
http.request(request)
|
117
132
|
end
|
118
133
|
else
|
134
|
+
|
119
135
|
response = response.value
|
120
136
|
end
|
121
137
|
|
122
|
-
|
138
|
+
process_response(response, process_response_as)
|
123
139
|
end
|
124
140
|
|
125
141
|
protected
|
data/lib/ref2bibtex/version.rb
CHANGED
data/ref2bibtex.gemspec
CHANGED
@@ -18,12 +18,13 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "addressable", "~> 2.
|
21
|
+
spec.add_dependency "addressable", "~> 2.6"
|
22
|
+
# spec.add_dependency "serrano"
|
22
23
|
|
23
|
-
spec.add_development_dependency "bundler", "~>
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
24
25
|
spec.add_development_dependency "rake", "~> 12.3"
|
25
|
-
spec.add_development_dependency "byebug", "~>
|
26
|
+
spec.add_development_dependency "byebug", "~> 11"
|
26
27
|
spec.add_development_dependency "awesome_print", "~> 1.8.0"
|
27
|
-
spec.add_development_dependency "rspec"
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.8"
|
28
29
|
|
29
30
|
end
|
data/spec/ref2bibtex_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe Ref2bibtex do
|
|
28
28
|
|
29
29
|
context '.get_doi' do
|
30
30
|
specify 'takes a full citation and returns a string' do
|
31
|
-
expect(Ref2bibtex.get_doi(CITATIONS[:first])).to eq('
|
31
|
+
expect(Ref2bibtex.get_doi(CITATIONS[:first])).to eq('https://doi.org/10.3897/zookeys.20.205')
|
32
32
|
end
|
33
33
|
|
34
34
|
specify 'a citation that can not be resolved returns false' do
|
@@ -41,7 +41,7 @@ describe Ref2bibtex do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
context '.get_bibtex' do
|
44
|
-
let(:response) { Ref2bibtex.get_bibtex('
|
44
|
+
let(:response) { Ref2bibtex.get_bibtex('https://dx.doi.org/10.3897/zookeys.20.205')}
|
45
45
|
specify 'takes a full citation and returns bibtex' do
|
46
46
|
expect(response).to match(/author\s=/)
|
47
47
|
expect(response).to match(/title\s=/)
|
@@ -71,10 +71,12 @@ describe Ref2bibtex do
|
|
71
71
|
context 'interpretation' do
|
72
72
|
before(:all) {
|
73
73
|
@scores = CITATIONS.keys.inject({}) { |hsh, c|
|
74
|
+
sleep 0.5 # throttle timing a little
|
74
75
|
hsh.merge!(
|
75
76
|
c => Ref2bibtex.get_score(CITATIONS[c])
|
76
77
|
)
|
77
78
|
}
|
79
|
+
@scores
|
78
80
|
}
|
79
81
|
|
80
82
|
specify 'mangled text is worse than good text' do
|
@@ -82,7 +84,7 @@ describe Ref2bibtex do
|
|
82
84
|
end
|
83
85
|
|
84
86
|
context 'default @@cutoff is reasonable and slightly conservative' do
|
85
|
-
let(:good_citations) { [:first, :second, :third
|
87
|
+
let(:good_citations) { [:first, :second, :third] } # remainders have moved to unresolvable
|
86
88
|
let(:bad_citations) { CITATIONS.keys - good_citations }
|
87
89
|
|
88
90
|
specify 'for good citations' do
|
@@ -94,6 +96,7 @@ describe Ref2bibtex do
|
|
94
96
|
specify 'for bad citations' do
|
95
97
|
bad_citations.each do |c|
|
96
98
|
if @scores[c]
|
99
|
+
|
97
100
|
expect(@scores[c]).to be < Ref2bibtex.cutoff
|
98
101
|
end
|
99
102
|
end
|
@@ -111,7 +114,8 @@ describe Ref2bibtex do
|
|
111
114
|
expect(Ref2bibtex.get_doi(CITATIONS[:first])).to eq(false)
|
112
115
|
end
|
113
116
|
|
114
|
-
|
117
|
+
# Cutoff is more finely tuned to exclude bad matches now.
|
118
|
+
xspecify 'can be used to accept bad matches' do
|
115
119
|
Ref2bibtex.cutoff = 1
|
116
120
|
expect(Ref2bibtex.get_doi(CITATIONS[:fifth])).to be_truthy
|
117
121
|
end
|
data/spec/support/citations.yml
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
:fifth:
|
11
11
|
"Iam, F.K. 1337. Let's go Crossref, give me a DOI for this fake reference in my unit test, I dare you. Journal of Examples for Unit tests. 13:37"
|
12
12
|
:sixth:
|
13
|
-
"Simon, E. (1879b) Les Arachnides de France. Tome 7. Contenant les ordres des Chernetes, Scorpiones et Opiliones. Librairie Encyclopédique de Roret, Paris, pp. 1–332, pl. 17–24.
|
13
|
+
"Simon, E. (1879b) Les Arachnides de France. Tome 7. Contenant les ordres des Chernetes, Scorpiones et Opiliones. Librairie Encyclopédique de Roret, Paris, pp. 1–332, pl. 17–24."
|
14
14
|
:seventh:
|
15
15
|
'Jaost & K.P. Shuw. 2007. Phyloguny of Ensifere (Hesapoda: Prthoptera) usine threa rubosomal toci, wuth implocations far teh evolushun off acoustik commmunication. Tolecular Fylogenetics & Evolotion (Mul. Phylagenet. Evil.) 39:509-528'
|
16
16
|
:eighth:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ref2bibtex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Yoder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
26
|
+
version: '2.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '11'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '11'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: awesome_print
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '3.8'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '3.8'
|
97
97
|
description: Ok, maybe a bit more, you can pass a DOI and get the bibtex string back
|
98
98
|
too.
|
99
99
|
email:
|
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.7.8
|
140
140
|
signing_key:
|
141
141
|
specification_version: 4
|
142
142
|
summary: Pass a full citation, get the bibtex back, that's all.
|