subcommand 1.0.4 → 1.0.5
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.
- data/CHANGELOG.rdoc +9 -0
- data/VERSION +1 -1
- data/lib/subcommand.rb +47 -22
- data/subcommand.gemspec +5 -2
- data/tests/recreate.sh +2 -0
- data/tests/t0001-main.sh +6 -0
- data/tests/t0003-inv_comm.sh +6 -0
- data/tests/test.rb +45 -0
- data/tests/test1.rb +47 -0
- metadata +5 -2
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
= subcommand 1.0.4 2010-06-24 15:51
|
2
|
+
* text for subcommands was being processed always before execution, so the
|
3
|
+
point of lazy loading was lost. I've moved it away so it's only processed if
|
4
|
+
actually printing help.
|
5
|
+
|
6
|
+
Howeve, this means that if you are relying on OptionParser's implicit --help,
|
7
|
+
that won't print subcommands. So i've added a method add_help_option which
|
8
|
+
adds a correct help option, to print subcommands. This way, command help and
|
9
|
+
command --help print identical output.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.5
|
data/lib/subcommand.rb
CHANGED
@@ -90,6 +90,48 @@ module Subcommands
|
|
90
90
|
yield @global
|
91
91
|
end
|
92
92
|
end
|
93
|
+
def print_actions
|
94
|
+
cmdtext = "Commands are:"
|
95
|
+
@commands.each_pair do |c, opt|
|
96
|
+
#puts "inside opt.call loop"
|
97
|
+
desc = opt.call.description
|
98
|
+
cmdtext << "\n #{c} : #{desc}"
|
99
|
+
end
|
100
|
+
|
101
|
+
# print aliases
|
102
|
+
unless @aliases.empty?
|
103
|
+
cmdtext << "\n\nAliases: \n"
|
104
|
+
@aliases.each_pair { |name, val| cmdtext << " #{name} - #{val}\n" }
|
105
|
+
end
|
106
|
+
|
107
|
+
cmdtext << "\n\nSee '#{$0} help COMMAND' for more information on a specific command."
|
108
|
+
end
|
109
|
+
## add text of subcommands in help and --help option
|
110
|
+
def add_subcommand_help
|
111
|
+
# user has defined some, but lets add subcommand information
|
112
|
+
|
113
|
+
cmdtext = print_actions
|
114
|
+
|
115
|
+
global_options do |opts|
|
116
|
+
# lets add the description user gave into banner
|
117
|
+
opts.banner << "\n#{opts.description}\n" if opts.description
|
118
|
+
opts.separator ""
|
119
|
+
opts.separator cmdtext
|
120
|
+
end
|
121
|
+
end
|
122
|
+
# this is so that on pressing --help he gets same subcommand help as when doing help.
|
123
|
+
# This is to be added in your main program, after defining global options
|
124
|
+
# if you want detailed help on --help. This is since optionparser's default
|
125
|
+
# --help will not print your actions/commands
|
126
|
+
def add_help_option
|
127
|
+
global_options do |opts|
|
128
|
+
opts.on("-h", "--help", "Print this help") do |v|
|
129
|
+
add_subcommand_help
|
130
|
+
puts @global
|
131
|
+
exit
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
93
135
|
# first parse global optinos
|
94
136
|
# then parse subcommand options if valid subcommand
|
95
137
|
# special case of "help command" so we print help of command - git style (3)
|
@@ -104,34 +146,14 @@ module Subcommands
|
|
104
146
|
opts.separator ""
|
105
147
|
opts.separator "Global options are:"
|
106
148
|
opts.on("-h", "--help", "Print this help") do |v|
|
149
|
+
add_subcommand_help
|
107
150
|
puts @global
|
108
151
|
exit
|
109
152
|
end
|
110
153
|
opts.separator ""
|
111
|
-
opts.separator subtext
|
154
|
+
#opts.separator subtext # FIXME: no such variable supposed to have subcommand help
|
112
155
|
end
|
113
156
|
else
|
114
|
-
# user has defined some, but lets add subcommand information
|
115
|
-
cmdtext = "Commands are:"
|
116
|
-
@commands.each_pair do |c, opt|
|
117
|
-
desc = opt.call.description
|
118
|
-
cmdtext << "\n #{c} : #{desc}"
|
119
|
-
end
|
120
|
-
|
121
|
-
# print aliases
|
122
|
-
unless @aliases.empty?
|
123
|
-
cmdtext << "\n\nAliases: \n"
|
124
|
-
@aliases.each_pair { |name, val| cmdtext << " #{name} - #{val}\n" }
|
125
|
-
end
|
126
|
-
|
127
|
-
cmdtext << "\n\nSee '#{$0} help COMMAND' for more information on a specific command."
|
128
|
-
|
129
|
-
global_options do |opts|
|
130
|
-
# lets add the description user gave into banner
|
131
|
-
opts.banner << "\n#{opts.description}\n" if opts.description
|
132
|
-
opts.separator ""
|
133
|
-
opts.separator cmdtext
|
134
|
-
end
|
135
157
|
end
|
136
158
|
@global.order!
|
137
159
|
cmd = ARGV.shift
|
@@ -163,11 +185,13 @@ module Subcommands
|
|
163
185
|
else
|
164
186
|
# no help for this command XXX check for alias
|
165
187
|
puts "Invalid command: #{cmd}."
|
188
|
+
add_subcommand_help
|
166
189
|
puts @global
|
167
190
|
end
|
168
191
|
else
|
169
192
|
# invalid command
|
170
193
|
puts "Invalid command: #{cmd}" unless cmd == "help"
|
194
|
+
add_subcommand_help
|
171
195
|
puts @global
|
172
196
|
end
|
173
197
|
exit 0
|
@@ -211,6 +235,7 @@ if __FILE__ == $PROGRAM_NAME
|
|
211
235
|
options[:verbose] = v
|
212
236
|
end
|
213
237
|
end
|
238
|
+
add_help_option
|
214
239
|
# define a command
|
215
240
|
command :foo, :goo do |opts|
|
216
241
|
opts.banner = "Usage: foo [options]"
|
data/subcommand.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{subcommand}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rahul Kumar"]
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.files = [
|
21
21
|
".document",
|
22
22
|
".gitignore",
|
23
|
+
"CHANGELOG.rdoc",
|
23
24
|
"LICENSE",
|
24
25
|
"Makefile",
|
25
26
|
"README.rdoc",
|
@@ -40,7 +41,9 @@ Gem::Specification.new do |s|
|
|
40
41
|
"tests/t0006-goo_opt.sh",
|
41
42
|
"tests/t0007-bar_baz.sh",
|
42
43
|
"tests/t0008-boo_zoo.sh",
|
43
|
-
"tests/test-lib.sh"
|
44
|
+
"tests/test-lib.sh",
|
45
|
+
"tests/test.rb",
|
46
|
+
"tests/test1.rb"
|
44
47
|
]
|
45
48
|
s.homepage = %q{http://github.com/rkumar/subcommand}
|
46
49
|
s.rdoc_options = ["--charset=UTF-8"]
|
data/tests/recreate.sh
CHANGED
@@ -24,10 +24,12 @@ echo "Using suffix:$str"
|
|
24
24
|
read -p "press enter "
|
25
25
|
grep '^>>> ' "$oldfile" | sed 's/^>>> //'
|
26
26
|
read -p "press enter "
|
27
|
+
cp serial_numbers serial_numbers.xxx
|
27
28
|
grep '^>>> ' "$oldfile" | sed 's/^>>> //' | ./rtest2.sh $LOADSTR "$str"
|
28
29
|
|
29
30
|
echo
|
30
31
|
echo renaming old file with O prefix
|
31
32
|
mv "$oldfile" O$oldfile
|
33
|
+
cp serial_numbers.xxx serial_numbers
|
32
34
|
echo "If you don't find a test case, then rename transcript.txt to $oldfile"
|
33
35
|
echo "cp transcript.txt $oldfile"
|
data/tests/t0001-main.sh
CHANGED
@@ -12,6 +12,7 @@ Stupid program that does something
|
|
12
12
|
|
13
13
|
Global options are:
|
14
14
|
-v, --[no-]verbose Run verbosely
|
15
|
+
-h, --help Print this help
|
15
16
|
|
16
17
|
Commands are:
|
17
18
|
foo : desc for foo
|
@@ -26,12 +27,15 @@ Aliases:
|
|
26
27
|
|
27
28
|
See 'bin/subcommand.rb help COMMAND' for more information on a specific command.
|
28
29
|
>>> end
|
30
|
+
>>> end
|
31
|
+
>>> end
|
29
32
|
>>> ruby bin/subcommand.rb --help
|
30
33
|
Usage: subcommand.rb [options] [subcommand [options]]
|
31
34
|
Stupid program that does something
|
32
35
|
|
33
36
|
Global options are:
|
34
37
|
-v, --[no-]verbose Run verbosely
|
38
|
+
-h, --help Print this help
|
35
39
|
|
36
40
|
Commands are:
|
37
41
|
foo : desc for foo
|
@@ -46,6 +50,8 @@ Aliases:
|
|
46
50
|
|
47
51
|
See 'bin/subcommand.rb help COMMAND' for more information on a specific command.
|
48
52
|
>>> end
|
53
|
+
>>> end
|
54
|
+
>>> end
|
49
55
|
|
50
56
|
EOF
|
51
57
|
test_done
|
data/tests/t0003-inv_comm.sh
CHANGED
@@ -13,6 +13,7 @@ Stupid program that does something
|
|
13
13
|
|
14
14
|
Global options are:
|
15
15
|
-v, --[no-]verbose Run verbosely
|
16
|
+
-h, --help Print this help
|
16
17
|
|
17
18
|
Commands are:
|
18
19
|
foo : desc for foo
|
@@ -27,6 +28,8 @@ Aliases:
|
|
27
28
|
|
28
29
|
See 'bin/subcommand.rb help COMMAND' for more information on a specific command.
|
29
30
|
>>> end
|
31
|
+
>>> end
|
32
|
+
>>> end
|
30
33
|
>>> ruby bin/subcommand.rb fxxx --help
|
31
34
|
Invalid command: fxxx
|
32
35
|
Usage: subcommand.rb [options] [subcommand [options]]
|
@@ -34,6 +37,7 @@ Stupid program that does something
|
|
34
37
|
|
35
38
|
Global options are:
|
36
39
|
-v, --[no-]verbose Run verbosely
|
40
|
+
-h, --help Print this help
|
37
41
|
|
38
42
|
Commands are:
|
39
43
|
foo : desc for foo
|
@@ -48,6 +52,8 @@ Aliases:
|
|
48
52
|
|
49
53
|
See 'bin/subcommand.rb help COMMAND' for more information on a specific command.
|
50
54
|
>>> end
|
55
|
+
>>> end
|
56
|
+
>>> end
|
51
57
|
|
52
58
|
EOF
|
53
59
|
test_done
|
data/tests/test.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
require 'subcommand'
|
3
|
+
|
4
|
+
if __FILE__ == $PROGRAM_NAME
|
5
|
+
include Subcommands
|
6
|
+
options = {}
|
7
|
+
appname = File.basename($0)
|
8
|
+
# global is optional
|
9
|
+
#global_options do |opts|
|
10
|
+
#opts.banner = "Usage: #{appname} [options] [subcommand [options]]"
|
11
|
+
#opts.description = "Stupid program that does something"
|
12
|
+
#opts.separator ""
|
13
|
+
#opts.separator "Global options are:"
|
14
|
+
#opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
15
|
+
#options[:verbose] = v
|
16
|
+
#end
|
17
|
+
#end
|
18
|
+
# define a command
|
19
|
+
command :foo, :goo do |opts|
|
20
|
+
opts.banner = "Usage: foo [options]"
|
21
|
+
opts.description = "desc for foo"
|
22
|
+
opts.on("-f", "--[no-]force", "force verbosely") do |v|
|
23
|
+
options[:force] = v
|
24
|
+
end
|
25
|
+
end
|
26
|
+
command :baz do |opts|
|
27
|
+
opts.banner = "Usage: baz [options]"
|
28
|
+
opts.description = "desc for baz"
|
29
|
+
opts.on("-q", "--[no-]quiet", "quietly run ") do |v|
|
30
|
+
options[:quiet] = v
|
31
|
+
end
|
32
|
+
end
|
33
|
+
alias_command :bar, 'baz'
|
34
|
+
alias_command :boo, 'foo', '--force'
|
35
|
+
alias_command :zoo, 'foo', 'ruby'
|
36
|
+
|
37
|
+
# do the parsing.
|
38
|
+
cmd = opt_parse()
|
39
|
+
|
40
|
+
puts "cmd: #{cmd}"
|
41
|
+
puts "options ......"
|
42
|
+
p options
|
43
|
+
puts "ARGV:"
|
44
|
+
p ARGV
|
45
|
+
end
|
data/tests/test1.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
######################################
|
3
|
+
require 'subcommand'
|
4
|
+
|
5
|
+
if __FILE__ == $PROGRAM_NAME
|
6
|
+
include Subcommands
|
7
|
+
options = {}
|
8
|
+
appname = File.basename($0)
|
9
|
+
# global is optional
|
10
|
+
global_options do |opts|
|
11
|
+
opts.banner = "Usage: #{appname} [options] [subcommand [options]]"
|
12
|
+
opts.description = "Stupid program that does something"
|
13
|
+
opts.separator ""
|
14
|
+
opts.separator "Global options are:"
|
15
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
16
|
+
options[:verbose] = v
|
17
|
+
end
|
18
|
+
end
|
19
|
+
add_help_option
|
20
|
+
# define a command
|
21
|
+
command :foo, :goo do |opts|
|
22
|
+
opts.banner = "Usage: foo [options]"
|
23
|
+
opts.description = "desc for foo"
|
24
|
+
opts.on("-f", "--[no-]force", "force verbosely") do |v|
|
25
|
+
options[:force] = v
|
26
|
+
end
|
27
|
+
end
|
28
|
+
command :baz do |opts|
|
29
|
+
opts.banner = "Usage: baz [options]"
|
30
|
+
opts.description = "desc for baz"
|
31
|
+
opts.on("-q", "--[no-]quiet", "quietly run ") do |v|
|
32
|
+
options[:quiet] = v
|
33
|
+
end
|
34
|
+
end
|
35
|
+
alias_command :bar, 'baz'
|
36
|
+
alias_command :boo, 'foo', '--force'
|
37
|
+
alias_command :zoo, 'foo', 'ruby'
|
38
|
+
|
39
|
+
# do the parsing.
|
40
|
+
cmd = opt_parse()
|
41
|
+
|
42
|
+
puts "cmd: #{cmd}"
|
43
|
+
puts "options ......"
|
44
|
+
p options
|
45
|
+
puts "ARGV:"
|
46
|
+
p ARGV
|
47
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 5
|
9
|
+
version: 1.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Rahul Kumar
|
@@ -42,6 +42,7 @@ extra_rdoc_files:
|
|
42
42
|
files:
|
43
43
|
- .document
|
44
44
|
- .gitignore
|
45
|
+
- CHANGELOG.rdoc
|
45
46
|
- LICENSE
|
46
47
|
- Makefile
|
47
48
|
- README.rdoc
|
@@ -63,6 +64,8 @@ files:
|
|
63
64
|
- tests/t0007-bar_baz.sh
|
64
65
|
- tests/t0008-boo_zoo.sh
|
65
66
|
- tests/test-lib.sh
|
67
|
+
- tests/test.rb
|
68
|
+
- tests/test1.rb
|
66
69
|
- TODO
|
67
70
|
has_rdoc: true
|
68
71
|
homepage: http://github.com/rkumar/subcommand
|