Module: Bio::Shell::Ghost
- Includes:
- Core
- Included in:
- Bio::Shell
- Defined in:
- lib/bio/shell/core.rb
Constant Summary
Constants included
from Core
Core::BIOFLAT, Core::CONFIG, Core::DATADIR, Core::ESC_SEQ, Core::HISTORY, Core::MARSHAL, Core::MESSAGE, Core::OBJECT, Core::PLUGIN, Core::SCRIPT, Core::SESSION, Core::SHELLDIR
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Core
#ask_yes_or_no, #bioflat_dir, #colors, #config_file, #data_dir, #history_file, #object_file, #plugin_dir, #script_dir, #script_file, #session_dir, #shell_dir
Instance Attribute Details
A hash to store temporal (per session) configurations
111
112
113
|
# File 'lib/bio/shell/core.rb', line 111
def cache
@cache
end
|
A hash to store persistent configurations
108
109
110
|
# File 'lib/bio/shell/core.rb', line 108
def config
@config
end
|
Instance Method Details
#check_marshal ⇒ Object
299
300
301
302
303
|
# File 'lib/bio/shell/core.rb', line 299
def check_marshal
if @config[:marshal] and @config[:marshal] != MARSHAL
raise "Marshal version mismatch"
end
end
|
#close_history ⇒ Object
381
382
383
384
385
386
387
|
# File 'lib/bio/shell/core.rb', line 381
def close_history
if @cache[:histfile]
STDERR.print "Saving history (#{history_file}) ... "
@cache[:histfile].close
STDERR.puts "done"
end
end
|
#closing_splash ⇒ Object
565
566
567
568
569
570
571
572
573
574
575
|
# File 'lib/bio/shell/core.rb', line 565
def closing_splash
STDERR.puts
STDERR.puts
if @config[:color]
STDERR.print splash_message_color
else
STDERR.print splash_message
end
STDERR.puts
STDERR.puts
end
|
#config_color ⇒ Object
251
252
253
254
255
256
257
258
259
260
261
262
|
# File 'lib/bio/shell/core.rb', line 251
def config_color
bind = Bio::Shell.cache[:binding]
flag = ! @config[:color]
@config[:color] = flag
if flag
IRB.conf[:PROMPT_MODE] = :BIORUBY_COLOR
eval("conf.prompt_mode = :BIORUBY_COLOR", bind)
else
IRB.conf[:PROMPT_MODE] = :BIORUBY
eval("conf.prompt_mode = :BIORUBY", bind)
end
end
|
#config_echo ⇒ Object
243
244
245
246
247
248
249
|
# File 'lib/bio/shell/core.rb', line 243
def config_echo
bind = Bio::Shell.cache[:binding]
flag = ! @config[:echo]
@config[:echo] = IRB.conf[:ECHO] = flag
eval("conf.echo = #{flag}", bind)
STDERR.puts "Echo #{flag ? 'on' : 'off'}"
end
|
#config_message(str = nil) ⇒ Object
275
276
277
278
279
|
# File 'lib/bio/shell/core.rb', line 275
def config_message(str = nil)
str ||= MESSAGE
@config[:message] = str
opening_splash
end
|
264
265
266
|
# File 'lib/bio/shell/core.rb', line 264
def (cmd = nil)
@config[:pager] = cmd
end
|
#config_show ⇒ Object
237
238
239
240
241
|
# File 'lib/bio/shell/core.rb', line 237
def config_show
@config.each do |k, v|
STDERR.puts "#{k}\t= #{v.inspect}"
end
end
|
#config_splash ⇒ Object
268
269
270
271
272
273
|
# File 'lib/bio/shell/core.rb', line 268
def config_splash
flag = ! @config[:splash]
@config[:splash] = flag
STDERR.puts "Splash #{flag ? 'on' : 'off'}"
opening_splash
end
|
save/restore the environment
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/bio/shell/core.rb', line 115
def configure(savedir)
@config = {}
@cache = {
:savedir => savedir,
:workdir => Dir.pwd,
}
create_save_dir
load_config
load_plugin
end
|
#create_flat_dir(dbname) ⇒ Object
188
189
190
191
192
193
194
|
# File 'lib/bio/shell/core.rb', line 188
def create_flat_dir(dbname)
dir = File.join(bioflat_dir, dbname.to_s.strip)
unless File.directory?(dir)
FileUtils.makedirs(dir)
end
return dir
end
|
#create_real_dir(dir) ⇒ Object
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/bio/shell/core.rb', line 174
def create_real_dir(dir)
unless File.directory?(dir)
begin
STDERR.print "Creating directory (#{dir}) ... "
FileUtils.makedirs(dir)
STDERR.puts "done"
rescue
warn "Error: Failed to create directory (#{dir}) : #{$!}"
end
end
end
|
#create_save_dir ⇒ Object
150
151
152
153
154
|
# File 'lib/bio/shell/core.rb', line 150
def create_save_dir
create_real_dir(session_dir)
create_real_dir(plugin_dir)
create_real_dir(data_dir)
end
|
#create_save_dir_ask ⇒ Object
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# File 'lib/bio/shell/core.rb', line 156
def create_save_dir_ask
if File.directory?(session_dir)
@cache[:save] = true
end
unless @cache[:save]
if ask_yes_or_no("Save session in '#{@cache[:workdir]}' directory? [y/n] ")
create_real_dir(session_dir)
create_real_dir(plugin_dir)
create_real_dir(data_dir)
create_real_dir(bioflat_dir)
@cache[:save] = true
else
@cache[:save] = false
end
end
return @cache[:save]
end
|
#find_flat_dir(dbname) ⇒ Object
196
197
198
199
200
201
202
203
|
# File 'lib/bio/shell/core.rb', line 196
def find_flat_dir(dbname)
dir = File.join(bioflat_dir, dbname.to_s.strip)
if File.exists?(dir)
return dir
else
return nil
end
end
|
#load_config ⇒ Object
207
208
209
|
# File 'lib/bio/shell/core.rb', line 207
def load_config
load_config_file(config_file)
end
|
#load_config_file(file) ⇒ Object
211
212
213
214
215
216
217
218
219
|
# File 'lib/bio/shell/core.rb', line 211
def load_config_file(file)
if File.exists?(file)
STDERR.print "Loading config (#{file}) ... "
if hash = YAML.load(File.read(file))
@config.update(hash)
end
STDERR.puts "done"
end
end
|
#load_history ⇒ Object
389
390
391
392
393
|
# File 'lib/bio/shell/core.rb', line 389
def load_history
if @cache[:readline]
load_history_file(history_file)
end
end
|
#load_history_file(file) ⇒ Object
395
396
397
398
399
400
401
402
403
404
405
|
# File 'lib/bio/shell/core.rb', line 395
def load_history_file(file)
if File.exists?(file)
STDERR.print "Loading history (#{file}) ... "
File.open(file).each do |line|
unless line[/^# /]
Readline::HISTORY.push line.chomp
end
end
STDERR.puts "done"
end
end
|
#load_object ⇒ Object
305
306
307
308
309
310
311
312
|
# File 'lib/bio/shell/core.rb', line 305
def load_object
begin
check_marshal
load_object_file(object_file)
rescue
warn "Error: Load aborted : #{$!}"
end
end
|
#load_object_file(file) ⇒ Object
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
|
# File 'lib/bio/shell/core.rb', line 314
def load_object_file(file)
if File.exists?(file)
STDERR.print "Loading object (#{file}) ... "
begin
bind = Bio::Shell.cache[:binding]
hash = Marshal.load(File.read(file))
hash.each do |k, v|
begin
Thread.current[:restore_value] = v
eval("#{k} = Thread.current[:restore_value]", bind)
rescue
STDERR.puts "Warning: object '#{k}' couldn't be loaded : #{$!}"
end
end
rescue
warn "Error: Failed to load (#{file}) : #{$!}"
end
STDERR.puts "done"
end
end
|
#load_plugin ⇒ Object
283
284
285
|
# File 'lib/bio/shell/core.rb', line 283
def load_plugin
load_plugin_dir(plugin_dir)
end
|
#load_plugin_dir(dir) ⇒ Object
287
288
289
290
291
292
293
294
295
|
# File 'lib/bio/shell/core.rb', line 287
def load_plugin_dir(dir)
if File.directory?(dir)
Dir.glob("#{dir}/*.rb").sort.each do |file|
STDERR.print "Loading plugin (#{file}) ... "
load file
STDERR.puts "done"
end
end
end
|
#load_session ⇒ Object
126
127
128
129
130
131
132
133
|
# File 'lib/bio/shell/core.rb', line 126
def load_session
load_object
unless @cache[:mode] == :script
load_history
opening_splash
open_history
end
end
|
#open_history ⇒ Object
371
372
373
374
|
# File 'lib/bio/shell/core.rb', line 371
def open_history
@cache[:histfile] = File.open(history_file, "a")
@cache[:histfile].sync = true
end
|
#opening_splash ⇒ Object
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
|
# File 'lib/bio/shell/core.rb', line 543
def opening_splash
STDERR.puts
if @config[:splash]
if @config[:color]
splash_message_action_color
else
splash_message_action
end
end
if @config[:color]
STDERR.print splash_message_color
else
STDERR.print splash_message
end
STDERR.puts
STDERR.puts
STDERR.print " Version : BioRuby #{Bio::BIORUBY_VERSION.join(".")}"
STDERR.print " / Ruby #{RUBY_VERSION}"
STDERR.puts
STDERR.puts
end
|
#save_config ⇒ Object
221
222
223
|
# File 'lib/bio/shell/core.rb', line 221
def save_config
save_config_file(config_file)
end
|
#save_config_file(file) ⇒ Object
225
226
227
228
229
230
231
232
233
234
235
|
# File 'lib/bio/shell/core.rb', line 225
def save_config_file(file)
begin
STDERR.print "Saving config (#{file}) ... "
File.open(file, "w") do |f|
f.puts @config.to_yaml
end
STDERR.puts "done"
rescue
warn "Error: Failed to save (#{file}) : #{$!}"
end
end
|
#save_history ⇒ Object
not used (use open_history/close_history instead)
408
409
410
411
412
|
# File 'lib/bio/shell/core.rb', line 408
def save_history
if @cache[:readline]
save_history_file(history_file)
end
end
|
#save_history_file(file) ⇒ Object
414
415
416
417
418
419
420
421
422
423
424
|
# File 'lib/bio/shell/core.rb', line 414
def save_history_file(file)
begin
STDERR.print "Saving history (#{file}) ... "
File.open(file, "w") do |f|
f.puts Readline::HISTORY.to_a
end
STDERR.puts "done"
rescue
warn "Error: Failed to save (#{file}) : #{$!}"
end
end
|
#save_object ⇒ Object
335
336
337
|
# File 'lib/bio/shell/core.rb', line 335
def save_object
save_object_file(object_file)
end
|
#save_object_file(file) ⇒ Object
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
|
# File 'lib/bio/shell/core.rb', line 339
def save_object_file(file)
begin
STDERR.print "Saving object (#{file}) ... "
File.rename(file, "#{file}.old") if File.exist?(file)
File.open(file, "w") do |f|
bind = Bio::Shell.cache[:binding]
list = eval("local_variables", bind)
list -= ["_"]
hash = {}
list.each do |elem|
value = eval(elem, bind)
if value
begin
Marshal.dump(value)
hash[elem] = value
rescue
end
end
end
Marshal.dump(hash, f)
@config[:marshal] = MARSHAL
end
STDERR.puts "done"
rescue
File.rename("#{file}.old", file) if File.exist?("#{file}.old")
warn "Error: Failed to save (#{file}) : #{$!}"
end
end
|
#save_script ⇒ Object
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
|
# File 'lib/bio/shell/core.rb', line 459
def save_script
if @script_begin and @script_end and @script_begin <= @script_end
if File.exists?(script_file)
message = "Overwrite script file (#{script_file})? [y/n] "
else
message = "Save script file (#{script_file})? [y/n] "
end
if ask_yes_or_no(message)
save_script_file(script_file)
else
STDERR.puts " ... save aborted."
end
elsif @script_begin and @script_end and @script_begin - @script_end == 1
STDERR.puts " ... script aborted."
else
STDERR.puts "Error: Script range #{@script_begin}..#{@script_end} is invalid"
end
end
|
#save_script_file(file) ⇒ Object
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
|
# File 'lib/bio/shell/core.rb', line 478
def save_script_file(file)
begin
STDERR.print "Saving script (#{file}) ... "
File.open(file, "w") do |f|
f.puts "#!/usr/bin/env bioruby"
f.puts
f.puts Readline::HISTORY.to_a[@script_begin..@script_end]
f.puts
end
STDERR.puts "done"
rescue
@script_begin = nil
warn "Error: Failed to save (#{file}) : #{$!}"
end
end
|
#save_session ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/bio/shell/core.rb', line 135
def save_session
unless @cache[:mode] == :script
closing_splash
end
if create_save_dir_ask
close_history
save_object
save_config
end
end
|
#script(mode = nil) ⇒ Object
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
|
# File 'lib/bio/shell/core.rb', line 428
def script(mode = nil)
case mode
when :begin, "begin", :start, "start"
@cache[:script] = true
script_begin
when :end, "end", :stop, "stop"
@cache[:script] = false
script_end
save_script
else
if @cache[:script]
@cache[:script] = false
script_end
save_script
else
@cache[:script] = true
script_begin
end
end
end
|
#script_begin ⇒ Object
449
450
451
452
|
# File 'lib/bio/shell/core.rb', line 449
def script_begin
STDERR.puts "-- 8< -- 8< -- 8< -- Script -- 8< -- 8< -- 8< --"
@script_begin = Readline::HISTORY.size
end
|
#script_end ⇒ Object
454
455
456
457
|
# File 'lib/bio/shell/core.rb', line 454
def script_end
STDERR.puts "-- >8 -- >8 -- >8 -- Script -- >8 -- >8 -- >8 --"
@script_end = Readline::HISTORY.size - 2
end
|
#splash_message ⇒ Object
496
497
498
499
|
# File 'lib/bio/shell/core.rb', line 496
def splash_message
@config[:message] ||= MESSAGE
@config[:message].to_s.split(//).join(" ")
end
|
#splash_message_action(message = nil) ⇒ Object
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
|
# File 'lib/bio/shell/core.rb', line 508
def splash_message_action(message = nil)
s = message || splash_message
l = s.length
x = " "
0.step(l,2) do |i|
l1 = l-i; l2 = l1/2; l4 = l2/2
STDERR.print "#{s[0,i]}#{x*l1}#{s[i,1]}\r"
sleep(0.001)
STDERR.print "#{s[0,i]}#{x*l2}#{s[i,1]}#{x*(l1-l2)}\r"
sleep(0.002)
STDERR.print "#{s[0,i]}#{x*l4}#{s[i,1]}#{x*(l2-l4)}\r"
sleep(0.004)
STDERR.print "#{s[0,i+1]}#{x*l4}\r"
sleep(0.008)
end
end
|
#splash_message_action_color(message = nil) ⇒ Object
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
|
# File 'lib/bio/shell/core.rb', line 525
def splash_message_action_color(message = nil)
s = message || splash_message
l = s.length
c = colors
x = " "
0.step(l,2) do |i|
l1 = l-i; l2 = l1/2; l4 = l2/2
STDERR.print "#{c[:n]}#{s[0,i]}#{x*l1}#{c[:y]}#{s[i,1]}\r"
sleep(0.001)
STDERR.print "#{c[:n]}#{s[0,i]}#{x*l2}#{c[:g]}#{s[i,1]}#{x*(l1-l2)}\r"
sleep(0.002)
STDERR.print "#{c[:n]}#{s[0,i]}#{x*l4}#{c[:r]}#{s[i,1]}#{x*(l2-l4)}\r"
sleep(0.004)
STDERR.print "#{c[:n]}#{s[0,i+1]}#{x*l4}\r"
sleep(0.008)
end
end
|
#splash_message_color ⇒ Object
501
502
503
504
505
506
|
# File 'lib/bio/shell/core.rb', line 501
def splash_message_color
str = splash_message
ruby = colors[:ruby]
none = colors[:none]
return str.sub(/R u b y/) { "#{ruby}R u b y#{none}" }
end
|
#store_history(line) ⇒ Object
376
377
378
379
|
# File 'lib/bio/shell/core.rb', line 376
def store_history(line)
Bio::Shell.cache[:histfile].puts "# #{Time.now}"
Bio::Shell.cache[:histfile].puts line
end
|