mercenary 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9ebb7e735aa1147cbcc69420fa3a934830c0415
4
- data.tar.gz: 120e555e1d05e2af4e674b42cd9143195310b92e
3
+ metadata.gz: 3c649528973138a967d8f6cafe92e65ae25a4a95
4
+ data.tar.gz: 3a7b3477db81d199a956536247c0c0e6bd44fda9
5
5
  SHA512:
6
- metadata.gz: becf09d037cb3f6475239595c42deba5c89791ccc13f5d2c622d1a88769d91e89c7da2685f1c238f2e41d0308b81cd81679f7ac7352fffa93d36cf7d989a7975
7
- data.tar.gz: 2ca3a69a6039ab31343002957dec0c8753181c17817d3d6b59afaa7dc6186e3d78f501979ffae98e3ecb4ba730bdbd46e4d8d5974f653f25fedf603fc9c75cde
6
+ metadata.gz: 906d1c04846f347c39bed714774527ccc7173b80e15799a69852368003b3d720da0e3dd0134a6069d7e353fa1c77205ca3e29cec731d0172b44377157b664bee
7
+ data.tar.gz: 6158035bcfa8721c4494498daba38e346d653484b20d29574bda9913dd8fd2f98cfee754227aa28c806a955a627582e3036b2df99819640784dff354152cee9b
data/History.markdown CHANGED
@@ -8,6 +8,17 @@
8
8
 
9
9
  ### Development Fixes
10
10
 
