bio 1.4.3.0001 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +39 -33
  3. data/BSDL +22 -0
  4. data/COPYING +2 -2
  5. data/COPYING.ja +36 -36
  6. data/ChangeLog +2404 -1025
  7. data/KNOWN_ISSUES.rdoc +15 -55
  8. data/README.rdoc +17 -23
  9. data/RELEASE_NOTES.rdoc +246 -183
  10. data/Rakefile +3 -2
  11. data/bin/br_biofetch.rb +29 -5
  12. data/bioruby.gemspec +15 -32
  13. data/bioruby.gemspec.erb +10 -20
  14. data/doc/ChangeLog-1.4.3 +1478 -0
  15. data/doc/RELEASE_NOTES-1.4.3.rdoc +204 -0
  16. data/doc/Tutorial.rd +0 -6
  17. data/doc/Tutorial.rd.html +7 -12
  18. data/doc/Tutorial.rd.ja +960 -1064
  19. data/doc/Tutorial.rd.ja.html +977 -1067
  20. data/gemfiles/Gemfile.travis-jruby1.8 +2 -1
  21. data/gemfiles/Gemfile.travis-jruby1.9 +2 -4
  22. data/gemfiles/Gemfile.travis-rbx +13 -0
  23. data/gemfiles/Gemfile.travis-ruby1.8 +2 -1
  24. data/gemfiles/Gemfile.travis-ruby1.9 +2 -4
  25. data/gemfiles/Gemfile.travis-ruby2.2 +9 -0
  26. data/lib/bio.rb +10 -43
  27. data/lib/bio/alignment.rb +8 -14
  28. data/lib/bio/appl/blast.rb +1 -2
  29. data/lib/bio/appl/blast/format0.rb +18 -7
  30. data/lib/bio/appl/blast/remote.rb +0 -9
  31. data/lib/bio/appl/blast/report.rb +1 -1
  32. data/lib/bio/appl/clustalw/report.rb +3 -1
  33. data/lib/bio/appl/genscan/report.rb +1 -2
  34. data/lib/bio/appl/iprscan/report.rb +1 -2
  35. data/lib/bio/appl/meme/mast.rb +4 -4
  36. data/lib/bio/appl/meme/mast/report.rb +1 -1
  37. data/lib/bio/appl/paml/codeml.rb +2 -2
  38. data/lib/bio/appl/paml/codeml/report.rb +1 -0
  39. data/lib/bio/appl/paml/common.rb +1 -1
  40. data/lib/bio/appl/sosui/report.rb +1 -2
  41. data/lib/bio/command.rb +62 -2
  42. data/lib/bio/data/aa.rb +13 -31
  43. data/lib/bio/data/codontable.rb +1 -2
  44. data/lib/bio/db/biosql/biosql_to_biosequence.rb +1 -0
  45. data/lib/bio/db/biosql/sequence.rb +1 -1
  46. data/lib/bio/db/embl/common.rb +1 -1
  47. data/lib/bio/db/embl/embl.rb +5 -4
  48. data/lib/bio/db/embl/format_embl.rb +3 -3
  49. data/lib/bio/db/embl/sptr.rb +9 -1444
  50. data/lib/bio/db/embl/swissprot.rb +12 -29
  51. data/lib/bio/db/embl/trembl.rb +13 -30
  52. data/lib/bio/db/embl/uniprot.rb +12 -29
  53. data/lib/bio/db/embl/uniprotkb.rb +1455 -0
  54. data/lib/bio/db/fasta.rb +17 -0
  55. data/lib/bio/db/fasta/defline.rb +1 -3
  56. data/lib/bio/db/fastq.rb +1 -1
  57. data/lib/bio/db/genbank/ddbj.rb +9 -5
  58. data/lib/bio/db/genbank/refseq.rb +11 -3
  59. data/lib/bio/db/gff.rb +3 -4
  60. data/lib/bio/db/go.rb +5 -6
  61. data/lib/bio/db/kegg/module.rb +4 -5
  62. data/lib/bio/db/kegg/pathway.rb +4 -5
  63. data/lib/bio/db/kegg/reaction.rb +1 -1
  64. data/lib/bio/db/nexus.rb +3 -2
  65. data/lib/bio/db/pdb/pdb.rb +2 -2
  66. data/lib/bio/db/phyloxml/phyloxml_elements.rb +82 -59
  67. data/lib/bio/db/phyloxml/phyloxml_parser.rb +2 -2
  68. data/lib/bio/db/phyloxml/phyloxml_writer.rb +1 -2
  69. data/lib/bio/db/sanger_chromatogram/chromatogram.rb +1 -2
  70. data/lib/bio/db/transfac.rb +1 -1
  71. data/lib/bio/io/das.rb +40 -41
  72. data/lib/bio/io/fastacmd.rb +0 -16
  73. data/lib/bio/io/fetch.rb +111 -55
  74. data/lib/bio/io/flatfile/buffer.rb +4 -5
  75. data/lib/bio/io/hinv.rb +2 -3
  76. data/lib/bio/io/ncbirest.rb +43 -6
  77. data/lib/bio/io/pubmed.rb +76 -81
  78. data/lib/bio/io/togows.rb +33 -10
  79. data/lib/bio/map.rb +1 -1
  80. data/lib/bio/pathway.rb +1 -1
  81. data/lib/bio/sequence/compat.rb +1 -1
  82. data/lib/bio/sequence/na.rb +63 -12
  83. data/lib/bio/shell.rb +0 -2
  84. data/lib/bio/shell/core.rb +5 -6
  85. data/lib/bio/shell/interface.rb +3 -4
  86. data/lib/bio/shell/irb.rb +1 -2
  87. data/lib/bio/shell/plugin/entry.rb +2 -3
  88. data/lib/bio/shell/plugin/seq.rb +7 -6
  89. data/lib/bio/shell/setup.rb +1 -2
  90. data/lib/bio/tree.rb +2 -2
  91. data/lib/bio/util/contingency_table.rb +0 -2
  92. data/lib/bio/util/restriction_enzyme/range/sequence_range.rb +2 -2
  93. data/lib/bio/util/sirna.rb +76 -16
  94. data/lib/bio/version.rb +8 -9
  95. data/sample/benchmark_clustalw_report.rb +47 -0
  96. data/sample/biofetch.rb +248 -151
  97. data/setup.rb +6 -7
  98. data/test/data/clustalw/example1-seqnos.aln +58 -0
  99. data/test/network/bio/appl/blast/test_remote.rb +1 -15
  100. data/test/network/bio/appl/test_blast.rb +0 -12
  101. data/test/network/bio/io/test_pubmed.rb +49 -0
  102. data/test/network/bio/io/test_togows.rb +0 -1
  103. data/test/network/bio/test_command.rb +65 -2
  104. data/test/unit/bio/appl/bl2seq/test_report.rb +0 -1
  105. data/test/unit/bio/appl/blast/test_report.rb +110 -48
  106. data/test/unit/bio/appl/clustalw/test_report.rb +67 -51
  107. data/test/unit/bio/appl/sim4/test_report.rb +46 -17
  108. data/test/unit/bio/appl/test_blast.rb +2 -2
  109. data/test/unit/bio/db/embl/test_embl.rb +0 -1
  110. data/test/unit/bio/db/embl/test_embl_rel89.rb +0 -1
  111. data/test/unit/bio/db/embl/{test_sptr.rb → test_uniprotkb.rb} +111 -115
  112. data/test/unit/bio/db/embl/{test_uniprot_new_part.rb → test_uniprotkb_new_part.rb} +11 -11
  113. data/test/unit/bio/db/genbank/test_genbank.rb +10 -4
  114. data/test/unit/bio/db/pdb/test_pdb.rb +14 -8
  115. data/test/unit/bio/db/test_fasta.rb +41 -1
  116. data/test/unit/bio/db/test_fastq.rb +14 -4
  117. data/test/unit/bio/db/test_gff.rb +2 -2
  118. data/test/unit/bio/db/test_phyloxml.rb +30 -30
  119. data/test/unit/bio/db/test_phyloxml_writer.rb +2 -2
  120. data/test/unit/bio/io/flatfile/test_autodetection.rb +1 -2
  121. data/test/unit/bio/io/flatfile/test_buffer.rb +7 -1
  122. data/test/unit/bio/io/flatfile/test_splitter.rb +1 -1
  123. data/test/unit/bio/io/test_togows.rb +3 -2
  124. data/test/unit/bio/sequence/test_dblink.rb +1 -1
  125. data/test/unit/bio/sequence/test_na.rb +3 -1
  126. data/test/unit/bio/test_alignment.rb +1 -2
  127. data/test/unit/bio/test_command.rb +5 -4
  128. data/test/unit/bio/test_db.rb +4 -2
  129. data/test/unit/bio/test_pathway.rb +25 -10
  130. data/test/unit/bio/util/test_sirna.rb +22 -22
  131. metadata +656 -1430
  132. data/doc/KEGG_API.rd +0 -1843
  133. data/doc/KEGG_API.rd.ja +0 -1834
  134. data/extconf.rb +0 -2
  135. data/lib/bio/appl/blast/ddbj.rb +0 -131
  136. data/lib/bio/db/kegg/taxonomy.rb +0 -280
  137. data/lib/bio/io/dbget.rb +0 -194
  138. data/lib/bio/io/ddbjrest.rb +0 -344
  139. data/lib/bio/io/ddbjxml.rb +0 -458
  140. data/lib/bio/io/ebisoap.rb +0 -158
  141. data/lib/bio/io/ensembl.rb +0 -229
  142. data/lib/bio/io/higet.rb +0 -73
  143. data/lib/bio/io/keggapi.rb +0 -363
  144. data/lib/bio/io/ncbisoap.rb +0 -156
  145. data/lib/bio/io/soapwsdl.rb +0 -119
  146. data/lib/bio/shell/plugin/keggapi.rb +0 -181
  147. data/lib/bio/shell/plugin/soap.rb +0 -87
  148. data/sample/dbget +0 -37
  149. data/sample/demo_ddbjxml.rb +0 -212
  150. data/sample/demo_kegg_taxonomy.rb +0 -92
  151. data/sample/demo_keggapi.rb +0 -502
  152. data/sample/psortplot_html.rb +0 -214
  153. data/test/network/bio/io/test_ddbjrest.rb +0 -47
  154. data/test/network/bio/io/test_ensembl.rb +0 -230
  155. data/test/network/bio/io/test_soapwsdl.rb +0 -53
  156. data/test/unit/bio/io/test_ddbjxml.rb +0 -81
  157. data/test/unit/bio/io/test_ensembl.rb +0 -111
  158. data/test/unit/bio/io/test_soapwsdl.rb +0 -33
@@ -5,7 +5,6 @@
5
5
  #
6
6
  # License:: The Ruby License
7
7
  #
8
- # $Id:$
9
8
  #
10
9
  #
11
10
  # See documents for Bio::FlatFile::BufferedInputStream and Bio::FlatFile.
@@ -151,8 +150,8 @@ module Bio
151
150
  yield self.new(fobj, uri.to_s)
152
151
  end
153
152
  else
154
- fobj = uri.open(*arg)
155
- self.new(fobj, uri.to_s)
153
+ fobj0 = uri.open(*arg)
154
+ self.new(fobj0, uri.to_s)
156
155
  end
157
156
  else
158
157
  if block_given?
@@ -160,8 +159,8 @@ module Bio
160
159
  yield self.new(fobj, uri)
161
160
  end
162
161
  else
163
- fobj = OpenURI.open_uri(uri, *arg)
164
- self.new(fobj, uri)
162
+ fobj0 = OpenURI.open_uri(uri, *arg)
163
+ self.new(fobj0, uri)
165
164
  end
166
165
  end
167
166
  end
@@ -4,7 +4,6 @@
4
4
  # Copyright:: Copyright (C) 2008 Toshiaki Katayama <k@bioruby.org>
5
5
  # License:: The Ruby License
6
6
  #
