bio 1.4.3.0001 → 1.5.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.
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.