clamp 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -33,33 +33,62 @@ module Clamp
33
33
  end
34
34
 
35
35
  def help(invocation_path)
36
- help = StringIO.new
37
- help.puts "Usage:"
38
- usage_descriptions.each_with_index do |usage, i|
39
- help.puts " #{invocation_path} #{usage}".rstrip
36
+ help = Builder.new
37
+ help.add_usage(invocation_path, usage_descriptions)
38
+ help.add_description(description)
39
+ if has_parameters?
40
+ help.add_list("Parameters", parameters)
40
41
  end
41
- if description
42
- help.puts ""
43
- help.puts description.gsub(/^/, " ")
42
+ if has_subcommands?
43
+ help.add_list("Subcommands", recognised_subcommands)
44
44
  end
45
- detail_format = " %-29s %s"
46
- if has_parameters?
47
- help.puts "\nParameters:"
48
- parameters.each do |parameter|
49
- help.puts detail_format % parameter.help
45
+ help.add_list("Options", recognised_options)
46
+ help.string
47
+ end
48
+
49
+ class Builder
50
+
51
+ def initialize
52
+ @out = StringIO.new
53
+ end
54
+
55
+ def string
56
+ @out.string
57
+ end
58
+
59
+ def add_usage(invocation_path, usage_descriptions)
60
+ puts "Usage:"
61
+ usage_descriptions.each do |usage|
62
+ puts " #{invocation_path} #{usage}".rstrip
50
63
  end
51
64
  end
52
- if has_subcommands?
53
- help.puts "\nSubcommands:"
54
- recognised_subcommands.each do |subcommand|
55
- help.puts detail_format % subcommand.help
65
+
66
+ def add_description(description)
67
+ if description
68
+ puts ""
69
+ puts description.gsub(/^/, " ")
70
+ end
71
+ end
72
+
73
+ DETAIL_FORMAT = " %-29s %s"
74
+
75
+ def add_list(heading, items)
76
+ puts "\n#{heading}:"
77
+ items.each do |item|
78
+ label, description = item.help
79
+ description.each_line do |line|
80
+ puts DETAIL_FORMAT % [label, line]
81
+ label = ''
82
+ end
56
83
  end
57
84
  end
58
- help.puts "\nOptions:"
59
- recognised_options.each do |option|
60
- help.puts detail_format % option.help
85
+
86
+ private
87
+
88
+ def puts(*args)
89
+ @out.puts(*args)
61
90
  end
62
- help.string
91
+
63
92
  end
64
93
 
65
94
  end
@@ -1,3 +1,3 @@
1
1
  module Clamp
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.2.3".freeze
3
3
  end
@@ -15,7 +15,7 @@ describe Clamp::Command do
15
15
  end
16
16
  end
17
17
 
18
- subcommand "flop", "flop it" do
18
+ subcommand "flop", "flop it\nfor extra flop" do
19
19
  def execute
20
20
  puts "FLOPPED"
21
21
  end
@@ -42,6 +42,11 @@ describe Clamp::Command do
42
42
  @help.should =~ /flop +flop it/
43
43
  end
44
44
 
45
+ it "handles new lines in subcommand descriptions" do
46
+ @help = @command.help
47
+ @help.should =~ /flop +flop it\n +for extra flop/
48
+ end
49
+
45
50
  end
46
51
 
47
52
  end
@@ -135,7 +135,7 @@ describe Clamp::Command do
135
135
  before do
136
136
  @command.class.option ["-f", "--flavour"], "FLAVOUR", "Flavour of the month"
137
137
  @command.class.option ["-c", "--color"], "COLOR", "Preferred hue"
138
- @command.class.option ["-n", "--[no-]nuts"], :flag, "Nuts (or not)"
138
+ @command.class.option ["-n", "--[no-]nuts"], :flag, "Nuts (or not)\nMay include nuts"
139
139
  @command.class.parameter "[ARG] ...", "extra arguments", :attribute_name => :arguments
140
140
  end
141
141
 
@@ -301,6 +301,10 @@ describe Clamp::Command do
301
301
  @command.help.should =~ %r(--flavour FLAVOUR +Flavour of the month)
302
302
  @command.help.should =~ %r(--color COLOR +Preferred hue)
303
303
  end
304
+
305
+ it "handles new lines in option descriptions" do
306
+ @command.help.should =~ %r(--\[no-\]nuts +Nuts \(or not\)\n +May include nuts)
307
+ end
304
308
 
305
309
  end
306
310
 
@@ -430,7 +434,7 @@ describe Clamp::Command do
430
434
  describe "with parameters declared" do
431
435
 
432
436
  before do
433
- @command.class.parameter "X", "x"
437
+ @command.class.parameter "X", "x\nxx"
434
438
  @command.class.parameter "Y", "y"
435
439
  @command.class.parameter "[Z]", "z", :default => "ZZZ"
436
440
  end
@@ -484,6 +488,25 @@ describe Clamp::Command do
484
488
 
485
489
  end
486
490
 
491
+ describe "#help" do
492
+
493
+ it "indicates that there are parameters" do
494
+ @command.help.should include("cmd [OPTIONS] X Y [Z]")
495
+ end
496
+
497
+ it "includes parameter details" do
498
+ @command.help.should =~ %r(X +x)
499
+ @command.help.should =~ %r(Y +y)
500
+ @command.help.should =~ %r(\[Z\] +z \(default: "ZZZ"\))
501
+ end
502
+
503
+ it "handles new lines in option descriptions" do
504
+ @command.help.should =~ %r(X +x\n +xx)
505
+ end
506
+
507
+ end
508
+
509
+
487
510
  end
488
511
 
489
512
  describe "with explicit usage" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: clamp
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mike Williams
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-18 00:00:00 Z
13
+ date: 2011-07-31 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: |
@@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- hash: 4567728835353449333
72
+ hash: 1591530698992906617
73
73
  segments:
74
74
  - 0
75
75
  version: "0"
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- hash: 4567728835353449333
81
+ hash: 1591530698992906617
82
82
  segments:
83
83
  - 0
84
84
  version: "0"