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
banner(subtitle) click to toggle source
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