clasp-ruby 0.11.1 → 0.12.1

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: a8da53dd37696e2528150ea2194a0b3455df79ce
4
- data.tar.gz: 531aa7eb5a3f7fac55f024c021f22aefe84b5d75
3
+ metadata.gz: e91dda59cda14727e357868705aa9b64ea6b2360
4
+ data.tar.gz: bb8bebd59f109aee136c869d50c70ab1ded2568d
5
5
  SHA512:
6
- metadata.gz: 182e5db95920e7adbd62786d608d8a8de0c29f85e266d4a3ab481ed24a5c7665fe51c9e1a6a498e78d43d08b3597f145a05bf464fa5c44013001685f849a0e33
7
- data.tar.gz: 72372e9151b6f1acf8efe591b9b1d9213acf52c5a042fd442d69c090908ba4f42d091297e6e709a5b18d317ba6f73d568448ce7c8a8a7749c6d720cf9f420513
6
+ metadata.gz: 4aa994801820d90d6acd54e86cd140f7617de6e7cb157bdce328ddda568264aacf98f348afbe4e504483b95ff98e98904e6cfc2bdabd307b7d838517f3b3b93b
7
+ data.tar.gz: 12b9257d551fc31b941011e4fc792928e850c1dc721380322586712f11243d411a5d4ff133e8fa9c102d4fad02ef35a416b15a663baf9eacd0c487f785870387
data/lib/clasp/aliases.rb CHANGED
@@ -5,13 +5,13 @@
5
5
  # Purpose: Alias classes
6
6
  #
7
7
  # Created: 25th October 2014
8
- # Updated: 10th June 2016
8
+ # Updated: 1st January 2018
9
9
  #
10
10
  # Home: http://github.com/synesissoftware/CLASP.Ruby
11
11
  #
12
12
  # Author: Matthew Wilson
13
13
  #
14
- # Copyright (c) 2014-2016, Matthew Wilson and Synesis Software
14
+ # Copyright (c) 2014-2018, Matthew Wilson and Synesis Software
15
15
  # All rights reserved.
16
16
  #
17
17
  # Redistribution and use in source and binary forms, with or without
@@ -131,15 +131,45 @@ class Option
131
131
  # - +help+:: (+String+) The help string, which may be +nil+.
132
132
  # - +values_range+:: (+Array+) 0 or more strings specifying values supported by the option.
133
133
  # - +default_value+:: (+String+) The default value of the option. May be +nil+.
134
+ # - +required+:: [boolean] Whether the option is required. May be
135
+ # +nil+
136
+ # - +required_message+:: [::String] Message to be used when reporting
137
+ # that a required option is missing. May be +nil+ in which case a
138
+ # message of the form "<option-name> not specified; use --help for
139
+ # usage". If begins with the nul character ("\0"), then is used in
140
+ # the place of the <option-name> and placed into the rest of the
141
+ # standard form message
134
142
  # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+.
135
- def initialize(name, aliases, help, values_range, default_value, extras = nil)
143
+ def initialize(name, aliases, help, values_range, default_value, required, required_message, extras = nil)
136
144
 
137
- @name = name
138
- @aliases = (aliases || []).select { |a| a and not a.empty? }
139
- @help = help
140
- @values_range = values_range || []
141
- @default_value = default_value
142
- @extras = extras || {}
145
+ @name = name
146
+ @aliases = (aliases || []).select { |a| a and not a.empty? }
147
+ @help = help
148
+ @values_range = values_range || []
149
+ @default_value = default_value
150
+ @required = required
151
+ @required_message = nil
152
+ @extras = extras || {}
153
+
154
+ rm_name = nil
155
+
156
+ if required_message
157
+
158
+ if "\0" == required_message[0]
159
+
160
+ rm_name = required_message[1..-1]
161
+ end
162
+ else
163
+
164
+ rm_name = "'#{name}'"
165
+ end
166
+
167
+ if rm_name
168
+
169
+ required_message = "#{rm_name} not specified; use --help for usage"
170
+ end
171
+
172
+ @required_message = required_message
143
173
  end
144
174
 
145
175
  # The option's name string
@@ -152,20 +182,40 @@ class Option
152
182
  attr_reader :values_range
153
183
  # The default value of the option
154
184
  attr_reader :default_value
155
- # The flag's extras
185
+ # Indicates whether the option is required
186
+ def required?; @required; end
187
+ # The message to be used when reporting that a required option is
188
+ # missing
189
+ attr_reader :required_message
190
+ # The option's extras
156
191
  attr_reader :extras
157
192
 
158
193
  # String form of the option
159
194
  def to_s
160
195
 