7
- # $Id:$
8
7
  #
9
8
 
10
9
  require 'bio/command'
@@ -17,11 +16,11 @@ module Bio
17
16
  # Accessing the H-invDB web services.
18
17
  #
19
18
  # * http://www.h-invitational.jp/
20
- # * http://www.jbirc.aist.go.jp/hinv/hws/doc/index.html
19
+ # * http://h-invitational.jp/hinv/hws/doc/index.html
21
20
  #
22
21
  class Hinv
23
22
 
24
- BASE_URI = "http://www.jbirc.aist.go.jp/hinv/hws/"
23
+ BASE_URI = "http://h-invitational.jp/hinv/hws/"
25
24
 
26
25
  module Common
27
26
  def query(options = nil)
@@ -15,13 +15,21 @@ module Bio
15
15
 
16
16
  class NCBI
17
17
 
18
- autoload :SOAP, 'bio/io/ncbisoap'
19
18
 
20
19
  # (Hash) Default parameters for Entrez (eUtils).
21
20
  # They may also be used for other NCBI services.
22
21
  ENTREZ_DEFAULT_PARAMETERS = {
23
- 'tool' => "#{$0} (bioruby/#{Bio::BIORUBY_VERSION_ID})",
24
- 'email' => nil,
22
+ # Cited from
23
+ # http://www.ncbi.nlm.nih.gov/books/NBK25499/#chapter4.Release_Notes
24
+ # tool:
25
+ # Name of application making the E-utility call.
26
+ # Value must be a string with no internal spaces.
27
+ 'tool' => "bioruby",
28
+ # Cited from
29
+ # http://www.ncbi.nlm.nih.gov/books/NBK25497/
30
+ # The value of email should be a complete and valid e-mail address
31
+ # of the software developer and not that of a third-party end user.
32
+ 'email' => 'staff@bioruby.org',
25
33
  }
