slop 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -21,7 +21,7 @@ Usage
21
21
  # parse assumes ARGV, otherwise you can pass it your own Array
22
22
  opts = Slop.parse do
23
23
  on :v, :verbose, 'Enable verbose mode' # boolean value
24
- on :n, :name, 'Your name', true # compulsory argument
24
+ on :n, :name, 'Your name', true # option requires a compulsory argument
25
25
  on :s, :sex, 'Your sex', :optional => false # the same thing
26
26
  on :a, :age, 'Your age', :optional => true # optional argument
27
27
  end
@@ -389,4 +389,4 @@ thing in Slop:
389
389
  on :a, :age, 'Your age', true
390
390
  end
391
391
 
392
- opts.to_hash(true) #=> { :name => 'lee', :age => 105 }
392
+ opts.to_hash(true) #=> { :name => 'lee', :age => 105 }
data/lib/slop.rb CHANGED
@@ -16,7 +16,7 @@ class Slop
16
16
  class InvalidOptionError < RuntimeError; end
17
17
 
18
18
  # @return [String] The current version string
19
- VERSION = '1.5.2'
19
+ VERSION = '1.5.3'
20
20
 
21
21
  # Parses the items from a CLI format into a friendly object.
22
22
  #
@@ -65,6 +65,10 @@ class Slop
65
65
  # @option opts [String] :banner The banner text used for the help
66
66
  # @option opts [Proc, #call] :on_empty Any object that respondes to `call`
67
67
  # which is executed when Slop has no items to parse
68
+ # @option opts [IO, #puts] :io ($stderr) An IO object for writing to when
69
+ # :help => true is used
70
+ # @option opts [Boolean] :exit_on_help (true) When false and coupled with
71
+ # the :help option, Slop will not exit inside of the `help` option
68
72
  def initialize(*opts, &block)
69
73
  sloptions = {}
70
74
  sloptions.merge! opts.pop if opts.last.is_a? Hash
@@ -83,14 +87,17 @@ class Slop
83
87
  @on_empty = sloptions[:on_empty]
84
88
  @sloptions = sloptions
85
89
 
90
+ io = sloptions[:io] || $stderr
91
+ eoh = true if sloptions[:exit_on_help].nil?
92
+
86
93
  if block_given?
87
94
  block.arity == 1 ? yield(self) : instance_eval(&block)
88
95
  end
89
96
 
90
97
  if sloptions[:help]
91
98
  on :h, :help, 'Print this help message', :tail => true do
92
- puts help
93
- exit
99
+ io.puts help
100
+ exit if eoh
94
101
  end
95
102
  end
96
103
  end
data/lib/slop/option.rb CHANGED
@@ -21,6 +21,9 @@ class Slop
21
21
  # regexp, otherwise Slop will raise an InvalidArgumentError
22
22
  attr_reader :match
23
23
 
24
+ # @return [Object] true/false, or an optional help string to append
25
+ attr_reader :help
26
+
24
27
  # @overload argument_value=(value)
25
28
  # Set this options argument value
26
29
  # @param [Object] value The value you'd like applied to this option
@@ -40,6 +43,7 @@ class Slop
40
43
  # @option options [Integer] :limit (0)
41
44
  # @option options [Boolean] :tail (false)
42
45
  # @option options [Regexp] :match
46
+ # @option options [Boolean, String] :help
43
47
  def initialize(slop, short, long, description, argument, options={}, &blk)
44
48
  @slop = slop
45
49
  @short_flag = short
@@ -52,6 +56,8 @@ class Slop
52
56
 
53
57
  @tail = options[:tail]
54
58
  @match = options[:match]
59
+ @help = options[:help]
60
+ @help = true if @help.nil?
55
61
 
56
62
  @forced = false
57
63
  @argument_value = nil
@@ -60,7 +66,12 @@ class Slop
60
66
  @limit = options[:limit] || 0
61
67
 
62
68
  if @long_flag && @long_flag.size > @slop.longest_flag
63
- @slop.longest_flag = @long_flag.size
69
+ if @help.respond_to? :to_str
70
+ size = @long_flag.size + @help.size
71
+ else
72
+ size = @long_flag.size
73
+ end
74
+ @slop.longest_flag = size
64
75
  end
65
76
 
66
77
  @callback = blk if block_given?
@@ -127,7 +138,13 @@ class Slop
127
138
 
128
139
  if @long_flag
129
140
  out += "--#{@long_flag}"
130
- diff = @slop.longest_flag - @long_flag.size
141
+ if @help.respond_to? :to_str
142
+ out += " #{@help}"
143
+ size = @long_flag.size + @help.size + 1
144
+ else
145
+ size = @long_flag.size
146
+ end
147
+ diff = @slop.longest_flag - size
131
148
  spaces = " " * (diff + 6)
132
149
  out += spaces
133
150
  else
data/lib/slop/options.rb CHANGED
@@ -31,7 +31,8 @@ class Slop
31
31
  def to_help
32
32
  heads = reject {|x| x.tail }
33
33
  tails = select {|x| x.tail }
34
- (heads + tails).map(&:to_s).join("\n")
34
+ all = (heads + tails).reject {|x| !x.help }
35
+ all.map(&:to_s).join("\n")
35
36
  end
36
37
  end
37
38
  end
data/test/option_test.rb CHANGED
@@ -110,6 +110,18 @@ class OptionTest < TestCase
110
110
  assert slop.to_s.strip =~ /foo$/
111
111
  end
112
112
 
113
+ test 'do not print help for options with :help => false' do
114
+ slop = Slop.new
115
+ slop.on :f, :foo, :help => false
116
+ refute slop.help.include?('foo')
117
+ end
118
+
119
+ test 'appends a help string with :help => "string"' do
120
+ slop = Slop.new
121
+ slop.on :n, :name, 'Your name', true, :help => '<YOUR NAME HERE>'
122
+ assert_equal ' -n, --name <YOUR NAME HERE> Your name', slop.options[:name].to_s
123
+ end
124
+
113
125
  test 'argument matching' do
114
126
  slop = Slop.new
115
127
  slop.on :f, :foo, true, :match => /^h/
data/test/slop_test.rb CHANGED
@@ -317,4 +317,26 @@ class SlopTest < TestCase
317
317
  slop = Slop.new { on :f, :foo, true }
318
318
  assert_raises(Slop::MissingArgumentError) { slop.parse %w/-f --bar/ }
319
319
  end
320
+
321
+ test 'custom IO object' do
322
+ require 'stringio'
323
+ io = StringIO.new
324
+ slop = Slop.new(:help => true, :io => io)
325
+ slop.on :f, :foo, 'something fooey'
326
+ begin
327
+ slop.parse %w/--help/
328
+ rescue SystemExit
329
+ end
330
+ assert io.string.include? 'something fooey'
331
+ end
332
+
333
+ test 'exiting when using :help option' do
334
+ require 'stringio'
335
+ io = StringIO.new
336
+ opts = Slop.new(:help => true, :io => io)
337
+ assert_raises(SystemExit) { opts.parse %w/--help/ }
338
+
339
+ opts = Slop.new(:help => true, :io => io, :exit_on_help => false)
340
+ assert opts.parse %w/--help/
341
+ end
320
342
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slop
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.5.2
5
+ version: 1.5.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Lee Jarvis
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-18 00:00:00 +01:00
13
+ date: 2011-04-23 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies: []
16
16