require 'yaml' # for later windows support #irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb' #cmd_opts = {:irb => irb} module Ritalin PATH_TO_FILE = `echo $HOME`.strip + "/.ritalinrc" class Profile attr_accessor :libs, :name def initialize name,libs=[] self.name,self.libs = name,libs end def add_to_file File.open(PATH_TO_FILE,'a') {|f| f.puts self.to_yaml.gsub("---","\n") } end def self.list YAML::load File.read(PATH_TO_FILE) end def self.output_list self.list.each do |p,libs| puts "name: #{p}" puts "libs: #{libs.join(", ")}" puts "-------------------------" end end def self.find name raise "Invaid Profile" unless list.keys.include?(name.to_sym) new name,list[name.to_sym] end def delete list = Profile.list list.delete(self.name.to_sym) File.open(PATH_TO_FILE,'w') {|f| f.puts list.to_yaml } end def irb_cmd "irb -r #{self.libs.join(" -r")}" end def to_yaml {name.to_sym => self.libs}.to_yaml end end class CmdParser def initialize args action_for_cmd args end def action_for_cmd args case when args.include?("-a") profile_name, *libs = args - ["-a"] Profile.new(profile_name,libs).add_to_file when args.include?("-l") Profile.output_list when args.include?("-d") Profile.find(args.pop).delete else system Profile.find(args.first).irb_cmd end end end end