lib/raykit/console.rb
require 'optparse' Options = Struct.new(:name) module Raykit class Parser def self.parse(options) hash=Hash.new #args = Options.new("world") opt_parser = OptionParser.new do |opts| opts.banner = "Usage: raykit [options]" opts.on('-l','--list [PATTERN]','list remotes') do |pattern| hash[:verb]="list" hash[:pattern]=pattern return hash end opts.on('-i','--import','import remotes') do |import| hash[:verb]="import" return hash end opts.on('-r','--rake [REMOTE]','rake [REMOTE]') do |remote| hash[:verb]="rake" hash[:remote]=remote return hash end opts.on('-h','--help','help') do puts opts exit end end opt_parser.parse!(options) hash end end class Console def self.run if(ARGV.length == 0) Parser.parse %w[--help] 0 else hash = Parser.parse ARGV #puts "hash: #{hash.to_s}" if(hash.include?(:verb)) verb = hash[:verb] case verb when 'list' list(hash) when 'import' import(hash) when 'rake' rake(hash) end end end end def self.list(hash) pattern=nil if(hash.include?(:pattern)) pattern=hash[:pattern] end Raykit::Git::remote_urls.each{|url| if(pattern.nil? || url.include?(pattern)) puts Rainbow(url).yellow.bright end } end def self.import(hash) puts 'scanning...' scanned_remotes = Raykit::Git::scan_remote_urls remotes = Raykit::Git::remote_urls count = 0 scanned_remotes.each{|remote| if(!remotes.include?(remote)) puts "imported " + Rainbow(remote).yellow.bright remotes.insert(0,remote) count = count + 1 end } if(count > 0) puts 'updating Raykit::Git::remote_urls' Raykit::Git::remote_urls = remotes end end def self.rake(hash) cmd = Raykit::Rake::run(hash[:remote],'master') elapsed_str = Timer.get_elapsed_str(cmd.elapsed) if(cmd.exitstatus == 0) puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright + " (#{cmd.directory})" return elapsed_str + " " + cmd.command else puts "\r\n" + cmd.command + "\r\n" puts "\r\n" + cmd.output + "\r\n" puts "\r\n" + cmd.error + "\r\n" puts '' abort Rainbow(elapsed_str).red.bright + " " + Rainbow(cmd.command).white end end end end