bio 0.7.1 → 1.0.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/bin/bioruby +71 -27
- data/bin/br_biofetch.rb +5 -17
- data/bin/br_bioflat.rb +14 -26
- data/bin/br_biogetseq.rb +6 -18
- data/bin/br_pmfetch.rb +6 -16
- data/doc/Changes-0.7.rd +35 -0
- data/doc/KEGG_API.rd +287 -172
- data/doc/KEGG_API.rd.ja +273 -160
- data/doc/Tutorial.rd +18 -9
- data/doc/Tutorial.rd.ja +656 -138
- data/lib/bio.rb +6 -24
- data/lib/bio/alignment.rb +5 -5
- data/lib/bio/appl/blast.rb +132 -98
- data/lib/bio/appl/blast/format0.rb +9 -19
- data/lib/bio/appl/blast/wublast.rb +5 -18
- data/lib/bio/appl/emboss.rb +40 -47
- data/lib/bio/appl/hmmer.rb +116 -82
- data/lib/bio/appl/hmmer/report.rb +509 -364
- data/lib/bio/appl/spidey/report.rb +7 -18
- data/lib/bio/data/na.rb +3 -21
- data/lib/bio/db.rb +3 -21
- data/lib/bio/db/aaindex.rb +147 -52
- data/lib/bio/db/embl/common.rb +27 -6
- data/lib/bio/db/embl/embl.rb +18 -10
- data/lib/bio/db/embl/sptr.rb +87 -67
- data/lib/bio/db/embl/swissprot.rb +32 -3
- data/lib/bio/db/embl/trembl.rb +32 -3
- data/lib/bio/db/embl/uniprot.rb +32 -3
- data/lib/bio/db/fasta.rb +327 -289
- data/lib/bio/db/medline.rb +25 -4
- data/lib/bio/db/nbrf.rb +12 -20
- data/lib/bio/db/pdb.rb +4 -1
- data/lib/bio/db/pdb/chemicalcomponent.rb +240 -0
- data/lib/bio/db/pdb/pdb.rb +13 -8
- data/lib/bio/db/rebase.rb +93 -97
- data/lib/bio/feature.rb +2 -31
- data/lib/bio/io/ddbjxml.rb +167 -139
- data/lib/bio/io/fastacmd.rb +89 -56
- data/lib/bio/io/flatfile.rb +994 -278
- data/lib/bio/io/flatfile/index.rb +257 -194
- data/lib/bio/io/flatfile/indexer.rb +37 -29
- data/lib/bio/reference.rb +147 -64
- data/lib/bio/sequence.rb +57 -417
- data/lib/bio/sequence/aa.rb +64 -0
- data/lib/bio/sequence/common.rb +175 -0
- data/lib/bio/sequence/compat.rb +68 -0
- data/lib/bio/sequence/format.rb +134 -0
- data/lib/bio/sequence/generic.rb +24 -0
- data/lib/bio/sequence/na.rb +189 -0
- data/lib/bio/shell.rb +9 -23
- data/lib/bio/shell/core.rb +130 -125
- data/lib/bio/shell/demo.rb +143 -0
- data/lib/bio/shell/{session.rb → interface.rb} +42 -40
- data/lib/bio/shell/object.rb +52 -0
- data/lib/bio/shell/plugin/codon.rb +4 -22
- data/lib/bio/shell/plugin/emboss.rb +23 -0
- data/lib/bio/shell/plugin/entry.rb +34 -25
- data/lib/bio/shell/plugin/flatfile.rb +5 -23
- data/lib/bio/shell/plugin/keggapi.rb +11 -24
- data/lib/bio/shell/plugin/midi.rb +5 -23
- data/lib/bio/shell/plugin/obda.rb +4 -22
- data/lib/bio/shell/plugin/seq.rb +6 -24
- data/lib/bio/shell/rails/Rakefile +10 -0
- data/lib/bio/shell/rails/app/controllers/application.rb +4 -0
- data/lib/bio/shell/rails/app/controllers/shell_controller.rb +94 -0
- data/lib/bio/shell/rails/app/helpers/application_helper.rb +3 -0
- data/lib/bio/shell/rails/app/models/shell_connection.rb +30 -0
- data/lib/bio/shell/rails/app/views/layouts/shell.rhtml +37 -0
- data/lib/bio/shell/rails/app/views/shell/history.rhtml +5 -0
- data/lib/bio/shell/rails/app/views/shell/index.rhtml +2 -0
- data/lib/bio/shell/rails/app/views/shell/show.rhtml +13 -0
- data/lib/bio/shell/rails/config/boot.rb +19 -0
- data/lib/bio/shell/rails/config/database.yml +85 -0
- data/lib/bio/shell/rails/config/environment.rb +53 -0
- data/lib/bio/shell/rails/config/environments/development.rb +19 -0
- data/lib/bio/shell/rails/config/environments/production.rb +19 -0
- data/lib/bio/shell/rails/config/environments/test.rb +19 -0
- data/lib/bio/shell/rails/config/routes.rb +19 -0
- data/lib/bio/shell/rails/doc/README_FOR_APP +2 -0
- data/lib/bio/shell/rails/public/404.html +8 -0
- data/lib/bio/shell/rails/public/500.html +8 -0
- data/lib/bio/shell/rails/public/dispatch.cgi +10 -0
- data/lib/bio/shell/rails/public/dispatch.fcgi +24 -0
- data/lib/bio/shell/rails/public/dispatch.rb +10 -0
- data/lib/bio/shell/rails/public/favicon.ico +0 -0
- data/lib/bio/shell/rails/public/images/icon.png +0 -0
- data/lib/bio/shell/rails/public/images/rails.png +0 -0
- data/lib/bio/shell/rails/public/index.html +277 -0
- data/lib/bio/shell/rails/public/javascripts/controls.js +750 -0
- data/lib/bio/shell/rails/public/javascripts/dragdrop.js +584 -0
- data/lib/bio/shell/rails/public/javascripts/effects.js +854 -0
- data/lib/bio/shell/rails/public/javascripts/prototype.js +1785 -0
- data/lib/bio/shell/rails/public/robots.txt +1 -0
- data/lib/bio/shell/rails/public/stylesheets/main.css +187 -0
- data/lib/bio/shell/rails/script/about +3 -0
- data/lib/bio/shell/rails/script/breakpointer +3 -0
- data/lib/bio/shell/rails/script/console +3 -0
- data/lib/bio/shell/rails/script/destroy +3 -0
- data/lib/bio/shell/rails/script/generate +3 -0
- data/lib/bio/shell/rails/script/performance/benchmarker +3 -0
- data/lib/bio/shell/rails/script/performance/profiler +3 -0
- data/lib/bio/shell/rails/script/plugin +3 -0
- data/lib/bio/shell/rails/script/process/reaper +3 -0
- data/lib/bio/shell/rails/script/process/spawner +3 -0
- data/lib/bio/shell/rails/script/process/spinner +3 -0
- data/lib/bio/shell/rails/script/runner +3 -0
- data/lib/bio/shell/rails/script/server +42 -0
- data/lib/bio/shell/rails/test/test_helper.rb +28 -0
- data/lib/bio/shell/web.rb +90 -0
- data/lib/bio/util/contingency_table.rb +231 -225
- data/sample/any2fasta.rb +59 -0
- data/test/data/HMMER/hmmpfam.out +64 -0
- data/test/data/HMMER/hmmsearch.out +88 -0
- data/test/data/aaindex/DAYM780301 +30 -0
- data/test/data/aaindex/PRAM900102 +20 -0
- data/test/data/bl2seq/cd8a_cd8b_blastp.bl2seq +53 -0
- data/test/data/bl2seq/cd8a_p53_e-5blastp.bl2seq +37 -0
- data/test/data/blast/{eco:b0002.faa → b0002.faa} +0 -0
- data/test/data/blast/{eco:b0002.faa.m0 → b0002.faa.m0} +2 -2
- data/test/data/blast/{eco:b0002.faa.m7 → b0002.faa.m7} +1 -1
- data/test/data/blast/{eco:b0002.faa.m8 → b0002.faa.m8} +0 -0
- data/test/unit/bio/appl/bl2seq/test_report.rb +134 -0
- data/test/unit/bio/appl/blast/test_report.rb +15 -12
- data/test/unit/bio/appl/blast/test_xmlparser.rb +4 -4
- data/test/unit/bio/appl/hmmer/test_report.rb +355 -0
- data/test/unit/bio/appl/test_blast.rb +5 -5
- data/test/unit/bio/data/test_na.rb +9 -18
- data/test/unit/bio/db/pdb/test_pdb.rb +169 -0
- data/test/unit/bio/db/test_aaindex.rb +197 -0
- data/test/unit/bio/io/test_fastacmd.rb +55 -0
- data/test/unit/bio/sequence/test_aa.rb +102 -0
- data/test/unit/bio/sequence/test_common.rb +178 -0
- data/test/unit/bio/sequence/test_compat.rb +82 -0
- data/test/unit/bio/sequence/test_na.rb +242 -0
- data/test/unit/bio/shell/plugin/test_seq.rb +29 -19
- data/test/unit/bio/test_alignment.rb +15 -7
- data/test/unit/bio/test_reference.rb +198 -0
- data/test/unit/bio/test_sequence.rb +4 -49
- data/test/unit/bio/test_shell.rb +2 -2
- metadata +118 -15
- data/lib/bio/io/brdb.rb +0 -103
- data/lib/bioruby.rb +0 -34
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = bio/sequence/na.rb - nucleic acid sequence class
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (C) 2006
|
|
5
|
+
# Toshiaki Katayama <k@bioruby.org>
|
|
6
|
+
# License:: Ruby's
|
|
7
|
+
#
|
|
8
|
+
# $Id: na.rb,v 1.2 2006/02/06 14:13:52 k Exp $
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'bio/sequence/common'
|
|
12
|
+
|
|
13
|
+
module Bio
|
|
14
|
+
|
|
15
|
+
autoload :NucleicAcid, 'bio/data/na'
|
|
16
|
+
autoload :CodonTable, 'bio/data/codontable'
|
|
17
|
+
|
|
18
|
+
class Sequence
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# Nucleic Acid sequence
|
|
22
|
+
class NA < String
|
|
23
|
+
|
|
24
|
+
include Bio::Sequence::Common
|
|
25
|
+
|
|
26
|
+
# Generate a nucleic acid sequence object from a string.
|
|
27
|
+
def initialize(str)
|
|
28
|
+
super
|
|
29
|
+
self.downcase!
|
|
30
|
+
self.tr!(" \t\n\r",'')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# This method depends on Locations class, see bio/location.rb
|
|
34
|
+
def splicing(position)
|
|
35
|
+
mRNA = super
|
|
36
|
+
if mRNA.rna?
|
|
37
|
+
mRNA.tr!('t', 'u')
|
|
38
|
+
else
|
|
39
|
+
mRNA.tr!('u', 't')
|
|
40
|
+
end
|
|
41
|
+
mRNA
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns complement sequence without reversing ("atgc" -> "tacg")
|
|
45
|
+
def forward_complement
|
|
46
|
+
s = self.class.new(self)
|
|
47
|
+
s.forward_complement!
|
|
48
|
+
s
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Convert to complement sequence without reversing ("atgc" -> "tacg")
|
|
52
|
+
def forward_complement!
|
|
53
|
+
if self.rna?
|
|
54
|
+
self.tr!('augcrymkdhvbswn', 'uacgyrkmhdbvswn')
|
|
55
|
+
else
|
|
56
|
+
self.tr!('atgcrymkdhvbswn', 'tacgyrkmhdbvswn')
|
|
57
|
+
end
|
|
58
|
+
self
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns reverse complement sequence ("atgc" -> "gcat")
|
|
62
|
+
def reverse_complement
|
|
63
|
+
s = self.class.new(self)
|
|
64
|
+
s.reverse_complement!
|
|
65
|
+
s
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Convert to reverse complement sequence ("atgc" -> "gcat")
|
|
69
|
+
def reverse_complement!
|
|
70
|
+
self.reverse!
|
|
71
|
+
self.forward_complement!
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Aliases for short
|
|
75
|
+
alias complement reverse_complement
|
|
76
|
+
alias complement! reverse_complement!
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# Translate into the amino acid sequence from the given frame and the
|
|
80
|
+
# selected codon table. The table also can be a Bio::CodonTable object.
|
|
81
|
+
# The 'unknown' character is used for invalid/unknown codon (can be
|
|
82
|
+
# used for 'nnn' and/or gap translation in practice).
|
|
83
|
+
#
|
|
84
|
+
# Frame can be 1, 2 or 3 for the forward strand and -1, -2 or -3
|
|
85
|
+
# (4, 5 or 6 is also accepted) for the reverse strand.
|
|
86
|
+
def translate(frame = 1, table = 1, unknown = 'X')
|
|
87
|
+
if table.is_a?(Bio::CodonTable)
|
|
88
|
+
ct = table
|
|
89
|
+
else
|
|
90
|
+
ct = Bio::CodonTable[table]
|
|
91
|
+
end
|
|
92
|
+
naseq = self.dna
|
|
93
|
+
case frame
|
|
94
|
+
when 1, 2, 3
|
|
95
|
+
from = frame - 1
|
|
96
|
+
when 4, 5, 6
|
|
97
|
+
from = frame - 4
|
|
98
|
+
naseq.complement!
|
|
99
|
+
when -1, -2, -3
|
|
100
|
+
from = -1 - frame
|
|
101
|
+
naseq.complement!
|
|
102
|
+
else
|
|
103
|
+
from = 0
|
|
104
|
+
end
|
|
105
|
+
nalen = naseq.length - from
|
|
106
|
+
nalen -= nalen % 3
|
|
107
|
+
aaseq = naseq[from, nalen].gsub(/.{3}/) {|codon| ct[codon] or unknown}
|
|
108
|
+
return Bio::Sequence::AA.new(aaseq)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Returns counts of the each codon in the sequence by Hash.
|
|
112
|
+
def codon_usage
|
|
113
|
+
hash = Hash.new(0)
|
|
114
|
+
self.window_search(3, 3) do |codon|
|
|
115
|
+
hash[codon] += 1
|
|
116
|
+
end
|
|
117
|
+
return hash
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Calculate the ratio of GC / ATGC bases in percent.
|
|
121
|
+
def gc_percent
|
|
122
|
+
count = self.composition
|
|
123
|
+
at = count['a'] + count['t'] + count['u']
|
|
124
|
+
gc = count['g'] + count['c']
|
|
125
|
+
gc = 100 * gc / (at + gc)
|
|
126
|
+
return gc
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Show abnormal bases other than 'atgcu'.
|
|
130
|
+
def illegal_bases
|
|
131
|
+
self.scan(/[^atgcu]/).sort.uniq
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Estimate the weight of this biological string molecule.
|
|
135
|
+
def molecular_weight
|
|
136
|
+
if self.rna?
|
|
137
|
+
Bio::NucleicAcid.weight(self, true)
|
|
138
|
+
else
|
|
139
|
+
Bio::NucleicAcid.weight(self)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Convert the universal code string into the regular expression.
|
|
144
|
+
def to_re
|
|
145
|
+
if self.rna?
|
|
146
|
+
Bio::NucleicAcid.to_re(self.dna, true)
|
|
147
|
+
else
|
|
148
|
+
Bio::NucleicAcid.to_re(self)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Convert the self string into the list of the names of the each base.
|
|
153
|
+
def names
|
|
154
|
+
array = []
|
|
155
|
+
self.each_byte do |x|
|
|
156
|
+
array.push(Bio::NucleicAcid.names[x.chr.upcase])
|
|
157
|
+
end
|
|
158
|
+
return array
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Output a DNA string by substituting 'u' to 't'.
|
|
162
|
+
def dna
|
|
163
|
+
self.tr('u', 't')
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def dna!
|
|
167
|
+
self.tr!('u', 't')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Output a RNA string by substituting 't' to 'u'.
|
|
171
|
+
def rna
|
|
172
|
+
self.tr('t', 'u')
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def rna!
|
|
176
|
+
self.tr!('t', 'u')
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def rna?
|
|
180
|
+
self.index('u')
|
|
181
|
+
end
|
|
182
|
+
protected :rna?
|
|
183
|
+
|
|
184
|
+
end # NA
|
|
185
|
+
|
|
186
|
+
end # Sequence
|
|
187
|
+
|
|
188
|
+
end # Bio
|
|
189
|
+
|
data/lib/bio/shell.rb
CHANGED
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
#
|
|
2
2
|
# = bio/shell.rb - Loading all BioRuby shell features
|
|
3
3
|
#
|
|
4
|
-
# Copyright::
|
|
5
|
-
#
|
|
6
|
-
# License
|
|
4
|
+
# Copyright:: Copyright (C) 2005, 2006
|
|
5
|
+
# Toshiaki Katayama <k@bioruby.org>
|
|
6
|
+
# License: Ruby's
|
|
7
7
|
#
|
|
8
|
-
# $Id: shell.rb,v 1.
|
|
9
|
-
#
|
|
10
|
-
#--
|
|
11
|
-
#
|
|
12
|
-
# This library is free software; you can redistribute it and/or
|
|
13
|
-
# modify it under the terms of the GNU Lesser General Public
|
|
14
|
-
# License as published by the Free Software Foundation; either
|
|
15
|
-
# version 2 of the License, or (at your option) any later version.
|
|
16
|
-
#
|
|
17
|
-
# This library is distributed in the hope that it will be useful,
|
|
18
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20
|
-
# Lesser General Public License for more details.
|
|
21
|
-
#
|
|
22
|
-
# You should have received a copy of the GNU Lesser General Public
|
|
23
|
-
# License along with this library; if not, write to the Free Software
|
|
24
|
-
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
25
|
-
#
|
|
26
|
-
#++
|
|
8
|
+
# $Id: shell.rb,v 1.15 2006/02/27 09:34:23 k Exp $
|
|
27
9
|
#
|
|
28
10
|
|
|
29
11
|
require 'bio'
|
|
@@ -34,7 +16,10 @@ require 'pp'
|
|
|
34
16
|
module Bio::Shell
|
|
35
17
|
|
|
36
18
|
require 'bio/shell/core'
|
|
37
|
-
require 'bio/shell/
|
|
19
|
+
require 'bio/shell/interface'
|
|
20
|
+
require 'bio/shell/object'
|
|
21
|
+
require 'bio/shell/web'
|
|
22
|
+
require 'bio/shell/demo'
|
|
38
23
|
require 'bio/shell/plugin/entry'
|
|
39
24
|
require 'bio/shell/plugin/seq'
|
|
40
25
|
require 'bio/shell/plugin/midi'
|
|
@@ -42,6 +27,7 @@ module Bio::Shell
|
|
|
42
27
|
require 'bio/shell/plugin/flatfile'
|
|
43
28
|
require 'bio/shell/plugin/obda'
|
|
44
29
|
require 'bio/shell/plugin/keggapi'
|
|
30
|
+
require 'bio/shell/plugin/emboss'
|
|
45
31
|
|
|
46
32
|
extend Ghost
|
|
47
33
|
extend Private
|
data/lib/bio/shell/core.rb
CHANGED
|
@@ -1,44 +1,25 @@
|
|
|
1
1
|
#
|
|
2
2
|
# = bio/shell/core.rb - internal methods for the BioRuby shell
|
|
3
3
|
#
|
|
4
|
-
# Copyright::
|
|
5
|
-
#
|
|
6
|
-
# License::
|
|
4
|
+
# Copyright:: Copyright (C) 2005, 2006
|
|
5
|
+
# Toshiaki Katayama <k@bioruby.org>
|
|
6
|
+
# License:: Ruby's
|
|
7
7
|
#
|
|
8
|
-
# $Id: core.rb,v 1.
|
|
9
|
-
#
|
|
10
|
-
#--
|
|
11
|
-
#
|
|
12
|
-
# This library is free software; you can redistribute it and/or
|
|
13
|
-
# modify it under the terms of the GNU Lesser General Public
|
|
14
|
-
# License as published by the Free Software Foundation; either
|
|
15
|
-
# version 2 of the License, or (at your option) any later version.
|
|
16
|
-
#
|
|
17
|
-
# This library is distributed in the hope that it will be useful,
|
|
18
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20
|
-
# Lesser General Public License for more details.
|
|
21
|
-
#
|
|
22
|
-
# You should have received a copy of the GNU Lesser General Public
|
|
23
|
-
# License along with this library; if not, write to the Free Software
|
|
24
|
-
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
25
|
-
#
|
|
26
|
-
#++
|
|
8
|
+
# $Id: core.rb,v 1.21 2006/02/27 09:09:57 k Exp $
|
|
27
9
|
#
|
|
28
10
|
|
|
11
|
+
|
|
29
12
|
module Bio::Shell::Ghost
|
|
30
13
|
|
|
14
|
+
SAVEDIR = "session/"
|
|
31
15
|
CONFIG = "config"
|
|
32
16
|
OBJECT = "object"
|
|
33
17
|
HISTORY = "history"
|
|
34
18
|
SCRIPT = "script.rb"
|
|
35
19
|
PLUGIN = "plugin/"
|
|
20
|
+
DATADIR = "data/"
|
|
36
21
|
BIOFLAT = "bioflat/"
|
|
37
22
|
|
|
38
|
-
SITEDIR = "/etc/bioinformatics/bioruby/"
|
|
39
|
-
USERDIR = "#{ENV['HOME']}/.bioinformatics/bioruby/"
|
|
40
|
-
SAVEDIR = ".bioruby/"
|
|
41
|
-
|
|
42
23
|
MARSHAL = [ Marshal::MAJOR_VERSION, Marshal::MINOR_VERSION ]
|
|
43
24
|
|
|
44
25
|
MESSAGE = "...BioRuby in the shell..."
|
|
@@ -55,6 +36,14 @@ module Bio::Shell::Ghost
|
|
|
55
36
|
:n => "\e[00m", :none => "\e[00m", :reset => "\e[00m",
|
|
56
37
|
}
|
|
57
38
|
|
|
39
|
+
def history
|
|
40
|
+
SAVEDIR + HISTORY
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def datadir
|
|
44
|
+
DATADIR
|
|
45
|
+
end
|
|
46
|
+
|
|
58
47
|
def esc_seq
|
|
59
48
|
ESC_SEQ
|
|
60
49
|
end
|
|
@@ -76,48 +65,19 @@ module Bio::Shell::Ghost
|
|
|
76
65
|
# A hash to store temporal (per session) configurations
|
|
77
66
|
attr_accessor :cache
|
|
78
67
|
|
|
79
|
-
def
|
|
68
|
+
def load_session
|
|
80
69
|
load_object
|
|
81
70
|
load_history
|
|
82
71
|
opening_splash
|
|
83
72
|
end
|
|
84
73
|
|
|
85
|
-
def
|
|
74
|
+
def save_session
|
|
86
75
|
closing_splash
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
#--
|
|
93
|
-
# *TODO* How to prevent terminal collapse and suppress loading messages?
|
|
94
|
-
#++
|
|
95
|
-
def load_thread
|
|
96
|
-
message = ''
|
|
97
|
-
begin
|
|
98
|
-
t1 = Thread.new do
|
|
99
|
-
require 'stringio'
|
|
100
|
-
sio = StringIO.new('')
|
|
101
|
-
begin
|
|
102
|
-
stdout_save = STDOUT.clone
|
|
103
|
-
STDOUT.reopen(sio)
|
|
104
|
-
load_object
|
|
105
|
-
load_history
|
|
106
|
-
ensure
|
|
107
|
-
STDOUT.reopen(stdout_save)
|
|
108
|
-
stdout_save.close
|
|
109
|
-
message = sio.read
|
|
110
|
-
sio.close
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
t2 = Thread.new do
|
|
114
|
-
opening_splash
|
|
115
|
-
end
|
|
116
|
-
t1.join
|
|
117
|
-
t2.join
|
|
118
|
-
rescue
|
|
76
|
+
if create_save_dir_ask
|
|
77
|
+
#save_history # changed to use our own...
|
|
78
|
+
save_object
|
|
79
|
+
save_config
|
|
119
80
|
end
|
|
120
|
-
puts message
|
|
121
81
|
end
|
|
122
82
|
|
|
123
83
|
### setup
|
|
@@ -135,36 +95,44 @@ module Bio::Shell::Ghost
|
|
|
135
95
|
end
|
|
136
96
|
|
|
137
97
|
def create_save_dir
|
|
138
|
-
|
|
139
|
-
create_real_dir(
|
|
140
|
-
create_real_dir(
|
|
141
|
-
create_real_dir(dir + BIOFLAT)
|
|
142
|
-
return dir
|
|
98
|
+
create_real_dir(SAVEDIR)
|
|
99
|
+
create_real_dir(DATADIR)
|
|
100
|
+
create_real_dir(PLUGIN)
|
|
143
101
|
end
|
|
144
102
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if @cache[:
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
103
|
+
def create_save_dir_ask
|
|
104
|
+
if File.directory?(SAVEDIR)
|
|
105
|
+
@cache[:save] = true
|
|
106
|
+
end
|
|
107
|
+
if @cache[:save].nil?
|
|
108
|
+
if ask_yes_or_no("Save session in '#{SAVEDIR}' directory? [y/n] ")
|
|
109
|
+
create_real_dir(SAVEDIR)
|
|
110
|
+
create_real_dir(DATADIR)
|
|
111
|
+
create_real_dir(PLUGIN)
|
|
112
|
+
# create_real_dir(BIOFLAT)
|
|
113
|
+
@cache[:save] = true
|
|
114
|
+
else
|
|
115
|
+
@cache[:save] = false
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
return @cache[:save]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def ask_yes_or_no(message)
|
|
122
|
+
loop do
|
|
123
|
+
print "#{message}"
|
|
124
|
+
answer = gets
|
|
125
|
+
if answer.nil?
|
|
126
|
+
# readline support might be broken
|
|
127
|
+
return false
|
|
128
|
+
elsif /^\s*[Nn]/.match(answer)
|
|
129
|
+
return false
|
|
130
|
+
elsif /^\s*[Yy]/.match(answer)
|
|
131
|
+
return true
|
|
132
|
+
else
|
|
133
|
+
# loop
|
|
164
134
|
end
|
|
165
|
-
@cache[:savedir] = dir
|
|
166
135
|
end
|
|
167
|
-
return dir
|
|
168
136
|
end
|
|
169
137
|
|
|
170
138
|
def create_real_dir(dir)
|
|
@@ -174,7 +142,7 @@ module Bio::Shell::Ghost
|
|
|
174
142
|
Dir.mkdir(dir)
|
|
175
143
|
puts "done"
|
|
176
144
|
rescue
|
|
177
|
-
warn "Error: Failed to create #{dir} : #{$!}"
|
|
145
|
+
warn "Error: Failed to create directory (#{dir}) : #{$!}"
|
|
178
146
|
end
|
|
179
147
|
end
|
|
180
148
|
end
|
|
@@ -182,16 +150,18 @@ module Bio::Shell::Ghost
|
|
|
182
150
|
### bioflat
|
|
183
151
|
|
|
184
152
|
def create_flat_dir(dbname)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
return nil
|
|
153
|
+
dir = BIOFLAT + dbname.to_s.strip
|
|
154
|
+
unless File.directory?(BIOFLAT)
|
|
155
|
+
Dir.mkdir(BIOFLAT)
|
|
189
156
|
end
|
|
157
|
+
unless File.directory?(dir)
|
|
158
|
+
Dir.mkdir(dir)
|
|
159
|
+
end
|
|
160
|
+
return dir
|
|
190
161
|
end
|
|
191
162
|
|
|
192
163
|
def find_flat_dir(dbname)
|
|
193
|
-
dir =
|
|
194
|
-
dir = USERDIR + BIOFLAT + dbname.to_s.strip unless File.exists?(dir)
|
|
164
|
+
dir = BIOFLAT + dbname.to_s.strip
|
|
195
165
|
if File.exists?(dir)
|
|
196
166
|
return dir
|
|
197
167
|
else
|
|
@@ -202,8 +172,6 @@ module Bio::Shell::Ghost
|
|
|
202
172
|
### config
|
|
203
173
|
|
|
204
174
|
def load_config
|
|
205
|
-
load_config_file(SITEDIR + CONFIG)
|
|
206
|
-
load_config_file(USERDIR + CONFIG)
|
|
207
175
|
load_config_file(SAVEDIR + CONFIG)
|
|
208
176
|
end
|
|
209
177
|
|
|
@@ -218,8 +186,7 @@ module Bio::Shell::Ghost
|
|
|
218
186
|
end
|
|
219
187
|
|
|
220
188
|
def save_config
|
|
221
|
-
|
|
222
|
-
save_config_file(dir + CONFIG)
|
|
189
|
+
save_config_file(SAVEDIR + CONFIG)
|
|
223
190
|
end
|
|
224
191
|
|
|
225
192
|
def save_config_file(file)
|
|
@@ -265,17 +232,23 @@ module Bio::Shell::Ghost
|
|
|
265
232
|
@config[:pager] = cmd
|
|
266
233
|
end
|
|
267
234
|
|
|
235
|
+
def config_splash
|
|
236
|
+
flag = ! @config[:splash]
|
|
237
|
+
@config[:splash] = flag
|
|
238
|
+
puts "Splash #{flag ? 'on' : 'off'}"
|
|
239
|
+
opening_splash
|
|
240
|
+
end
|
|
241
|
+
|
|
268
242
|
def config_message(str = nil)
|
|
269
243
|
str ||= MESSAGE
|
|
270
244
|
@config[:message] = str
|
|
245
|
+
opening_splash
|
|
271
246
|
end
|
|
272
247
|
|
|
273
248
|
### plugin
|
|
274
249
|
|
|
275
250
|
def load_plugin
|
|
276
|
-
load_plugin_dir(
|
|
277
|
-
load_plugin_dir(USERDIR + PLUGIN)
|
|
278
|
-
load_plugin_dir(SAVEDIR + PLUGIN)
|
|
251
|
+
load_plugin_dir(PLUGIN)
|
|
279
252
|
end
|
|
280
253
|
|
|
281
254
|
def load_plugin_dir(dir)
|
|
@@ -291,8 +264,6 @@ module Bio::Shell::Ghost
|
|
|
291
264
|
### object
|
|
292
265
|
|
|
293
266
|
def load_object
|
|
294
|
-
load_object_file(SITEDIR + OBJECT)
|
|
295
|
-
load_object_file(USERDIR + OBJECT)
|
|
296
267
|
load_object_file(SAVEDIR + OBJECT)
|
|
297
268
|
end
|
|
298
269
|
|
|
@@ -318,8 +289,7 @@ module Bio::Shell::Ghost
|
|
|
318
289
|
end
|
|
319
290
|
|
|
320
291
|
def save_object
|
|
321
|
-
|
|
322
|
-
save_object_file(dir + OBJECT)
|
|
292
|
+
save_object_file(SAVEDIR + OBJECT)
|
|
323
293
|
end
|
|
324
294
|
|
|
325
295
|
def save_object_file(file)
|
|
@@ -358,8 +328,6 @@ module Bio::Shell::Ghost
|
|
|
358
328
|
|
|
359
329
|
def load_history
|
|
360
330
|
if @cache[:readline]
|
|
361
|
-
load_history_file(SITEDIR + HISTORY)
|
|
362
|
-
load_history_file(USERDIR + HISTORY)
|
|
363
331
|
load_history_file(SAVEDIR + HISTORY)
|
|
364
332
|
end
|
|
365
333
|
end
|
|
@@ -368,7 +336,9 @@ module Bio::Shell::Ghost
|
|
|
368
336
|
if File.exists?(file)
|
|
369
337
|
print "Loading history (#{file}) ... "
|
|
370
338
|
File.open(file).each do |line|
|
|
371
|
-
Readline::HISTORY.push line.chomp
|
|
339
|
+
#Readline::HISTORY.push line.chomp
|
|
340
|
+
date, hist = line.chomp.split("\t")
|
|
341
|
+
Readline::HISTORY.push hist if hist
|
|
372
342
|
end
|
|
373
343
|
puts "done"
|
|
374
344
|
end
|
|
@@ -376,8 +346,7 @@ module Bio::Shell::Ghost
|
|
|
376
346
|
|
|
377
347
|
def save_history
|
|
378
348
|
if @cache[:readline]
|
|
379
|
-
|
|
380
|
-
save_history_file(dir + HISTORY)
|
|
349
|
+
save_history_file(SAVEDIR + HISTORY)
|
|
381
350
|
end
|
|
382
351
|
end
|
|
383
352
|
|
|
@@ -428,10 +397,20 @@ module Bio::Shell::Ghost
|
|
|
428
397
|
|
|
429
398
|
def save_script
|
|
430
399
|
if @script_begin and @script_end and @script_begin <= @script_end
|
|
431
|
-
|
|
432
|
-
|
|
400
|
+
if File.exists?(SCRIPT)
|
|
401
|
+
message = "Overwrite script file (#{SCRIPT})? [y/n] "
|
|
402
|
+
else
|
|
403
|
+
message = "Save script file (#{SCRIPT})? [y/n] "
|
|
404
|
+
end
|
|
405
|
+
if ask_yes_or_no(message)
|
|
406
|
+
save_script_file(SCRIPT)
|
|
407
|
+
else
|
|
408
|
+
puts " ... save aborted."
|
|
409
|
+
end
|
|
410
|
+
elsif @script_begin and @script_end and @script_begin - @script_end == 1
|
|
411
|
+
puts " ... script aborted."
|
|
433
412
|
else
|
|
434
|
-
puts "Error:
|
|
413
|
+
puts "Error: Script range #{@script_begin}..#{@script_end} is invalid"
|
|
435
414
|
end
|
|
436
415
|
end
|
|
437
416
|
|
|
@@ -439,10 +418,10 @@ module Bio::Shell::Ghost
|
|
|
439
418
|
begin
|
|
440
419
|
print "Saving script (#{file}) ... "
|
|
441
420
|
File.open(file, "w") do |f|
|
|
442
|
-
f.
|
|
443
|
-
f.
|
|
421
|
+
f.puts "#!/usr/bin/env bioruby"
|
|
422
|
+
f.puts
|
|
444
423
|
f.puts Readline::HISTORY.to_a[@script_begin..@script_end]
|
|
445
|
-
f.
|
|
424
|
+
f.puts
|
|
446
425
|
end
|
|
447
426
|
puts "done"
|
|
448
427
|
rescue
|
|
@@ -465,8 +444,25 @@ module Bio::Shell::Ghost
|
|
|
465
444
|
return str.sub(/R u b y/) { "#{ruby}R u b y#{none}" }
|
|
466
445
|
end
|
|
467
446
|
|
|
468
|
-
def splash_message_action
|
|
469
|
-
s = splash_message
|
|
447
|
+
def splash_message_action(message = nil)
|
|
448
|
+
s = message || splash_message
|
|
449
|
+
l = s.length
|
|
450
|
+
x = " "
|
|
451
|
+
0.step(l,2) do |i|
|
|
452
|
+
l1 = l-i; l2 = l1/2; l4 = l2/2
|
|
453
|
+
STDERR.print "#{s[0,i]}#{x*l1}#{s[i,1]}\r"
|
|
454
|
+
sleep(0.001)
|
|
455
|
+
STDERR.print "#{s[0,i]}#{x*l2}#{s[i,1]}#{x*(l1-l2)}\r"
|
|
456
|
+
sleep(0.002)
|
|
457
|
+
STDERR.print "#{s[0,i]}#{x*l4}#{s[i,1]}#{x*(l2-l4)}\r"
|
|
458
|
+
sleep(0.004)
|
|
459
|
+
STDERR.print "#{s[0,i+1]}#{x*l4}\r"
|
|
460
|
+
sleep(0.008)
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def splash_message_action_color(message = nil)
|
|
465
|
+
s = message || splash_message
|
|
470
466
|
l = s.length
|
|
471
467
|
c = ESC_SEQ
|
|
472
468
|
x = " "
|
|
@@ -484,28 +480,37 @@ module Bio::Shell::Ghost
|
|
|
484
480
|
end
|
|
485
481
|
|
|
486
482
|
def opening_splash
|
|
487
|
-
|
|
488
|
-
if @config[:
|
|
489
|
-
|
|
483
|
+
puts
|
|
484
|
+
if @config[:splash]
|
|
485
|
+
if @config[:color]
|
|
486
|
+
splash_message_action_color
|
|
487
|
+
else
|
|
488
|
+
splash_message_action
|
|
489
|
+
end
|
|
490
490
|
end
|
|
491
491
|
if @config[:color]
|
|
492
492
|
print splash_message_color
|
|
493
493
|
else
|
|
494
494
|
print splash_message
|
|
495
495
|
end
|
|
496
|
-
|
|
496
|
+
puts
|
|
497
|
+
puts
|
|
497
498
|
print " Version : BioRuby #{Bio::BIORUBY_VERSION.join(".")}"
|
|
498
|
-
print " / Ruby #{RUBY_VERSION}
|
|
499
|
+
print " / Ruby #{RUBY_VERSION}"
|
|
500
|
+
puts
|
|
501
|
+
puts
|
|
499
502
|
end
|
|
500
503
|
|
|
501
504
|
def closing_splash
|
|
502
|
-
|
|
505
|
+
puts
|
|
506
|
+
puts
|
|
503
507
|
if @config[:color]
|
|
504
508
|
print splash_message_color
|
|
505
509
|
else
|
|
506
510
|
print splash_message
|
|
507
511
|
end
|
|
508
|
-
|
|
512
|
+
puts
|
|
513
|
+
puts
|
|
509
514
|
end
|
|
510
515
|
|
|
511
516
|
end
|