26
34
 
27
35
  # Resets Entrez (eUtils) default parameters.
@@ -29,8 +37,8 @@ class NCBI
29
37
  # *Returns*:: (Hash) default parameters
30
38
  def self.reset_entrez_default_parameters
31
39
  h = {
32
- 'tool' => "#{$0} (bioruby/#{Bio::BIORUBY_VERSION_ID})",
33
- 'email' => nil,
40
+ 'tool' => "bioruby",
41
+ 'email' => 'staff@bioruby.org',
34
42
  }
35
43
  ENTREZ_DEFAULT_PARAMETERS.clear
36
44
  ENTREZ_DEFAULT_PARAMETERS.update(h)
@@ -45,6 +53,24 @@ class NCBI
45
53
 
46
54
  # Sets default email address used for Entrez (eUtils).
47
55
  # It may also be used for other NCBI services.
56
+ #
57
+ # In http://www.ncbi.nlm.nih.gov/books/NBK25497/
58
+ # NCBI says:
59
+ # "The value of email should be a complete and valid e-mail address of
60
+ # the software developer and not that of a third-party end user."
61
+ #
62
+ # By default, email address of BioRuby staffs is set.
63
+ #
64
+ # From the above NCBI documentation, the tool and email value is used
65
+ # only for unblocking IP addresses blocked by NCBI due to excess requests.
66
+ # For the purpose, NCBI says:
67
+ # "Please be aware that merely providing values for tool and email
68
+ # in requests is not sufficient to comply with this policy;
69
+ # these values must be registered with NCBI."
70
+ #
71
+ # Please use your own email address and tool name when registering
72
+ # tool and email values to NCBI.
73
+ #
48
74
  # ---
49
75
  # *Arguments*:
50
76
  # * (required) _str_: (String) email address
@@ -62,6 +88,17 @@ class NCBI
62
88
 
63
89
  # Sets default tool name for Entrez (eUtils).
64
90
  # It may also be used for other NCBI services.
91
+ #
92
+ # In http://www.ncbi.nlm.nih.gov/books/NBK25497/
93
+ # NCBI says:
94
+ # "The value of tool should be a string with no internal spaces that
95
+ # uniquely identifies the software producing the request."
96
+ #
97
+ # "bioruby" is set by default.
98
+ # Please use your own tool name when registering to NCBI.
99
+ #
100
+ # See the document of default_email= for more information.
101
+ #
65
102
  # ---
