entrez 0.3.0 → 0.4.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/README.rdoc +27 -7
 - data/lib/entrez.rb +16 -0
 - data/lib/entrez/version.rb +1 -1
 - data/lib/query_string_normalizer.rb +12 -0
 - data/spec/entrez_spec.rb +10 -5
 - data/spec/query_string_normalizer_spec.rb +10 -0
 - metadata +5 -2
 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -13,20 +13,39 @@ or if you use Bundler: 
     | 
|
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            It requires httparty.
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
            See 'Email & Tool' section below for setup.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       16 
18 
     | 
    
         
             
            == Usage
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
            (You can copy/paste the resulting following request URLs into a browser to see what the response would be.)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            === EFetch, ESummary
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            args:
         
     | 
| 
      
 25 
     | 
    
         
            +
            * database
         
     | 
| 
      
 26 
     | 
    
         
            +
            * params hash
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              Entrez.EFetch('snp', id: 123, retmode: :xml)
         
     | 
| 
      
 29 
     | 
    
         
            +
              #=> makes request to http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=snp&id=9268480&retmode=xml
         
     | 
| 
      
 30 
     | 
    
         
            +
              #=> returns XML document with SNP rs9268480 data.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            ESummary takes the same arguments.
         
     | 
| 
       19 
33 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 34 
     | 
    
         
            +
            === ESearch
         
     | 
| 
       21 
35 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
            args:
         
     | 
| 
      
 37 
     | 
    
         
            +
            * database
         
     | 
| 
      
 38 
     | 
    
         
            +
            * term hash
         
     | 
| 
      
 39 
     | 
    
         
            +
            * params hash
         
     | 
| 
       23 
40 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
              Entrez.ESearch('genomeprj', {WORD: 'hapmap', SEQS: 'inprogress'}, retmode: :xml)
         
     | 
| 
      
 42 
     | 
    
         
            +
              #=> makes request to http://http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=genomeprj&term=hapmap[WORD]+AND+inprogress[SEQS]&retmode=xml
         
     | 
| 
      
 43 
     | 
    
         
            +
              #=> returns XML document with list of Ids of genome projects that match the searc term criteria
         
     | 
| 
      
 44 
     | 
    
         
            +
              #=> i.e. genome projects that have 'hapmap' in the description and whose sequencing status is 'inprogress'.
         
     | 
| 
       26 
45 
     | 
    
         | 
| 
       27 
46 
     | 
    
         
             
            == Email & Tool
         
     | 
| 
       28 
47 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
            NCBI  
     | 
| 
      
 48 
     | 
    
         
            +
            NCBI asks that you supply the tool you are using and your email.
         
     | 
| 
       30 
49 
     | 
    
         
             
            The Entrez gem uses 'ruby' as the tool.
         
     | 
| 
       31 
50 
     | 
    
         
             
            Email is obtained from an environment variable ENTREZ_EMAIL on your computer.
         
     | 
| 
       32 
51 
     | 
    
         
             
            I set mine in my ~/.bash_profile:
         
     | 
| 
         @@ -42,8 +61,9 @@ The amount of delay time is no more than what is necessary to make the next requ 
     | 
|
| 
       42 
61 
     | 
    
         | 
| 
       43 
62 
     | 
    
         
             
            * EFetch
         
     | 
| 
       44 
63 
     | 
    
         
             
            * ESummary
         
     | 
| 
      
 64 
     | 
    
         
            +
            * ESearch
         
     | 
| 
       45 
65 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            Not yet implemented: EInfo, EPost,  
     | 
| 
      
 66 
     | 
    
         
            +
            Not yet implemented: EInfo, EPost, ELink, EGQuery, ESpell.
         
     | 
| 
       47 
67 
     | 
    
         | 
| 
       48 
68 
     | 
    
         
             
            == Compatibility
         
     | 
| 
       49 
69 
     | 
    
         | 
    
        data/lib/entrez.rb
    CHANGED
    
    | 
         @@ -1,10 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'httparty'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'query_string_normalizer'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            class Entrez
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
              include HTTParty
         
     | 
| 
       6 
7 
     | 
    
         
             
              base_uri 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils'
         
     | 
| 
       7 
8 
     | 
    
         
             
              default_params tool: 'ruby', email: (ENV['ENTREZ_EMAIL'] || raise('please set ENTREZ_EMAIL environment variable'))
         
     | 
| 
      
 9 
     | 
    
         
            +
              query_string_normalizer QueryStringNormalizer
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
11 
     | 
    
         
             
              class << self
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
         @@ -16,6 +18,11 @@ class Entrez 
     | 
|
| 
       16 
18 
     | 
    
         
             
                  perform '/esummary.fcgi', db, params
         
     | 
| 
       17 
19 
     | 
    
         
             
                end
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                def ESearch(db, search_terms = {}, params = {})
         
     | 
| 
      
 22 
     | 
    
         
            +
                  params[:term] = convert_search_term_hash(search_terms)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  perform '/esearch.fcgi', db, params
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       19 
26 
     | 
    
         
             
                def perform(utility_path, db, params = {})
         
     | 
| 
       20 
27 
     | 
    
         
             
                  respect_query_limit
         
     | 
| 
       21 
28 
     | 
    
         
             
                  request_times << Time.now.to_f
         
     | 
| 
         @@ -40,6 +47,15 @@ class Entrez 
     | 
|
| 
       40 
47 
     | 
    
         
             
                  @request_times ||= []
         
     | 
| 
       41 
48 
     | 
    
         
             
                end
         
     | 
