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
382
383
384
385
386
387
388
|
# File 'lib/bio/shell/core.rb', line 382
def close_history
if @cache[:histfile]
STDERR.print "Saving history (#{history_file}) ... "
@cache[:histfile].close
STDERR.puts "done"
end
end
|
#closing_splash ⇒ Object
566
567
568
569
570
571
572
573
574
575
576
|
# File 'lib/bio/shell/core.rb', line 566
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
|
#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_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_file(file) ⇒ Object
396
397
398
399
400
401
402
403
404
405
406
|
# File 'lib/bio/shell/core.rb', line 396
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_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_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
|
#open_history ⇒ Object
372
373
374
375
|
# File 'lib/bio/shell/core.rb', line 372
def open_history
@cache[:histfile] = File.open(history_file, "a")
@cache[:histfile].sync = true
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)
#save_history_file(file) ⇒ Object
415
416
417
418
419
420
421
422
423
424
425
|
# File 'lib/bio/shell/core.rb', line 415
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_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
368
|
# 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.collect! { |x| x.to_s }
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
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
|
# File 'lib/bio/shell/core.rb', line 460
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
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
|
# File 'lib/bio/shell/core.rb', line 479
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
|
#script(mode = nil) ⇒ Object
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
|
# File 'lib/bio/shell/core.rb', line 429
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
450
451
452
453
|
# File 'lib/bio/shell/core.rb', line 450
def script_begin
STDERR.puts "-- 8< -- 8< -- 8< -- Script -- 8< -- 8< -- 8< --"
@script_begin = Readline::HISTORY.size
end
|
#script_end ⇒ Object
455
456
457
458
|
# File 'lib/bio/shell/core.rb', line 455
def script_end
STDERR.puts "-- >8 -- >8 -- >8 -- Script -- >8 -- >8 -- >8 --"
@script_end = Readline::HISTORY.size - 2
end
|
#splash_message ⇒ Object
497
498
499
500
|
# File 'lib/bio/shell/core.rb', line 497
def splash_message
@config[:message] ||= MESSAGE
@config[:message].to_s.split(//).join(" ")
end
|
#splash_message_action(message = nil) ⇒ Object
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
|
# File 'lib/bio/shell/core.rb', line 509
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
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
|
# File 'lib/bio/shell/core.rb', line 526
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
502
503
504
505
506
507
|
# File 'lib/bio/shell/core.rb', line 502
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
377
378
379
380
|
# File 'lib/bio/shell/core.rb', line 377
def store_history(line)
Bio::Shell.cache[:histfile].puts "# #{Time.now}"
Bio::Shell.cache[:histfile].puts line
end
|