161
- "{#{name}; aliases=#{aliases.join(', ')}; values_range=[ #{values_range.join(', ')} ]; default_value='#{default_value}'; help='#{help}'; extras=#{extras}}"
196
+ "{#{name}; aliases=#{aliases.join(', ')}; values_range=[ #{values_range.join(', ')} ]; default_value='#{default_value}'; help='#{help}'; required?=#{required?}; extras=#{extras}}"
162
197
  end
163
198
  end
164
199
 
165
200
  # ######################################################################## #
166
201
  # functions
167
202
 
168
- # Generator method that obtains a CLASP::Flag according to the given parameters
203
+ # Generator method that obtains a CLASP::Flag according to the given
204
+ # parameters
205
+ #
206
+ # === Signature
207
+ #
208
+ # * *Parameters:*
209
+ # - +name+:: [::String] The flag name, e.g. '--verbose'
210
+ # - +options+:: [::Hash] An options hash, containing any of the following
211
+ # options:
212
+ #
213
+ # * *Options:*
214
+ # - +:alias+ [::String] An alias, e.g. '-v'
215
+ # - +:aliases+ [::Array] An array of aliases, e.g. [ '-v', '-verb' ]
216
+ # - +:extras+ An application-defined object, usually a hash of custom
217
+ # attributes
218
+ # - +:help+ [::String] A help string
169
219
  def CLASP.Flag(name, options = {})
170
220
 
171
221
  aliases = nil
@@ -202,13 +252,44 @@ def CLASP.Flag(name, options = {})
202
252
  CLASP::Flag.new(name, aliases, help, extras)
203
253
  end
204
254
 
205
- # Generator method that obtains a CLASP::Option according to the given parameters
255
+ # Generator method that obtains a CLASP::Option according to the given
256
+ # parameters
257
+ #
258
+ # === Signature
259
+ #
260
+ # * *Parameters:*
261
+ # - +name+:: [::String] The flag name, e.g. '--verbose'
262
+ # - +options+:: [::Hash] An options hash, containing any of the following
263
+ # options:
264
+ #
265
+ # * *Options:*
266
+ # - +:alias+ [::String] An alias, e.g. '-v'
267
+ # - +:aliases+ [::Array] An array of aliases, e.g. [ '-v', '-verb' ]
268
+ # - +:default_value+ The default value for the option
269
+ # - +:default+ [DEPRECATED] Alternative to +:default_value+
270
+ # - +:extras+ An application-defined object, usually a hash of custom
271
+ # attributes
272
+ # - +:help+ [::String] A help string
273
+ # - +required+:: [boolean] Whether the option is required. May be
274
+ # +nil+
275
+ # - +required_message+:: [::String] Message to be used when reporting
276
+ # that a required option is missing. May be +nil+ in which case a
277
+ # message of the form "<option-name> not specified; use --help for
278
+ # usage". If begins with the nul character ("\0"), then is used in
279
+ # the place of the <option-name> and placed into the rest of the
280
+ # standard form message
281
+ # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+.
282
+ # - +:values_range+ [::Array] An array defining the accepted values for
283
+ # the option
284
+ # - +:values+ [DEPRECATED] Alternative to +:values_range+
206
285
  def CLASP.Option(name, options = {})
207
286
 
208
287
  aliases = nil
209
288
  help = nil
210
289
  values_range = nil
211
290
  default_value = nil
291
+ required = false
292
+ require_message = nil
212
293
  extras = nil
213
294
 
214
295
  options.each do |k, v|
@@ -231,6 +312,12 @@ def CLASP.Option(name, options = {})
231
312
  when :default_value, :default
232
313
 
233
314
  default_value = v
315
+ when :required
316
+
317
+ required = v
318
+ when :required_message
319
+
320
+ require_message = v
234
321
  when :extras
235
322
 
236
323
  extras = v
@@ -244,7 +331,7 @@ def CLASP.Option(name, options = {})
244
331
  end
245
332
  end
246
333
 
247
- CLASP::Option.new(name, aliases, help, values_range, default_value, extras)
334
+ CLASP::Option.new(name, aliases, help, values_range, default_value, required, require_message, extras)
248
335
  end
249
336
 
250
337
  # ######################################################################## #
@@ -254,3 +341,4 @@ end # module CLASP
254
341
 
255
342
  # ############################## end of file ############################# #
256
343
 
344
+
data/lib/clasp/version.rb CHANGED
@@ -5,13 +5,13 @@
5
5
  # Purpose: Version for CLASP.Ruby library
6
6
  #
7
7
  # Created: 16th November 2014
8
- # Updated: 16th July 2016
8
+ # Updated: 1st January 2018
9
9
  #
10
10
  # Home: http://github.com/synesissoftware/CLASP.Ruby
11
11
  #
12
12
  # Author: Matthew Wilson
13
13
  #
14
- # Copyright (c) 2014-2016, Matthew Wilson and Synesis Software
14
+ # Copyright (c) 2014-2018, Matthew Wilson and Synesis Software
15
15
  # All rights reserved.
16
16
  #
17
17
  # Redistribution and use in source and binary forms, with or without
@@ -51,7 +51,7 @@
51
51
  module CLASP
52
52
 
53
53
  # Current version of the CLASP.Ruby library
54
- VERSION = '0.11.1'
54
+ VERSION = '0.12.1'
55
55
 
56
56
  private
57
57
  VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
@@ -0,0 +1,46 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
4
+
5
+ require 'clasp'
6
+
7
+ require 'test/unit'
8
+
9
+ class Test_extras_1 < Test::Unit::TestCase
10
+
11
+ def test_Option_with_no_extras
12
+
13
+ o = CLASP.Option('--verbose')
14
+
15
+ assert_equal '--verbose', o.name
16
+ assert_equal [], o.aliases
17
+ assert_equal [], o.values_range
18
+ assert_equal nil, o.default_value
19
+ assert_equal ({}), o.extras
20
+ end
21
+
22
+ def test_Option_with_extras_as_symbol
23
+
24
+ o = CLASP.Option('--verbose', extras: :extras)
25
+
26
+ assert_equal '--verbose', o.name
27
+ assert_equal [], o.aliases
28
+ assert_equal [], o.values_range
29
+ assert_equal nil, o.default_value
30
+ assert_equal :extras, o.extras
31
+ end
32
+
33
+ def test_Option_with_extras_as_hash
34
+
35
+ o = CLASP.Option('--verbose', extras: { :abc => 'abc', :def => 'def' })
36
+
37
+ assert_equal '--verbose', o.name
38
+ assert_equal [], o.aliases
39
+ assert_equal [], o.values_range
40
+ assert_equal nil, o.default_value
41
+ assert_equal ({ :abc => 'abc', :def => 'def' }), o.extras
42
+ end
43
+ end
44
+
45
+
46
+
@@ -0,0 +1,51 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
4
+
5
+ require 'clasp'
6
+
7
+ require 'test/unit'
8
+
9
+ class Test_Option_required < Test::Unit::TestCase
10
+
11
+ def test_Option_required_false_implicit
12
+
13
+ o = CLASP.Option('--verbose')
14
+
15
+ assert_equal '--verbose', o.name
16
+ assert_equal [], o.aliases
17
+ assert_equal [], o.values_range
18
+ assert_equal nil, o.default_value
19
+ assert_equal ({}), o.extras
20
+ assert_false o.required?
21
+ assert_equal "'--verbose' not specified; use --help for usage", o.required_message
22
+ end
23
+
24
+ def test_Option_required_false_explicit
25
+
26
+ o = CLASP.Option('--verbose', required: false, required_message: "\0Verbosity")
27
+
28
+ assert_equal '--verbose', o.name
29
+ assert_equal [], o.aliases
30
+ assert_equal [], o.values_range
31
+ assert_equal nil, o.default_value
32
+ assert_equal ({}), o.extras
33
+ assert_false o.required?
34
+ assert_equal "Verbosity not specified; use --help for usage", o.required_message
35
+ end
36
+
37
+ def test_Option_required_true
38
+
39
+ o = CLASP.Option('--verbose', required: true, required_message: 'Verbosity not given')
40
+
41
+ assert_equal '--verbose', o.name
42
+ assert_equal [], o.aliases
43
+ assert_equal [], o.values_range
44
+ assert_equal nil, o.default_value
45
+ assert_equal ({}), o.extras
46
+ assert_true o.required?
47
+ assert_equal "Verbosity not given", o.required_message
48
+ end
49
+ end
50
+
51
+
data/test/unit/ts_all.rb CHANGED
@@ -2,7 +2,6 @@
2
2
  #
3
3
  # executes all other tests
4
4
 
5
- this_file = File.expand_path(__FILE__)
6
5
  this_dir = File.expand_path(File.dirname(__FILE__))
7
6
 
8
7
  # all tc_*rb in current directory
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clasp-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Wilson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-22 00:00:00.000000000 Z
11
+ date: 2018-01-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  Command-Line Argument Sorting and Parsing library that provides a powerful
@@ -42,7 +42,9 @@ files:
42
42
  - test/unit/tc_arguments_3.rb
43
43
  - test/unit/tc_defaults_1.rb
44
44
  - test/unit/tc_examples_Arguments.rb
45
+ - test/unit/tc_extras.rb
45
46
  - test/unit/tc_immutable_array.rb
47
+ - test/unit/tc_option_required.rb
46
48
  - test/unit/tc_usage.rb
47
49
  - test/unit/tc_util_immutable_array.rb
48
50
  - test/unit/ts_all.rb