plos 0.0.1 → 0.0.2
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.
- data/README.md +5 -2
- data/lib/plos/article_ref.rb +27 -0
- data/lib/plos/client.rb +6 -2
- data/lib/plos/version.rb +1 -1
- data/spec/plos_spec.rb +73 -36
- metadata +4 -4
data/README.md
CHANGED
@@ -23,9 +23,12 @@ require 'plos'
|
|
23
23
|
|
24
24
|
client = PLOS::Client.new(ENV["API_KEY"])
|
25
25
|
hits = client.search("xenograft")
|
26
|
-
hits.each do |
|
27
|
-
puts "#{hit.score} - #{hit.title}"
|
26
|
+
hits.each do |hit|
|
27
|
+
puts "#{hit.score} - #{hit.title} - #{hit.article_url}"
|
28
28
|
end
|
29
|
+
|
30
|
+
xml = hit[2].article_xml
|
31
|
+
puts hit[2].citation
|
29
32
|
```
|
30
33
|
|
31
34
|
## Contributing
|
data/lib/plos/article_ref.rb
CHANGED
@@ -11,6 +11,7 @@ module PLOS
|
|
11
11
|
attr_accessor :journal
|
12
12
|
attr_accessor :published_at
|
13
13
|
attr_accessor :title
|
14
|
+
|
14
15
|
alias :article_type= :type=
|
15
16
|
alias :author_display= :authors=
|
16
17
|
alias :title_display= :title=
|
@@ -39,5 +40,31 @@ module PLOS
|
|
39
40
|
ArticleRef.parse_node(child, self)
|
40
41
|
end
|
41
42
|
end
|
43
|
+
|
44
|
+
def article_xml
|
45
|
+
Nokogiri::XML(RestClient.get(article_url))
|
46
|
+
end
|
47
|
+
|
48
|
+
def citation(format="RIS")
|
49
|
+
url = (format == "RIS" ? ris_citation_url : bib_tex_citation_url)
|
50
|
+
RestClient.get(url)
|
51
|
+
end
|
52
|
+
|
53
|
+
def base_url
|
54
|
+
"http://www.plosone.org"
|
55
|
+
end
|
56
|
+
|
57
|
+
def article_url(format="XML")
|
58
|
+
# format = "XML|PDF"
|
59
|
+
"#{base_url}/article/fetchObjectAttachment.action?uri=info:doi/#{id}&representation=#{format}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def ris_citation_url
|
63
|
+
"#{base_url}/article/getRisCitation.action?articleURI=info:doi/#{id}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def bib_tex_citation_url
|
67
|
+
"#{base_url}/article/getBibTexCitation.action?articleURI=info:doi/#{id}"
|
68
|
+
end
|
42
69
|
end
|
43
70
|
end
|
data/lib/plos/client.rb
CHANGED
@@ -11,9 +11,13 @@ module PLOS
|
|
11
11
|
self.base_url = base_url
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def all(rows=50, start=0)
|
15
|
+
search("*:*", rows, start)
|
16
|
+
end
|
17
|
+
|
18
|
+
def search(query, rows=50, start=0)
|
15
19
|
result = []
|
16
|
-
doc = execute( search_url, { :q => query } )
|
20
|
+
doc = execute( search_url, { :q => query, :rows => rows, :start => start } )
|
17
21
|
if doc && doc.root
|
18
22
|
doc.root.children.each do |child|
|
19
23
|
next unless child.name == "result"
|
data/lib/plos/version.rb
CHANGED
data/spec/plos_spec.rb
CHANGED
@@ -1,42 +1,79 @@
|
|
1
1
|
require 'plos'
|
2
2
|
|
3
3
|
describe PLOS do
|
4
|
-
context "A
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
</
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
4
|
+
context "A client" do
|
5
|
+
let(:client) { client = PLOS::Client.new("API_KEY") }
|
6
|
+
|
7
|
+
it "should call the correct search url" do
|
8
|
+
RestClient.should_receive(:post).with("http://api.plos.org/search", {:api_key=>"API_KEY", :q=>"xenograft", :rows=>50, :start=>0}).and_return("")
|
9
|
+
client.search("xenograft")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should call the correct search url when rows and start are specified" do
|
13
|
+
RestClient.should_receive(:post).with("http://api.plos.org/search", {:api_key=>"API_KEY", :q=>"xenograft", :rows=>100, :start=>200}).and_return("")
|
14
|
+
client.search("xenograft", 100, 200)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should call the correct search url when finding all" do
|
18
|
+
RestClient.should_receive(:post).with("http://api.plos.org/search", {:api_key=>"API_KEY", :q=>"*:*", :rows=>50, :start=>0}).and_return("")
|
19
|
+
client.all
|
20
|
+
end
|
21
|
+
|
22
|
+
context "A single document" do
|
23
|
+
let(:article) {
|
24
|
+
xml =<<-END
|
25
|
+
<doc>
|
26
|
+
<float name="score">0.6637922</float>
|
27
|
+
<str name="article_type">Research Article</str>
|
28
|
+
<arr name="author_display">
|
29
|
+
<str>Thomas D. Pfister</str>
|
30
|
+
<str>Melinda Hollingshead</str>
|
31
|
+
<str>Robert J. Kinders</str>
|
32
|
+
<str>Yiping Zhang</str>
|
33
|
+
<str>Yvonne A. Evrard</str>
|
34
|
+
<str>Jiuping Ji</str>
|
35
|
+
<str>Sonny A. Khin</str>
|
36
|
+
<str>Suzanne Borgel</str>
|
37
|
+
<str>Howard Stotler</str>
|
38
|
+
<str>John Carter</str>
|
39
|
+
<str>Raymond Divelbiss</str>
|
40
|
+
<str>Shivaani Kummar</str>
|
41
|
+
<str>Yves Pommier</str>
|
42
|
+
<str>Ralph E. Parchment</str>
|
43
|
+
<str>Joseph E. Tomaszewski</str>
|
44
|
+
<str>James H. Doroshow</str>
|
45
|
+
</arr>
|
46
|
+
<str name="eissn">1932-6203</str>
|
47
|
+
<str name="id">10.1371/journal.pone.0050494</str>
|
48
|
+
<str name="journal">PLoS ONE</str>
|
49
|
+
<date name="publication_date">2012-12-28T00:00:00Z</date>
|
50
|
+
<str name="title_display">
|
51
|
+
Development and Validation of an Immunoassay for Quantification of Topoisomerase I in Solid Tumor Tissues
|
52
|
+
</str>
|
53
|
+
</doc>
|
54
|
+
END
|
55
|
+
article = PLOS::ArticleRef.new(client, Nokogiri::XML(xml).root)
|
56
|
+
}
|
57
|
+
|
58
|
+
it "should parse an ArticleRef" do
|
59
|
+
article.type.should == "Research Article"
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should have the proper xml article url" do
|
63
|
+
article.article_url.should == "http://www.plosone.org/article/fetchObjectAttachment.action?uri=info:doi/10.1371/journal.pone.0050494&representation=XML"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should have the proper pdf article url" do
|
67
|
+
article.article_url("PDF").should == "http://www.plosone.org/article/fetchObjectAttachment.action?uri=info:doi/10.1371/journal.pone.0050494&representation=PDF"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should have the proper ris citation url" do
|
71
|
+
article.ris_citation_url.should == "http://www.plosone.org/article/getRisCitation.action?articleURI=info:doi/10.1371/journal.pone.0050494"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should have the proper bib tex citation url" do
|
75
|
+
article.bib_tex_citation_url.should == "http://www.plosone.org/article/getBibTexCitation.action?articleURI=info:doi/10.1371/journal.pone.0050494"
|
76
|
+
end
|
40
77
|
end
|
41
78
|
end
|
42
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
109
|
version: '0'
|
110
110
|
segments:
|
111
111
|
- 0
|
112
|
-
hash:
|
112
|
+
hash: 3325667330743682461
|
113
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
114
|
none: false
|
115
115
|
requirements:
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
version: '0'
|
119
119
|
segments:
|
120
120
|
- 0
|
121
|
-
hash:
|
121
|
+
hash: 3325667330743682461
|
122
122
|
requirements: []
|
123
123
|
rubyforge_project:
|
124
124
|
rubygems_version: 1.8.24
|