commander-openflighthpc 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7fc6691e8844c97ef13db4d9b8eafca04d32920f1dd0cee917c16ad9af3d276
4
- data.tar.gz: 17373b733f66051a671da4ae2f0137b6fc560806e0404ebeba0f392ed808ab7c
3
+ metadata.gz: 15b5727f3d10b876b81b223b19fcac47a56cf293a66b34305b96517976b04613
4
+ data.tar.gz: e047187d76098db98d240770dca013806512628ad1dcd54c613dc2627a7538d7
5
5
  SHA512:
6
- metadata.gz: 5b7ba1a31614a256b4c4c61d39f4b7684ff6abdf07a75073b21284d3e62b8a9a24de4c85da756cd6063d1b88cb91a79a1cbdd8829cda3e7af30eec6f40ceb997
7
- data.tar.gz: 811fbe363a0bb1f88f558b54bcfe1098c394da7f79219b71692b79a243733b64d1735ea3c9b6063d5c9202a7b1e0258136605574af99293a3d1e8d8fe82a2c76
6
+ metadata.gz: e5e8f5850885c9bf9540b82b7a7866fdb9a317c32c94501e51cef85d65711fe5037ffc7924f68c206ff4654e2f998ae237e5fbb36b9495f9619aaba3d95418a4
7
+ data.tar.gz: a6840ebf11d96c875e45a468ce492e2c748f20c3298121bc338b2f565d9b8f8c3dff6d278340d609f69ca98f8c0e8b52af3e40a4b93385d99dbc5fc4ae2c3c1c
data/README.md CHANGED
@@ -43,39 +43,37 @@ features, and an elegant API.
43
43
 
44
44
  ## Example
45
45
 
46
- For more option examples view the `Commander::Command#option` method. Also
47
- an important feature to note is that action may be a class to instantiate,
48
- as well as an object, specifying a method to call, so view the RDoc for more information.
49
-
50
- ### Classic style
51
-
52
46
  ```ruby
53
47
  require 'rubygems'
54
- require 'commander/import'
48
+ require 'commander'
55
49
 
50
+ class MyApplication
56
51
  # :name is optional, otherwise uses the basename of this executable
57
- program :name, 'Foo Bar'
58
- program :version, '1.0.0'
59
- program :description, 'Stupid command that prints foo or bar.'
60
-
61
- command :foo do |c|
62
- c.syntax = 'foobar foo'
63
- c.description = 'Displays foo'
64
- c.action do |args, options|
65
- say 'foo'
52
+ program :name, 'Foo Bar'
53
+ program :version, '1.0.0'
54
+ program :description, 'Stupid command that prints foo or bar.'
55
+
56
+ command :foo do |c|
57
+ c.syntax = 'foobar foo'
58
+ c.description = 'Displays foo'
59
+ c.action do |args, options|
60
+ say 'foo'
61
+ end
66
62
  end
67
- end
68
63
 
69
- command :bar do |c|
70
- c.syntax = 'foobar bar [options]'
71
- c.description = 'Display bar with optional prefix and suffix'
72
- c.option '--prefix STRING', 'Adds a prefix to bar'
73
- c.option '--suffix STRING', 'Adds a suffix to bar'
74
- c.action do |args, options|
75
- options.default :prefix => '(', :suffix => ')'
76
- say "#{options.prefix}bar#{options.suffix}"
64
+ command :bar do |c|
65
+ c.syntax = 'foobar bar [options]'
66
+ c.description = 'Display bar with optional prefix and suffix'
67
+ c.slop.string '--prefix', 'Adds a prefix to bar'
68
+ c.slop.string '--suffix', 'Adds a suffix to bar', meta: 'CUSTOM_META'
69
+ c.action do |args, options, config|
70
+ options.default :prefix => '(', :suffix => ')'
71
+ say "#{options.prefix}bar#{options.suffix}"
72
+ end
77
73
  end
78
74
  end
75
+
76
+ MyApplication.run!(ARGV) if $0 == __FILE__
79
77
  ```
80
78
 
81
79
  Example output:
@@ -88,49 +86,27 @@ $ foobar bar --suffix '}' --prefix '{'
88
86
  # => {bar}