| 
       42 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                # Take a ruby hash and convert it to an ENTREZ search term.
         
     | 
| 
      
 51 
     | 
    
         
            +
                # E.g. convert_search_term_hash {WORD: 'low coverage', SEQS: 'inprogress'}
         
     | 
| 
      
 52 
     | 
    
         
            +
                # #=> 'low coverage[WORD]+AND+inprogress[SEQS]'
         
     | 
| 
      
 53 
     | 
    
         
            +
                def convert_search_term_hash(hash)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  hash.map do |field, value|
         
     | 
| 
      
 55 
     | 
    
         
            +
                    "#{value}[#{field}]"
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end.join('+AND+')
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       43 
59 
     | 
    
         
             
              end
         
     | 
| 
       44 
60 
     | 
    
         | 
| 
       45 
61 
     | 
    
         
             
            end
         
     | 
    
        data/lib/entrez/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # We need a simple normalizer that will not URI escape []s.
         
     | 
| 
      
 2 
     | 
    
         
            +
            QueryStringNormalizer = proc do |query_hash|
         
     | 
| 
      
 3 
     | 
    
         
            +
              query_hash.map do |key, value|
         
     | 
| 
      
 4 
     | 
    
         
            +
                value_string = case value
         
     | 
| 
      
 5 
     | 
    
         
            +
                when Array
         
     | 
| 
      
 6 
     | 
    
         
            +
                  value.join(',')
         
     | 
| 
      
 7 
     | 
    
         
            +
                else
         
     | 
| 
      
 8 
     | 
    
         
            +
                  value
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
                "#{key}=#{value_string}"
         
     | 
| 
      
 11 
     | 
    
         
            +
              end.join('&')
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/entrez_spec.rb
    CHANGED
    
    | 
         @@ -8,17 +8,22 @@ describe Entrez do 
     | 
|
| 
       8 
8 
     | 
    
         
             
              end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              it '#EFetch retrieves results' do
         
     | 
| 
       11 
     | 
    
         
            -
                response = Entrez.EFetch(' 
     | 
| 
       12 
     | 
    
         
            -
                response. 
     | 
| 
      
 11 
     | 
    
         
            +
                response = Entrez.EFetch('taxonomy', id: 9606, retmode: :xml)
         
     | 
| 
      
 12 
     | 
    
         
            +
                response.body.should include('Homo sapiens')
         
     | 
| 
       13 
13 
     | 
    
         
             
              end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
              it '#ESummary retrieves results' do
         
     | 
| 
       16 
     | 
    
         
            -
                response = Entrez.ESummary('genomeprj',  
     | 
| 
       17 
     | 
    
         
            -
                response. 
     | 
| 
      
 16 
     | 
    
         
            +
                response = Entrez.ESummary('genomeprj', id: 28911)
         
     | 
| 
      
 17 
     | 
    
         
            +
                response.body.should include('Hapmap')
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it '#ESearch retrieves results' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                response = Entrez.ESearch('genomeprj', {WORD: 'hapmap', SEQS: 'inprogress'}, retmode: :xml)
         
     | 
| 
      
 22 
     | 
    
         
            +
                response.body.should include('28911')
         
     | 
| 
       18 
23 
     | 
    
         
             
              end
         
     | 
| 
       19 
24 
     | 
    
         | 
| 
       20 
25 
     | 
    
         
             
              it 'should respect query limit' do
         
     | 
| 
       21 
     | 
    
         
            -
                requests = proc { 4.times { Entrez.EFetch(' 
     | 
| 
      
 26 
     | 
    
         
            +
                requests = proc { 4.times { Entrez.EFetch('taxonomy', id: 9606) } }
         
     | 
| 
       22 
27 
     | 
    
         
             
                requests.should take_longer_than(1.0)
         
     | 
| 
       23 
28 
     | 
    
         
             
              end
         
     | 
| 
       24 
29 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            name: entrez
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
4 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       5 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 5 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Jared Ning
         
     | 
| 
         @@ -10,7 +10,7 @@ autorequire: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            date: 2011-05- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-05-19 00:00:00 -05:00
         
     | 
| 
       14 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       16 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -54,7 +54,9 @@ files: 
     | 
|
| 
       54 
54 
     | 
    
         
             
            - entrez.gemspec
         
     | 
| 
       55 
55 
     | 
    
         
             
            - lib/entrez.rb
         
     | 
| 
       56 
56 
     | 
    
         
             
            - lib/entrez/version.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/query_string_normalizer.rb
         
     | 
| 
       57 
58 
     | 
    
         
             
            - spec/entrez_spec.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - spec/query_string_normalizer_spec.rb
         
     | 
| 
       58 
60 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       59 
61 
     | 
    
         
             
            - spec/support/macros.rb
         
     | 
| 
       60 
62 
     | 
    
         
             
            - spec/support/matchers.rb
         
     | 
| 
         @@ -88,6 +90,7 @@ specification_version: 3 
     | 
|
| 
       88 
90 
     | 
    
         
             
            summary: HTTP requests to Entrez E-utilities
         
     | 
| 
       89 
91 
     | 
    
         
             
            test_files: 
         
     | 
| 
       90 
92 
     | 
    
         
             
            - spec/entrez_spec.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - spec/query_string_normalizer_spec.rb
         
     | 
| 
       91 
94 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       92 
95 
     | 
    
         
             
            - spec/support/macros.rb
         
     | 
| 
       93 
96 
     | 
    
         
             
            - spec/support/matchers.rb
         
     |