From 216378ef77fb1b4d99cc154d6e166faf9a2d44b5 Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Thu, 20 Feb 2014 18:14:37 -0500 Subject: [PATCH] Add -t and --trace to Command's default flags --- examples/trace.rb | 21 +++++++++++++++++++++ lib/mercenary/command.rb | 20 +++++++++++++------- lib/mercenary/program.rb | 11 ++++++++++- 3 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 examples/trace.rb diff --git a/examples/trace.rb b/examples/trace.rb new file mode 100644 index 0000000..0aaa365 --- /dev/null +++ b/examples/trace.rb @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby + +$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) + +require "mercenary" + +# This example sets the logging mode of mercenary to +# debug. Logging messages from "p.logger.debug" will +# be output to STDOUT. + +Mercenary.program(:trace) do |p| + + p.version "2.0.1" + p.description 'An example of traces in Mercenary' + p.syntax 'trace ' + + p.action do |_, _| + raise ArgumentError.new("YOU DID SOMETHING TERRIBLE YOU BUFFOON") + end + +end diff --git a/lib/mercenary/command.rb b/lib/mercenary/command.rb index 75953d2..f18d3a3 100644 --- a/lib/mercenary/command.rb +++ b/lib/mercenary/command.rb @@ -8,6 +8,7 @@ class Command attr_accessor :actions attr_reader :map attr_accessor :parent + attr_reader :trace # Public: Creates a new Command # @@ -17,12 +18,13 @@ class Command # # Returns nothing def initialize(name, parent = nil) - @name = name - @options = [] - @commands = {} - @actions = [] - @map = {} - @parent = parent + @name = name + @options = [] + @commands = {} + @actions = [] + @map = {} + @parent = parent + @trace = false end # Public: Sets or gets the command version @@ -133,7 +135,7 @@ def logger(level = nil) @logger = Logger.new(STDOUT) @logger.level = level || Logger::INFO @logger.formatter = proc do |severity, datetime, progname, msg| - "#{ident} (#{severity}): #{msg}\n" + "#{identity} (#{severity}): #{msg}\n" end end @@ -191,6 +193,10 @@ def add_default_options(opts) abort end + opts.on('-t', '--trace', 'Show full backtrace if an error occurs') do + @trace = true + end + opts.on_tail("-h", "--help", "Show this message") do puts self exit diff --git a/lib/mercenary/program.rb b/lib/mercenary/program.rb index 192a384..73d9b96 100644 --- a/lib/mercenary/program.rb +++ b/lib/mercenary/program.rb @@ -31,7 +31,16 @@ def go(argv) logger.debug("Parsed config: #{@config.inspect}") - cmd.execute(argv, @config) + begin + cmd.execute(argv, @config) + rescue => e + if cmd.trace + raise e + else + logger.error e.message + abort + end + end end end end