66
103
  # *Arguments*:
67
104
  # * (required) _str_: (String) tool name
@@ -148,7 +185,7 @@ class REST
148
185
  def ncbi_check_parameters(opts)
149
186
  #return if Time.now < Time.gm(2010,5,31)
150
187
  if opts['email'].to_s.empty? then
151
- raise 'Set email parameter for the query, or set Bio::NCBI.default_email = "(your email address)"'
188
+ raise 'Set email parameter for the query, or set Bio::NCBI.default_email = "(email address of the author of this software)"'
152
189
  end
153
190
  if opts['tool'].to_s.empty? then
154
191
  raise 'Set tool parameter for the query, or set Bio::NCBI.default_tool = "(your tool name)"'
@@ -5,47 +5,42 @@
5
5
  # Copyright:: Copyright (C) 2006 Jan Aerts <jan.aerts@bbsrc.ac.uk>
6
6
  # License:: The Ruby License
7
7
  #
8
- # $Id:$
9
- #
10
8
 
11
9
  require 'bio/io/ncbirest'
12
- require 'bio/command'
13
- require 'cgi'
14
10
 
15
11
  module Bio
16
12
 
17
13
  # == Description
18
14
  #
19
15
  # The Bio::PubMed class provides several ways to retrieve bibliographic
20
- # information from the PubMed database at
21
- # http://www.ncbi.nlm.nih.gov/sites/entrez?db=PubMed
16
+ # information from the PubMed database at NCBI.
22
17
  #
23
18
  # Basically, two types of queries are possible:
24
19
  #
25
20
  # * searching for PubMed IDs given a query string:
26
21
  # * Bio::PubMed#esearch (recommended)
27
- # * Bio::PubMed#search (only retrieves top 20 hits)
22
+ # * Bio::PubMed#search (only retrieves top 20 hits; will be deprecated)
28
23
  #
29
24
  # * retrieving the MEDLINE text (i.e. authors, journal, abstract, ...)
30
25
  # given a PubMed ID
31
26
  # * Bio::PubMed#efetch (recommended)
32
- # * Bio::PubMed#query (unstable for the change of the HTML design)
33
- # * Bio::PubMed#pmfetch (still working but could be obsoleted by NCBI)
27
+ # * Bio::PubMed#query (will be deprecated)
28
+ # * Bio::PubMed#pmfetch (will be deprecated)
34
29
  #
35
- # The different methods within the same group are interchangeable and should
36
- # return the same result.
30
+ # Since BioRuby 1.5, all implementations uses NCBI E-Utilities services.
31
+ # The different methods within the same group still remain because
32
+ # specifications of arguments and/or return values are different.
33
+ # The search, query, and pmfetch will be obsoleted in the future.
37
34
  #
38
35
  # Additional information about the MEDLINE format and PubMed programmable
39
36
  # APIs can be found on the following websites:
40
37
  #
41
- # * PubMed Overview:
42
- # http://www.ncbi.nlm.nih.gov/entrez/query/static/overview.html
43
- # * PubMed help:
44
- # http://www.ncbi.nlm.nih.gov/entrez/query/static/help/pmhelp.html
45
- # * Entrez utilities index:
46
- # http://www.ncbi.nlm.nih.gov/entrez/utils/utils_index.html
47
- # * How to link:
48
- # http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=helplinks.chapter.linkshelp
38
+ # * PubMed Tutorial:
39
+ # http://www.nlm.nih.gov/bsd/disted/pubmedtutorial/index.html
40
+ # * E-utilities Quick Start:
41
+ # http://www.ncbi.nlm.nih.gov/books/NBK25500/
42
+ # * Creating a Web Link to PubMed:
43
+ # http://www.ncbi.nlm.nih.gov/books/NBK3862/
49
44
  #
50
45
  # == Usage
51
46
  #
@@ -61,10 +56,14 @@ module Bio
61
56
  # end
62
57
  #
63
58
  # # To retrieve the MEDLINE entry for a given PubMed ID:
64
- # puts Bio::PubMed.efetch("10592173", "14693808")
59
+ # Bio::PubMed.efetch("10592173").each { |x| puts x }
65
60
  # puts Bio::PubMed.query("10592173")
66
61
  # puts Bio::PubMed.pmfetch("10592173")
67
62
  #
63
+ # # To retrieve MEDLINE entries for given PubMed IDs:
64
+ # Bio::PubMed.efetch([ "10592173", "14693808" ]).each { |x| puts x }
65
+ # puts Bio::PubMed.query("10592173", "14693808") # returns a String
66
+ #
68
67
  # # This can be converted into a Bio::MEDLINE object:
69
68
  # manuscript = Bio::PubMed.query("10592173")
70
69
  # medline = Bio::MEDLINE.new(manuscript)
@@ -80,15 +79,15 @@ class PubMed < Bio::NCBI::REST
80
79
  # *Arguments*:
81
80
  # * _str_: query string (required)
82
81
  # * _hash_: hash of E-Utils options
83
- # * _retmode_: "xml", "html", ...
84
- # * _rettype_: "medline", ...
85
- # * _retmax_: integer (default 100)
86
- # * _retstart_: integer
87
- # * _field_
88
- # * _reldate_
89
- # * _mindate_
90
- # * _maxdate_
91
- # * _datetype_
82
+ # * _"retmode"_: "xml", "html", ...
83
+ # * _"rettype"_: "medline", ...
84
+ # * _"retmax"_: integer (default 100)
85
+ # * _"retstart"_: integer
86
+ # * _"field"_
87
+ # * _"reldate"_
88
+ # * _"mindate"_
89
+ # * _"maxdate"_
90
+ # * _"datetype"_
92
91
  # *Returns*:: array of PubMed IDs or a number of results
93
92
  def esearch(str, hash = {})
94
93
  opts = { "db" => "pubmed" }
@@ -104,15 +103,15 @@ class PubMed < Bio::NCBI::REST
104
103
  # *Arguments*:
105
104
  # * _ids_: list of PubMed IDs (required)
106
105
  # * _hash_: hash of E-Utils options
107
- # * _retmode_: "xml", "html", ...
108
- # * _rettype_: "medline", ...
109
- # * _retmax_: integer (default 100)
110
- # * _retstart_: integer
111
- # * _field_
112
- # * _reldate_
113
- # * _mindate_
114
- # * _maxdate_
115
- # * _datetype_
106
+ # * _"retmode"_: "xml", "html", ...
107
+ # * _"rettype"_: "medline", ...
108
+ # * _"retmax"_: integer (default 100)
109
+ # * _"retstart"_: integer
110
+ # * _"field"_
111
+ # * _"reldate"_
112
+ # * _"mindate"_
113
+ # * _"maxdate"_
114
+ # * _"datetype"_
116
115
  # *Returns*:: Array of MEDLINE formatted String
117
116
  def efetch(ids, hash = {})
118
117
  opts = { "db" => "pubmed", "rettype" => "medline" }
@@ -124,26 +123,29 @@ class PubMed < Bio::NCBI::REST
124
123
  result
125
124
  end
126
125
 
126
+ # This method will be DEPRECATED in the future.
127
+ #
127
128
  # Search the PubMed database by given keywords using entrez query and returns
128
- # an array of PubMed IDs. Caution: this method returns the first 20 hits only.
129
+ # an array of PubMed IDs.
130
+ #
131
+ # Caution: this method returns the first 20 hits only,
132
+ #
129
133
  # Instead, use of the 'esearch' method is strongly recomended.
134
+ #
135
+ # Implementation details: Since BioRuby 1.5, this method internally uses
136
+ # NCBI EUtils with retmax=20 by using Bio::PubMed#efetch method.
137
+ #
130
138
  # ---
131
139
  # *Arguments*:
132
140
  # * _id_: query string (required)
133
141
  # *Returns*:: array of PubMed IDs
134
142
  def search(str)
135
- host = "www.ncbi.nlm.nih.gov"
136
- path = "/sites/entrez?tool=bioruby&cmd=Search&doptcmdl=Brief&db=PubMed&term="
137
-
138
- ncbi_access_wait
139
-
140
- http = Bio::Command.new_http(host)
141
- response = http.get(path + CGI.escape(str))
142
- result = response.body
143
- result = result.scan(/value="(\d+)" id="UidCheckBox"/m).flatten
144
- return result
143
+ warn "Bio::PubMed#search is now a subset of Bio::PubMed#esearch. Using Bio::PubMed#esearch is recommended." if $VERBOSE
144
+ esearch(str, { "retmax" => 20 })
145
145
  end
146
146
 
147
+ # This method will be DEPRECATED in the future.
148
+ #
147
149
  # Retrieve PubMed entry by PMID and returns MEDLINE formatted string using
148
150
  # entrez query.
149
151
  # ---
@@ -151,68 +153,61 @@ class PubMed < Bio::NCBI::REST
151
153
  # * _id_: PubMed ID (required)
152
154
  # *Returns*:: MEDLINE formatted String
153
155
  def query(*ids)
154
- host = "www.ncbi.nlm.nih.gov"
155
- path = "/sites/entrez?tool=bioruby&cmd=Text&dopt=MEDLINE&db=PubMed&uid="
156
- list = ids.collect { |x| CGI.escape(x.to_s) }.join(",")
157
-
158
- ncbi_access_wait
159
-
160
- http = Bio::Command.new_http(host)
161
- response = http.get(path + list)
162
- result = response.body
163
- result = result.scan(/<pre>\s*(.*?)<\/pre>/m).flatten
164
-
165
- if result =~ /id:.*Error occurred/
166
- # id: xxxxx Error occurred: Article does not exist
167
- raise( result )
156
+ warn "Bio::PubMed#query internally uses Bio::PubMed#efetch. Using Bio::PubMed#efetch is recommended." if $VERBOSE
157
+ ret = efetch(ids)
158
+ if ret && ret.size > 0 then
159
+ ret.join("\n\n") + "\n"
168
160
  else
169
- if ids.size > 1
170
- return result
171
- else
172
- return result.first
173
- end
161
+ ""
174
162
  end
175
163
  end
176
164
 
177
- # Retrieve PubMed entry by PMID and returns MEDLINE formatted string using
178
- # entrez pmfetch.
165
+ # This method will be DEPRECATED in the future.
166
+ #
167
+ # Retrieve PubMed entry by PMID and returns MEDLINE formatted string.
168
+ #
179
169
  # ---
180
170
  # *Arguments*:
181
171
  # * _id_: PubMed ID (required)
182
172
  # *Returns*:: MEDLINE formatted String
183
173
  def pmfetch(id)
184
- host = "www.ncbi.nlm.nih.gov"
185
- path = "/entrez/utils/pmfetch.fcgi?tool=bioruby&mode=text&report=medline&db=PubMed&id="
186
-
187
- ncbi_access_wait
174
+ warn "Bio::PubMed#pmfetch internally use Bio::PubMed#efetch. Using Bio::PubMed#efetch is recommended." if $VERBOSE
188
175
 
189
- http = Bio::Command.new_http(host)
190
- response = http.get(path + CGI.escape(id.to_s))
191
- result = response.body
192
- if result =~ /#{id}\s+Error/
193
- raise( result )
176
+ ret = efetch(id)
177
+ if ret && ret.size > 0 then
178
+ ret.join("\n\n") + "\n"
194
179
  else
195
- result = result.gsub("\r", "\n").squeeze("\n").gsub(/<\/?pre>/, '')
196
- return result
180
+ ""
197
181
  end
198
182
  end
199
183
 
184
+ # The same as Bio::PubMed.new.esearch(*args).
200
185
  def self.esearch(*args)
201
186
  self.new.esearch(*args)
202
187
  end
203
188
 
189
+ # The same as Bio::PubMed.new.efetch(*args).
204
190
  def self.efetch(*args)
205
191
  self.new.efetch(*args)
206
192
  end
207
193
 
194
+ # This method will be DEPRECATED. Use esearch method.
195
+ #
196
+ # The same as Bio::PubMed.new.search(*args).
208
197
  def self.search(*args)
209
198
  self.new.search(*args)
210
199
  end
211
200
 
