class Navo::CLI

Command line application interface.

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/navo/cli.rb, line 8
def initialize(*args)
  super
  Navo::Logger.output = STDOUT
  STDOUT.sync = true
  Navo::Logger.level = config['log-level']
end

Public Instance Methods

login(pattern) click to toggle source
# File lib/navo/cli.rb, line 47
def login(pattern)
  apply_flags_to_config!

  suites = suites_for(pattern)
  if suites.size == 0
    logger.console "Pattern '#{pattern}' matched no test suites", severity: :error
    exit 1
  elsif suites.size > 1
    logger.console "Pattern '#{pattern}' matched more than one test suite", severity: :error
    exit 1
  else
    suites.first.login
  end
end

Private Instance Methods

apply_flags_to_config!() click to toggle source
# File lib/navo/cli.rb, line 81
def apply_flags_to_config!
  config['log-level'] = options['log-level'] if options['log-level']
  Navo::Logger.level = config['log-level']
  config['concurrency'] = options['concurrency'] if options['concurrency']
  config['destroy'] = options.fetch('destroy', 'passing')

  # Initialize here so config is correctly set
  Berksfile.path = File.expand_path(config['chef']['berksfile'], config.repo_root)
  Berksfile.config = config
  @global_state = StateFile.new(file: File.join(config.repo_root, %w[.navo global-state.yaml]),
                                logger: logger).tap(&:load)
end
config() click to toggle source
# File lib/navo/cli.rb, line 64
def config
  @config ||= Configuration.load_applicable
end
execute(action, pattern = nil) click to toggle source
# File lib/navo/cli.rb, line 94
def execute(action, pattern = nil)
  suites = suites_for(pattern)
  results = Parallel.map(suites, in_threads: config['concurrency']) do |suite|
    succeeded = suite.send(action)
    [succeeded, suite]
  end

  failures = results.reject { |succeeded, result| succeeded }
  failures.each do |_, suite|
    logger.console("Failed to #{action} #{suite.name}", severity: :error)
    logger.console("See #{suite.log_file} for full log output", severity: :error)
  end

  exit failures.any? ? 1 : 0
rescue Interrupt
  # Handle Ctrl-C
  logger.console('INTERRUPTED', severity: :warn)
rescue => ex
  logger.console("#{ex.class}: #{ex.message}", severity: :fatal)
  logger.console(ex.backtrace.join("\n"), severity: :fatal)
end
logger() click to toggle source
# File lib/navo/cli.rb, line 68
def logger
  @logger ||= Navo::Logger.new
end
suites_for(pattern) click to toggle source
# File lib/navo/cli.rb, line 72
def suites_for(pattern)
  suite_names = config['suites'].keys
  suite_names.select! { |name| name =~ /#{pattern}/ } if pattern

  suite_names.map do |suite_name|
    Suite.new(name: suite_name, config: config, global_state: @global_state)
  end
end