11
+ ## 0.3.1 / 2014-02-21
12
+
13
+ ### Minor Enhancements
14
+
15
+ * Add `-t/--trace` to list of options in help message (#19)
16
+
17
+ ### Bug Fixes
18
+
19
+ * `Mercenary::Option` now accepts return values in the form of Class constants
20
+ (#22)
21
+
11
22
  ## 0.3.0 / 2014-02-20
12
23
 
13
24
  ### Major Enhancements
data/README.md CHANGED
@@ -22,22 +22,26 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
+ Creating programs and commands with Mercenary is easy:
26
+
25
27
  ```ruby
26
28
  Mercenary.program(:jekyll) do |p|
27
29
  p.version Jekyll::VERSION
28
30
  p.description 'Jekyll is a blog-aware, static site generator in Ruby'
31
+ p.syntax "jekyll <subcommand> [options]"
29
32
 
30
33
  p.command(:new) do |c|
31
- c.syntax "jekyll new PATH"
34
+ c.syntax "new PATH" # do not include the program name or super commands
32
35
  c.description "Creates a new Jekyll site scaffold in PATH"
36
+ c.option 'blank', '--blank', 'Initialize the new site without any content.'
33
37
 
34
38
  c.action do |args, options|
35
- Jekyll::Commands::New.process(args)
39
+ Jekyll::Commands::New.process(args, blank: options['blank'])
36
40
  end
37
41
  end
38
42
 
39
43
  p.command(:build) do |c|
40
- c.syntax "jekyll build [options]"
44
+ c.syntax "build [options]"
41
45
  c.description "Builds your Jekyll site"
42
46
 
43
47
  c.option 'safe', '--safe', 'Run in safe mode'
@@ -49,28 +53,23 @@ Mercenary.program(:jekyll) do |p|
49
53
  end
50
54
  end
51
55
 
52
- p.command(:import) do |c|
53
- c.syntax "jekyll import <platform> [options]"
54
- c.description "Import your old blog to Jekyll"
55
-
56
- c.action do |args, options|
57
- begin
58
- require "jekyll-import"
59
- rescue
60
- msg = "You must install the 'jekyll-import' gem before continuing.\n"
61
- msg += "* Do this by running `gem install jekyll-import`.\n"
62
- msg += "* Or if you need root privileges, run `sudo gem install jekyll-import`."
63
- abort msg
64
- end
65
-
66
- Jekyll::Commands::Import.process(args.first, options)
67
- end
56
+ # Bring in command bundled in external gem
57
+ begin
58
+ require "jekyll-import"
59
+ JekyllImport.init_with_program(p)
60
+ rescue LoadError
68
61
  end
69
62
 
70
63
  p.default_command(:build)
71
64
  end
72
65
  ```
73
66
 
67
+ All commands have the following default options:
68
+
69
+ - `-h/--help` - show a help message
70
+ - `-v/--version` - show the program version
71
+ - `-t/--trace` - show the full backtrace when an error occurs
72
+
74
73
  ## Contributing
75
74
 
76
75
  1. Fork it
@@ -188,6 +188,7 @@ module Mercenary
188
188
  def add_default_options(opts)
189
189
  option 'show_help', '-h', '--help', 'Show this message'
190
190
  option 'show_version', '-v', '--version', 'Print the name and version'
191
+ option 'show_backtrace', '-t', '--trace', 'Show the full backtrace when an error occurs'
191
192
  opts.on("-v", "--version", "Print the version") do
192
193
  puts "#{name} #{version}"
193
194
  abort
@@ -1,24 +1,40 @@
1
1
  module Mercenary
2
2
  class Option
3
- attr_reader :config_key, :description, :switches
3
+ attr_reader :config_key, :description, :short, :long, :return_type
4
4
 
5
5
  # Public: Create a new Option
6
6
  #
7
- # config_key - the key in the config hash to which the value of this option will map
8
- # info - an array containing first the switches, then a description of the option
7
+ # config_key - the key in the config hash to which the value of this option
8
+ # will map
9
+ # info - an array containing first the switches, then an optional
10
+ # return type (e.g. Array), then a description of the option
9
11
  #
10
12
  # Returns nothing
11
13
  def initialize(config_key, info)
12
- @config_key = config_key
13
- @description = info.last unless info.last.start_with?("-")
14
- set_switches(info.take(info.size - [@description].reject(&:nil?).size))
14
+ @config_key = config_key
15
+ while arg = info.shift
16
+ begin
17
+ @return_type = Object.const_get("#{arg}")
18
+ next
19
+ rescue NameError
20
+ end
21
+ if arg.start_with?("-")
22
+ if arg.start_with?("--")
23
+ @long = arg
24
+ else
25
+ @short = arg
26
+ end
27
+ next
28
+ end
29
+ @description = arg
30
+ end
15
31
  end
16
32
 
17
33
  # Public: Fetch the array containing the info OptionParser is interested in
18
34
  #
19
35
  # Returns the array which OptionParser#on wants
20
36
  def for_option_parser
21
- [switches.reject(&:empty?), description].reject{ |o| o.nil? || o.empty? }.flatten
37
+ [short, long, return_type, description].flatten.reject{ |o| o.to_s.empty? }
22
38
  end
23
39
 
24
40
  # Public: Build a string representation of this option including the
@@ -59,21 +75,12 @@ module Mercenary
59
75
  end.all?
60
76
  end
61
77
 
62
- private
63
-
64
- # Private: Set the full switches array, ensuring the first element is the
65
- # short switch and the second element is the long switch
78
+ # Public: Fetch an array of switches, including the short and long versions
66
79
  #
67
- # Returns the corrected switches array
68
- def set_switches(switches)
69
- if switches.size < 2
70
- if switches.first.start_with?("--")
71
- switches.unshift ""
72
- else
73
- switches << ""
74
- end
75
- end
76
- @switches = switches
80
+ # Returns an array of two strings. An empty string represents no switch in
81
+ # that position.
82
+ def switches
83
+ [short, long].map(&:to_s)
77
84
  end
78
85
 
79
86
  end
@@ -1,3 +1,3 @@
1
1
  module Mercenary
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/spec/command_spec.rb CHANGED
@@ -60,7 +60,7 @@ describe(Mercenary::Command) do
60
60
  option = Mercenary::Option.new(name, opts)
61
61
  command.option name, *opts
62
62
  expect(command.options).to eql([option])
63
- expect(command.map).to include({option.hash => name})
63
+ expect(command.map.values).to include(name)
64
64
  end
65
65
 
66
66
  it "knows its full name" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercenary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-20 00:00:00.000000000 Z
12
+ date: 2014-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler