commander-openflighthpc 2.1.1 → 2.1.2

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
  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