class ROTP::Arguments

def bold(string)

def bold(string)
  "\033[1m#{string}\033[22m"
end

def default_options

def default_options
  OpenStruct.new time: true, counter: 0, mode: :time
end

def green(string)

def green(string)
  "\033[32m#{string}\033[0m"
end

def initialize(filename, arguments)

def initialize(filename, arguments)
  @filename = filename
  @arguments = Array(arguments)
end

def options

def options
  parse
  options!
end

def options!

def options!
  @options ||= default_options
end

def parse

def parse
  return options!.mode = :help if arguments.empty?
  parser.parse arguments
rescue OptionParser::InvalidOption => exception
  options!.mode = :help
  options!.warnings = red(exception.message + '. Try --help for help.')
end

def parser

def parser
  OptionParser.new do |parser|
    parser.banner = ''
    parser.separator green('  Usage: ') + bold("#{filename} [options]")
    parser.separator ''
    parser.separator green '  Examples:   '
    parser.separator '    ' + bold("#{filename} --secret p4ssword") + '                       # Generates a time-based one-time password'
    parser.separator '    ' + bold("#{filename} --hmac --secret p4ssword --counter 42") + '   # Generates a counter-based one-time password'
    parser.separator ''
    parser.separator green '  Options:'
    parser.on('-s', '--secret [SECRET]', 'The shared secret') do |secret|
      options!.secret = secret
    end
    parser.on('-c', '--counter [COUNTER]', 'The counter for counter-based hmac OTP') do |counter|
      options!.counter = counter.to_i
    end
    parser.on('-t', '--time', 'Use time-based OTP according to RFC 6238 (default)') do
      options!.mode = :time
    end
    parser.on('-m', '--hmac', 'Use counter-based OTP according to RFC 4226') do
      options!.mode = :hmac
    end
    parser.on_tail('-h', '--help', 'Show this message') do
      options!.mode = :help
    end
    parser.on('-d', '--digest [ALGORITHM]', 'Use algorithm for the digest (default sha1)') do |digest|
      options!.digest = digest
    end
  end
end

def red(string)

def red(string)
  "\033[31m#{string}\033[0m"
end

def to_s

def to_s
  parser.help + "\n"
end