entrez 0.1.1 → 0.2.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.
- data/.gemtest +0 -0
- data/README.rdoc +22 -1
- data/Rakefile +7 -0
- data/lib/entrez.rb +20 -0
- data/lib/entrez/version.rb +1 -1
- data/spec/entrez_spec.rb +6 -2
- data/spec/support/macros.rb +8 -0
- data/spec/support/matchers.rb +9 -0
- metadata +7 -18
data/.gemtest
ADDED
File without changes
|
data/README.rdoc
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
Entrez is a simple API for making HTTP requests to Entrez utilities (eutils: http://eutils.ncbi.nlm.nih.gov/).
|
4
4
|
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
gem install entrez
|
8
|
+
|
9
|
+
or if you use Bundler awesomeness:
|
10
|
+
|
11
|
+
# Gemfile
|
12
|
+
gem 'entrez'
|
13
|
+
|
14
|
+
It requires httparty.
|
15
|
+
|
5
16
|
== Usage
|
6
17
|
|
7
18
|
Entrez.efetch(<database>, parameters)
|
@@ -20,9 +31,19 @@ Email is obtained from an environment variable ENTREZ_EMAIL on your computer.
|
|
20
31
|
I set mine in my ~/.bash_profile:
|
21
32
|
export ENTREZ_EMAIL='jared@redningja.com'
|
22
33
|
|
34
|
+
== NCBI query limits
|
35
|
+
|
36
|
+
NCBI recommends no more than 3 URL requests per second: http://www.ncbi.nlm.nih.gov/books/NBK25497/#chapter2.Usage_Guidelines_and_Requiremen
|
37
|
+
This gem respects this limit. It will delay the next request if the last 3 have been made within 1 second.
|
38
|
+
The amount of delay time is no more than what is necessary to make the next request "respectful".
|
39
|
+
|
23
40
|
== What about EInfo, ESummary, EPost, ESearch, ELink, EGQuery, and ESpell?
|
24
41
|
|
25
42
|
For my purposes, I only needed EFetch.
|
26
43
|
But if you would like to contribute, please feel free.
|
27
44
|
After seeing the code, assuming you know how to submit requests to einfo et al,
|
28
|
-
It should be
|
45
|
+
It should be easy to implement them here.
|
46
|
+
|
47
|
+
== Compatibility
|
48
|
+
|
49
|
+
http://test.rubygems.org/gems/entrez
|
data/Rakefile
CHANGED
data/lib/entrez.rb
CHANGED
@@ -9,9 +9,29 @@ class Entrez
|
|
9
9
|
class << self
|
10
10
|
|
11
11
|
def efetch(db, params = {})
|
12
|
+
respect_query_limit
|
13
|
+
request_times << Time.now.to_f
|
12
14
|
get '/efetch.fcgi', :query => {db: db}.merge(params)
|
13
15
|
end
|
14
16
|
|
17
|
+
def request_times
|
18
|
+
@request_times ||= []
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def respect_query_limit
|
24
|
+
three_requests_ago = request_times[-3]
|
25
|
+
return unless three_requests_ago
|
26
|
+
three_requests_ago = three_requests_ago.to_f
|
27
|
+
now = Time.now.to_f
|
28
|
+
enough_time_has_passed = now > three_requests_ago + 1
|
29
|
+
unless enough_time_has_passed
|
30
|
+
STDERR.puts "sleeping #{now - three_requests_ago}"
|
31
|
+
sleep(now - three_requests_ago)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
15
35
|
end
|
16
36
|
|
17
37
|
end
|
data/lib/entrez/version.rb
CHANGED
data/spec/entrez_spec.rb
CHANGED
@@ -8,8 +8,12 @@ describe Entrez do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should efetch results' do
|
11
|
-
|
12
|
-
|
11
|
+
Entrez.efetch('snp', {id: 9268480, retmode: 'xml'}).should eq(file_fixture('efetch.xml'))
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should respect query limit' do
|
15
|
+
requests = proc { 4.times { Entrez.efetch('snp', id: 9268480) } }
|
16
|
+
requests.should take_longer_than(1.0)
|
13
17
|
end
|
14
18
|
|
15
19
|
end
|
data/spec/support/macros.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
RSpec::Matchers.define :take_longer_than do |seconds|
|
2
|
+
match do |process|
|
3
|
+
@elapsed_time = timer(&process)
|
4
|
+
@elapsed_time.should > seconds
|
5
|
+
end
|
6
|
+
failure_message_for_should do
|
7
|
+
"Expected process to take longer than #{seconds} seconds (actual: #{@elapsed_time})"
|
8
|
+
end
|
9
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: entrez
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 1
|
9
|
-
version: 0.1.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Jared Ning
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-03-07 00:00:00 -06:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,8 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
24
|
version: "0"
|
31
25
|
type: :runtime
|
32
26
|
version_requirements: *id001
|
@@ -38,10 +32,6 @@ dependencies:
|
|
38
32
|
requirements:
|
39
33
|
- - "="
|
40
34
|
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 2
|
43
|
-
- 4
|
44
|
-
- 0
|
45
35
|
version: 2.4.0
|
46
36
|
type: :development
|
47
37
|
version_requirements: *id002
|
@@ -55,6 +45,7 @@ extensions: []
|
|
55
45
|
extra_rdoc_files: []
|
56
46
|
|
57
47
|
files:
|
48
|
+
- .gemtest
|
58
49
|
- .gitignore
|
59
50
|
- .rvmrc
|
60
51
|
- Gemfile
|
@@ -67,6 +58,7 @@ files:
|
|
67
58
|
- spec/spec_helper.rb
|
68
59
|
- spec/support/fixtures/efetch.xml
|
69
60
|
- spec/support/macros.rb
|
61
|
+
- spec/support/matchers.rb
|
70
62
|
has_rdoc: true
|
71
63
|
homepage: https://github.com/ordinaryzelig/entrez
|
72
64
|
licenses: []
|
@@ -81,21 +73,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
73
|
requirements:
|
82
74
|
- - ">="
|
83
75
|
- !ruby/object:Gem::Version
|
84
|
-
segments:
|
85
|
-
- 0
|
86
76
|
version: "0"
|
87
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
78
|
none: false
|
89
79
|
requirements:
|
90
80
|
- - ">="
|
91
81
|
- !ruby/object:Gem::Version
|
92
|
-
segments:
|
93
|
-
- 0
|
94
82
|
version: "0"
|
95
83
|
requirements: []
|
96
84
|
|
97
85
|
rubyforge_project: entrez
|
98
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.6.1
|
99
87
|
signing_key:
|
100
88
|
specification_version: 3
|
101
89
|
summary: HTTP requests to Entrez E-utilities
|
@@ -104,3 +92,4 @@ test_files:
|
|
104
92
|
- spec/spec_helper.rb
|
105
93
|
- spec/support/fixtures/efetch.xml
|
106
94
|
- spec/support/macros.rb
|
95
|
+
- spec/support/matchers.rb
|