1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#
# = bio/shell/setup.rb - setup initial environment for the BioRuby shell
#
# Copyright:: Copyright (C) 2006
# Toshiaki Katayama <k@bioruby.org>
# License:: The Ruby License
#
#
require 'getoptlong'
class Bio::Shell::Setup
def initialize
check_ruby_version
# command line options
getoptlong
# setup working directory
savedir = setup_savedir
# load configuration and plugins
Bio::Shell.configure(savedir)
# set default to irb mode
Bio::Shell.cache[:mode] = ((defined? @mode) && @mode) || :irb
case Bio::Shell.cache[:mode]
when :web
# setup rails server
Bio::Shell::Web.new
when :irb
# setup irb server
Bio::Shell::Irb.new
when :script
# run bioruby shell script
Bio::Shell::Script.new(@script)
end
end
def check_ruby_version
if RUBY_VERSION < "1.8.2"
raise "BioRuby shell runs on Ruby version >= 1.8.2"
end
end
# command line argument (working directory or bioruby shell script file)
def getoptlong
opts = GetoptLong.new
opts.set_options(
[ '--rails', '-r', GetoptLong::NO_ARGUMENT ],
[ '--web', '-w', GetoptLong::NO_ARGUMENT ],
[ '--console', '-c', GetoptLong::NO_ARGUMENT ],
[ '--irb', '-i', GetoptLong::NO_ARGUMENT ]
)
opts.each_option do |opt, arg|
case opt
when /--rails/, /--web/
@mode = :web
when /--console/, /--irb/
@mode = :irb
end
end
end
def setup_savedir
arg = ARGV.shift
# Options after the '--' argument are not parsed by GetoptLong and
# are passed to irb or rails. This hack preserve the first option
# when working directory of the project is not given.
if arg and arg[/^-/]
ARGV.unshift arg
arg = nil
end
if arg.nil?
# run in the current directory
if File.exist?(Bio::Shell::Core::HISTORY)
savedir = Dir.pwd
else
savedir = File.join(ENV['HOME'].to_s, ".bioruby")
install_savedir(savedir)
end
elsif File.file?(arg)
# run file as a bioruby shell script
savedir = File.join(File.dirname(arg), "..")
@script = arg
@mode = :script
else
# run in new or existing directory
if arg[/^#{File::SEPARATOR}/]
savedir = arg
else
savedir = File.join(Dir.pwd, arg)
end
install_savedir(savedir)
end
return savedir
end
def install_savedir(savedir)
FileUtils.makedirs(savedir)
end
end # Setup
|