subcommand-optparse 0.0.2 → 0.0.3

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: 634e18a8f111dd35ab12a98897abb16db057d351
4
- data.tar.gz: 63beca167bd690d821b878f3265f6e1f876b62ca
3
+ metadata.gz: d5254886d098c538ae00e28d7795c05c0b1e6f2c
4
+ data.tar.gz: 9cd2000a1319ee66fef314571ece3230405e8456
5
5
  SHA512:
6
- metadata.gz: aed83c4d4aa0a5abad231e614c7c41e66827353695d19faa91dc3d771635c480330cdd2720a068920f205796091e62518278cc5db90e2efddc874e5133a01179
7
- data.tar.gz: cf9879e2f5d5fc11b900ffd169b14d12937950fb23dfea2feda4796c483c8a9f3537addec92d7ce97545681fbaf130f535a7e127ff03031a5a5bc5cacd414b7d
6
+ metadata.gz: 9ff59e3a2b8fef696a11efd555b8b1faa88be6a54f0891621b3658d84edb1aba627719f8dbba649e1fb4325d6a6b5d4ea5ba6273093ca9f5e8feae5a5f57ac37
7
+ data.tar.gz: 61c811561c75a88e256fbca0c26bd5ea40668038dae9fa8975244bc1a828c8a144e8bee476c72fe50f5c1cd8da20b8494619b8a4346ce9600d052e2bdb8e9164
@@ -7,6 +7,7 @@ parser = SubCmdOptParser.new(:help_command => true) do |sc|
7
7
  sc.program_name = "sample_command.rb"
8
8
  sc.version = "0.0.1"
9
9
  sc.release = "hello world"
10
+ sc.summary = "Sample program"
10
11
 
11
12
  sc.global_option do |opt|
12
13
  opt.on("--global-option", "Banner of global option") do |v|
@@ -19,6 +20,14 @@ parser = SubCmdOptParser.new(:help_command => true) do |sc|
19
20
  end
20
21
  end
21
22
  sc.subcommand("bar") do |opt|
23
+ opt.usage = <<USAGE
24
+ sample_command.rb bar ARGS
25
+ [--bar-option] args...
26
+ USAGE
27
+ opt.example = <<EXAMPLE
28
+ ruby sample_command.rb bar 100 200
29
+ ruby sample_command.rb bar --bar-option
30
+ EXAMPLE
22
31
  opt.on("--bar-option", "Description of bar") do |v|
23
32
  options[:bar] = true
24
33
  end
@@ -6,25 +6,66 @@ class SubCmdOptParser
6
6
  class OptionParserForSubCmd < OptionParser
7
7
  attr_accessor :subcommand_name
8
8
  attr_accessor :description
9
+ attr_accessor :summary
10
+ attr_writer :usage
11
+ attr_writer :example
9
12
 
10
13
  def initialize(subcmd, description, width, indent)
11
14
  @subcommand_name = subcmd
12
15
  @description = description
16
+ @summary = nil
13
17
  super(nil, width, indent)
14
18
  end
15
19
 
20
+ def usage
21
+ usage_str = "Usage: "
22
+ if @usage
23
+ @usage.each_line.with_index do |line, ind|
24
+ usage_str << " " if ind > 0
25
+ usage_str << line.sub(/\n?\z/, "\n")
26
+ end
27
+ else
28
+ usage_str << "#{program_name} #{@subcommand_name || '<command>'} [options]\n"
29
+ end
30
+ usage_str
31
+ end
32
+
16
33
  def banner
17
34
  unless @banner
18
- @banner = "Usage: #{program_name} #{@subcommand_name || '<command>'} [options]"
19
- if @description
20
- @banner << "\n\n#{@description}"
35
+ @banner = usage
36
+ if @summary
37
+ @banner << "\n#{@summary.sub(/\n?\z/, "\n")}"
38
+ elsif @description
39
+ @banner << "\n#{@description.sub(/\n?\z/, "\n")}"
40
+ end
41
+ if @example
42
+ if @example.each_line.count == 1
43
+ @banner << "\nExample: #{@example.strip}"
44
+ else
45
+ @banner << "\nExamples:\n"
46
+ @example.each_line do |line|
47
+ @banner << " #{line.sub(/\n?\z/, "\n")}"
48
+ end
49
+ end
21
50
  end
22
- visit(:add_banner, @banner)
23
51
  end
24
52
  @banner
25
53
  end
54
+
55
+ def help
56
+ str_banner = "#{banner}".sub(/\n?\z/, "\n")
57
+ str_summary = summarize("")
58
+ if str_summary.size > 0
59
+ str_banner << "\nOptions:\n"
60
+ end
61
+ str_banner + str_summary
62
+ end
63
+
64
+ alias_method :to_s, :help
26
65
  end
27
66
 
67
+ # summary is shows in help message
68
+ attr_accessor :summary
28
69
  attr_accessor :program_name
29
70
  attr_accessor :summary_width
30
71
  attr_accessor :summary_indent
@@ -55,6 +96,7 @@ class SubCmdOptParser
55
96
  @global_option_setting = nil
56
97
  @subcommand = []
57
98
  @help_subcommand_use_p = (!opts.has_key?(:help_command) || opts[:help_command])
99
+ @summary = nil
58
100
  @version_subcommand_use_p = (!opts.has_key?(:version_command) || opts[:version_command])
59
101
  @accept_undefined_command = opts[:accept_undefined_command]
60
102
  @parse_only = opts[:parse_only]
@@ -125,7 +167,7 @@ class SubCmdOptParser
125
167
  private :get_option_parser
126
168
 
127
169
  def message_list_subcommands
128
- mes = "Commands are:\n"
170
+ mes = "Commands:\n"
129
171
  max_size_subcmd = (@subcommand.map { |name, val| name.size }).max
130
172
  str_size = (max_size_subcmd.even? ? max_size_subcmd : max_size_subcmd + 1) + 4
131
173
  @subcommand.each do |name, val|
@@ -137,7 +179,12 @@ class SubCmdOptParser
137
179
  private :message_list_subcommands
138
180
 
139
181
  def get_banner_help(opt)
140
- "Usage: #{opt.program_name} <command> [options]\n\n" + message_list_subcommands
182
+ mes = "Usage: #{opt.program_name} <command> [options]\n\n"
183
+ if @summary
184
+ mes << @summary << "\n\n"
185
+ end
186
+ mes << message_list_subcommands
187
+ mes
141
188
  end
142
189
  private :get_banner_help
143
190
 
@@ -1,3 +1,3 @@
1
1
  class SubCmdOptParser
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subcommand-optparse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takayuki YAMAGUCHI