class Aquatone::Command
Attributes
options[R]
Public Class Methods
new(options)
click to toggle source
# File lib/aquatone/command.rb, line 5 def initialize(options) @options = options end
run(options)
click to toggle source
# File lib/aquatone/command.rb, line 9 def self.run(options) self.new(options).execute! rescue Interrupt output("Caught interrupt; exiting.\n", true) rescue => e output(red("An unexpected error occurred: #{e.class}: #{e.message}\n")) output("#{e.backtrace.join("\n")}\n") end
Protected Class Methods
blue(text)
click to toggle source
# File lib/aquatone/command.rb, line 83 def self.blue(text); colorize(text.to_s, 34); end
bold(text)
click to toggle source
# File lib/aquatone/command.rb, line 85 def self.bold(text); colorize(text.to_s, 1); end
colorize(text, color_code)
click to toggle source
# File lib/aquatone/command.rb, line 43 def self.colorize(text, color_code) "\e[1m\e[#{color_code}m#{text}\e[0m" end
green(text)
click to toggle source
# File lib/aquatone/command.rb, line 82 def self.green(text); colorize(text.to_s, 32); end
jitter()
click to toggle source
# File lib/aquatone/command.rb, line 140 def self.jitter seconds = @options[:jitter] if seconds != 0 random_sleep = ((1 - (rand(30) * 0.01)) * seconds) sleep(random_sleep) end end
output(text, clear_line = false)
click to toggle source
# File lib/aquatone/command.rb, line 32 def self.output(text, clear_line = false) if clear_line text = "\r\e[0K#{text}" end with_output_mutex { print text } end
output_mutex()
click to toggle source
# File lib/aquatone/command.rb, line 152 def self.output_mutex @output_mutex ||= Mutex.new end
red(text)
click to toggle source
# File lib/aquatone/command.rb, line 81 def self.red(text); colorize(text.to_s, 31); end
status(message)
click to toggle source
# File lib/aquatone/command.rb, line 39 def self.status(message) output(message, true) end
uncolorize(text)
click to toggle source
# File lib/aquatone/command.rb, line 80 def self.uncolorize(text); colorize(text.to_s, 0); end
with_output_mutex() { || ... }
click to toggle source
# File lib/aquatone/command.rb, line 148 def self.with_output_mutex output_mutex.synchronize { yield } end
yellow(text)
click to toggle source
# File lib/aquatone/command.rb, line 84 def self.yellow(text); colorize(text.to_s, 33); end
Public Instance Methods
execute!()
click to toggle source
# File lib/aquatone/command.rb, line 18 def execute! fail NotImplementedError, "Commands must overwrite #execute! method" end
Protected Instance Methods
asked_for_progress?()
click to toggle source
# File lib/aquatone/command.rb, line 114 def asked_for_progress? begin while c = STDIN.read_nonblock(1) return true if c == "\n" end false rescue IO::EAGAINWaitReadable, Errno::EBADF false rescue Errno::EINTR, Errno::EAGAIN, EOFError true end rescue NameError false end
blue(text)
click to toggle source
# File lib/aquatone/command.rb, line 59 def blue(text) self.class.blue(text) end
bold(text)
click to toggle source
# File lib/aquatone/command.rb, line 67 def bold(text) self.class.bold(text) end
green(text)
click to toggle source
# File lib/aquatone/command.rb, line 55 def green(text) self.class.green(text) end
has_executable?(name)
click to toggle source
# File lib/aquatone/command.rb, line 129 def has_executable?(name) exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] ENV["PATH"].split(File::PATH_SEPARATOR).each do |path| exts.each do |ext| exe = File.join(path, "#{name}#{ext}") return true if File.executable?(exe) && !File.directory?(exe) end end false end
jitter_sleep()
click to toggle source
# File lib/aquatone/command.rb, line 95 def jitter_sleep return unless options[:sleep] seconds = options[:sleep].to_i if options[:jitter] jitter = (options[:jitter].to_f / 100) * seconds if rand.round == 0 seconds = seconds - Random.rand(0..jitter.round) else seconds = seconds + Random.rand(0..jitter.round) end seconds = 1 if seconds < 1 end sleep seconds end
output(text, clear_line = false)
click to toggle source
# File lib/aquatone/command.rb, line 24 def output(text, clear_line = false) self.class.output(text, clear_line) end
red(text)
click to toggle source
# File lib/aquatone/command.rb, line 51 def red(text) self.class.red(text) end
seconds_to_time(seconds)
click to toggle source
# File lib/aquatone/command.rb, line 110 def seconds_to_time(seconds) Time.at(seconds).utc.strftime("%H:%M:%S") end
status(message)
click to toggle source
# File lib/aquatone/command.rb, line 28 def status(message) self.class.status(message) end
thread_pool()
click to toggle source
# File lib/aquatone/command.rb, line 87 def thread_pool if options[:sleep] Aquatone::ThreadPool.new(1) else Aquatone::ThreadPool.new(options[:threads]) end end
uncolorize(text)
click to toggle source
# File lib/aquatone/command.rb, line 47 def uncolorize(text) self.class.uncolorize(text) end
yellow(text)
click to toggle source
# File lib/aquatone/command.rb, line 63 def yellow(text) self.class.yellow(text) end