89
87
  ```
90
88
 
91
- ### Modular style
89
+ ## Commander Goodies
92
90
 
93
- **NOTE:** Make sure to use `require 'commander'` rather than `require 'commander/import'`, otherwise Commander methods will still be imported into the global namespace.
91
+ ### Option Parsing
94
92
 
95
- ```ruby
96
- require 'rubygems'
97
- require 'commander'
98
-
99
- class MyApplication
100
- extend Commander::CLI
93
+ Option parsing is done using [Simple Lightweight Option Parsing](https://github.com/leejarvis/slop) which provides a rich interface for different option types. The main three being:
101
94
 
102
- program :name, 'Foo Bar'
103
- program :version, '1.0.0'
104
- program :description, 'Stupid command that prints foo or bar.'
105
-
106
- command :foo do |c|
107
- c.syntax = 'foobar foo'
108
- c.description = 'Displays foo'
109
- c.action do |args, options|
110
- say 'foo'
111
- end
112
- end
113
- end
114
-
115
- MyApplication.run!(ARGV) if $0 == __FILE__
116
95
  ```
96
+ command do |c|
97
+ # Boolean Flag
98
+ c.slop.bool '--boolean-flag', 'Sets the :boolean_flag option to true'
117
99
 
118
- ## Commander Goodies
100
+ # String Value
101
+ c.slop.string '--string-value', 'Takes a string from the command line'
102
+ c.slop.string '--flag', 'Sets the meta variable to META', meta: 'META'
119
103
 
120
- ### Option Defaults
104
+ # Interger Value
105
+ c.slop.integer '--integer-value', 'Takes the input and type casts it to an integer'
121
106
 
122
- The options struct passed to `#action` provides a `#default` method, allowing you
123
- to set defaults in a clean manner for options which have not been set.
124
-
125
- ```ruby
126
- command :foo do |c|
127
- c.option '--interval SECONDS', 'Interval in seconds'
128
- c.option '--timeout SECONDS', 'Timeout in seconds'
129
- c.action do |args, options|
130
- options.default \
131
- :interval => 2,
132
- :timeout => 60
133
- end
107
+ # Legacy syntax (boolean and string values only)
108
+ c.option '--legacy-bool', 'A boolean flag using the legacy syntax'
109
+ c.option '--legacy-string LEGACY_STRING', 'A string flag using the legacy syntax'
134
110
  end
135
111
  ```
136
112
 
@@ -221,7 +197,18 @@ Which will output the rest of the help doc, along with:
221
197
 
222
198
  ### Global Options
223
199
 
224
- WIP: Update globals behaviour
200
+ Global options work in a similar way to command level options. They both are configured using `Slop`. Global options are available on all commands. They are configure on the `global_slop` directive.
201
+
202
+ ```
203
+ class MyApplication
204
+ program :name, 'Foo Bar'
205
+
206
+ ...
207
+
208
+ global_slop.string '--custom-global', 'Available on all commands'
209
+ end
210
+
211
+ ```
225
212
 
226
213
  ### Tracing
227
214
 
@@ -103,15 +103,6 @@ module Commander
103
103
  end
104
104
  alias action when_called
105
105
 
106
- ##
107
- # Causes the option parsing to be skipped. The flags will be passed
108
- # down within the args instead
109
- #
110
-
111
- def skip_option_parsing(set = true)
112
- @skip_option_parsing ||= set
113
- end
114
-
115
106
  ##
116
107
  # Flags the command not to appear in general help text
117
108
  #
@@ -1,7 +1,7 @@
1
1
  module Commander
2
2
  ##
3
3
  # Internal error class to delay rendering help text
4
- # This is required as the help command pints directly to stdout
4
+ # This is required as the help command points directly to stdout
5
5
  # In general this has a bit of a code smell to it, and should
6
6
  # not be used publicly
7
7
  class InternalCallableError < StandardError
@@ -27,13 +27,15 @@
27
27
  <%= $terminal.color "OPTIONS", :bold %>:
28
28
  <% slop.options.each do |option| -%>
29
29
 
30
- <% tag = if [Slop::BoolOption, Slop::NullOption].include?(option.class)
31
- nil
32
- else
33
- option.key.upcase
34
- end
35
- -%>
36
- <%= option.flags.join ', ' %> <%= tag %>
30
+ <% tag = if [Slop::BoolOption, Slop::NullOption].include?(option.class)
31
+ nil
32
+ elsif meta = option.config[:meta]
33
+ meta
34
+ else
35
+ option.key.upcase
36
+ end
37
+ -%>
38
+ <%= option.flags.join ', ' %> <%= tag %>
37
39
  <%= Commander::HelpFormatter.indent 8, option.desc %><% if option.default_value %>
38
40
  <%= $terminal.color "Default", :bold %>: <%= option.default_value %><% end %>
39
41
  <% end -%>
@@ -32,14 +32,16 @@
32
32
  <%= $terminal.color "GLOBAL OPTIONS", :bold %>:
33
33
  <% global_slop.options.each do |global| -%>
34
34
 
35
- <% tag = if [Slop::BoolOption, Slop::NullOption]
36
- nil
37
- else
38
- option.key.upcase
39
- end
40
- -%>
35
+ <% tag = if [Slop::BoolOption, Slop::NullOption]
36
+ nil
37
+ elsif meta = option.config[:meta]
38
+ meta
39
+ else
40
+ option.key.upcase
41
+ end
42
+ -%>
41
43
  <%= global.flags.join ', ' %> <%= tag %>
42
- <%= global.desc %>
44
+ <%= Commander::HelpFormatter.indent 8, global.desc %>
43
45
  <% end -%>
44
46
  <% end -%>
45
47
  <% if program :help -%>
@@ -65,21 +65,17 @@ module Commander
65
65
  args_without_command_name
66
66
  end
67
67
 
68
- # Parses the global slop options
69
- global_parser = Slop::Parser.new(global_slop, suppress_errors: true)
70
- global_opts = global_parser.parse(remaining_args)
71
- remaining_args = global_parser.arguments
72
-
73
- # Parse the command slop options
74
- if active_command? && !active_command.skip_option_parsing(false)
75
- local_parser = Slop::Parser.new(active_command.slop)
76
- local_opts = local_parser.parse(remaining_args)
77
- remaining_args = local_parser.arguments
78
- end
79
-
80
- # Format the config and opts
68
+ # Combines the global and command options into a single parser
69
+ global_opts = global_slop.options
70
+ command_opts = active_command? ? active_command.slop.options : []
71
+ opts = [*global_opts, *command_opts]
72
+ parser = Slop::Parser.new(opts)
73
+
74
+ # Parsers the arguments/opts and fetches the config
75
+ parser.parse(remaining_args)
76
+ opts = OpenStruct.new parser.parse(remaining_args).to_h
77
+ remaining_args = parser.arguments
81
78
  config = program(:config).dup
82
- opts = OpenStruct.new global_opts.to_h.merge(local_opts.to_h)
83
79
 
84
80
  if opts.version
85
81
  # Return the version
@@ -1,3 +1,3 @@
1
1
  module Commander
2
- VERSION = '2.1.1'.freeze
2
+ VERSION = '2.1.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commander-openflighthpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alces Flight Ltd
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-05-07 00:00:00.000000000 Z
13
+ date: 2020-05-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: highline