class MoneyTracking::Cli::Runner

Attributes

argv[R]
kernel[R]
stderr[R]
stdin[R]
stdout[R]

Public Class Methods

new(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) click to toggle source
# File lib/money_tracking/cli/runner.rb, line 6
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
  @argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
end

Public Instance Methods

execute!() click to toggle source
# File lib/money_tracking/cli/runner.rb, line 10
def execute!
  kernel.exit(run_cli { App.start(argv) })
end

Private Instance Methods

reset_streams() click to toggle source
# File lib/money_tracking/cli/runner.rb, line 24
def reset_streams
  $stderr = STDERR
  $stdin = STDIN
  $stdout = STDOUT
end
run_cli() { || ... } click to toggle source
# File lib/money_tracking/cli/runner.rb, line 30
def run_cli
  setup_streams
  yield
  0

rescue Cli::Error => e
  e.render
  1

rescue StandardError => e
  b = e.backtrace
  stderr.puts("#{b.shift}: #{e.message} (#{e.class})")
  stderr.puts(b.map{|s| "\tfrom #{s}"}.join("\n"))
  1

rescue SystemExit => e
  e.status

ensure
  reset_streams

end
setup_streams() click to toggle source
# File lib/money_tracking/cli/runner.rb, line 18
def setup_streams
  $stderr = stderr
  $stdin = stdin
  $stdout = stdout
end