201
+ # This method will be DEPRECATED. Use efetch method.
202
+ #
203
+ # The same as Bio::PubMed.new.query(*args).
212
204
  def self.query(*args)
213
205
  self.new.query(*args)
214
206
  end
215
207
 
208
+ # This method will be DEPRECATED. Use efetch method.
209
+ #
210
+ # The same as Bio::PubMed.new.pmfetch(*args).
216
211
  def self.pmfetch(*args)
217
212
  self.new.pmfetch(*args)
218
213
  end
@@ -4,7 +4,6 @@
4
4
  # Copyright:: Copyright (C) 2009 Naohisa Goto <ng@bioruby.org>
5
5
  # License:: The Ruby License
6
6
  #
7
- # $Id:$
8
7
  #
9
8
  # Bio::TogoWS is a set of clients for the TogoWS web services
10
9
  # (http://togows.dbcls.jp/).
@@ -245,9 +244,16 @@ module Bio
245
244
  rescue NoMethodError
246
245
  ids = ids.to_s
247
246
  end
248
- ids = a.join(',') if a
249
247
 
250
- arg = [ 'entry', database, ids ]
248
+ arg = [ 'entry', database ]
249
+ if a then
250
+ b = a.dup
251
+ (a.size - 1).downto(1) { |i| b.insert(i, :",") }
252
+ arg.concat b
253
+ else
254
+ arg.push ids
255
+ end
256
+
251
257
  arg.push field if field
252
258
  arg[-1] = "#{arg[-1]}.#{format}" if format
253
259
  response = get(*arg)
@@ -280,7 +286,7 @@ module Bio
280
286
  arg = [ 'search', database, query ]
281
287
  if offset then
282
288
  limit ||= 1
283
- arg.push "#{offset},#{limit}"
289
+ arg.concat [ "#{offset}", :",", "#{limit}" ]
284
290
  end
285
291
  arg[-1] = "#{arg[-1]}.#{format}" if format
286
292
  response = get(*arg)
@@ -398,8 +404,7 @@ module Bio
398
404
  end
399
405
 
400
406
  # Access to the TogoWS by using POST method.
401
- # The data is stored to the form key 'data'.
402
- # Mime type is 'application/x-www-form-urlencoded'.
407
+ # Mime type is 'application/octet-stream'.
403
408
  # ---
404
409
  # *Arguments*:
405
410
  # * (required) _data_: String
@@ -408,19 +413,37 @@ module Bio
408
413
  def post_data(data, *paths)
409
414
  path = make_path(paths)
410
415
  if @debug then
411
- $stderr.puts "TogoWS: Bio::Command.http_post_form(#{path.inspect}, { \"data\" => (#{data.size} bytes) }, #{@header.inspect})"
416
+ $stderr.puts "TogoWS: Bio::Command.http_post(#{path.inspect}, data(#{data.size} bytes), #{@header.inspect})"
412
417
  end
413
418
  togows_access_wait
414
- Bio::Command.http_post_form(@http, path, { 'data' => data }, @header)
419
+ Bio::Command.http_post(@http, path, data, @header)
415
420
  end
416
421
 
417
422
  # Generates path string from the given paths.
423
+ # Symbol objects are not URL-escaped.
424
+ # String objects are joined with '/'.
425
+ # Symbol objects are joined directly without '/'.
426
+ #
418
427
  # ---
419
428
  # *Arguments*:
420
- # * (required) _paths_: Array containing String objects
429
+ # * (required) _paths_: Array containing String or Symbol objects
421
430
  # *Returns*:: String
422
431
  def make_path(paths)
423
- @pathbase + paths.collect { |x| CGI.escape(x.to_s) }.join('/')
432
+ flag_sep = false
433
+ a = paths.collect do |x|
434
+ case x
435
+ when Symbol
436
+ # without URL escape
437
+ flag_sep = false
438
+ str = x.to_s
439
+ else
440
+ str = CGI.escape(x.to_s)
441
+ str = '/' + str if flag_sep
442
+ flag_sep = true
443
+ end
444
+ str
445
+ end
446
+ @pathbase + a.join('')
424
447
  end
425
448
 
426
449
  # If response.code == "200", returns body as a String.