clasp-ruby 0.18.2 → 0.19.0

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
  SHA1:
3
- metadata.gz: 0bfeb7de8319fee62e174f609591715f0910e1ad
4
- data.tar.gz: cc60cc8e5ce0c2a841f024785cccc0d2c90a54ec
3
+ metadata.gz: 95ce67e26d5789cde25d8fd230f49933751f0c60
4
+ data.tar.gz: c8be483da241ea331f967af810dcb50338561886
5
5
  SHA512:
6
- metadata.gz: 4e7ab5192e70f3b5dc243c81fc3d8a645fea11ae5cb64a7efed074460ec2339cac839b504917d6dc225a76899dcb726dd03078fa1bafd1b0251b4337521a3969
7
- data.tar.gz: d502c1f31d0f13aad64e7e680288285d795ce5a0edb275a085be27c6bf0f2dc4b90c838425e6470a6d446f82721ac9fb818c1f8e8692ce9df7a60c52da987171
6
+ metadata.gz: 77474bb5bb8a963d0649888750eb7d563e8549ac0d81fffd08e938091d5d91d9d32e1a21744190b69787cca8af138696aaf4aee8547e409f6f28cd71444a6191
7
+ data.tar.gz: 38a535bc60563b48eff9df3bdf28516b99caea46505f7b2fe7b464ada7fdb5273a3921be571ad020214fb8c4bf79d77eed44c63e30cd0636f1b1b19284c10b56
@@ -6,7 +6,7 @@
6
6
  # CLASP.Ruby
7
7
  #
8
8
  # Created: 14th February 2014
9
- # Updated: 12th April 2019
9
+ # Updated: 13th April 2019
10
10
  #
11
11
  # Home: http://github.com/synesissoftware/CLASP.Ruby
12
12
  #
@@ -63,9 +63,9 @@ class Arguments
63
63
 
64
64
  #:stopdoc:
65
65
  private
66
- class FlagArgument #:nodoc: all
66
+ class FlagArgument # :nodoc: all
67
67
 
68
- #:nodoc:
68
+ # :nodoc:
69
69
  def initialize(arg, given_index, given_name, resolved_name, argument_alias, given_hyphens, given_label, extras)
70
70
 
71
71
  @arg = arg
@@ -86,13 +86,13 @@ class Arguments
86
86
  attr_reader :name
87
87
  attr_reader :extras
88
88
 
89
- #:nodoc:
89
+ # :nodoc:
90
90
  def to_s
91
91
 
92
92
  @name
93
93
  end
94
94
 
95
- #:nodoc:
95
+ # :nodoc:
96
96
  def eql?(rhs)
97
97
 
98
98
  return false if rhs.nil?
@@ -103,7 +103,7 @@ class Arguments
103
103
  false
104
104
  end
105
105
 
106
- #:nodoc:
106
+ # :nodoc:
107
107
  def ==(rhs)
108
108
 
109
109
  return false if rhs.nil?
@@ -114,16 +114,16 @@ class Arguments
114
114
  eql? rhs
115
115
  end
116
116
 
117
- #:nodoc:
117
+ # :nodoc:
118
118
  def hash
119
119
 
120
120
  @arg.hash
121
121
  end
122
122
  end
123
123
 
124
- class OptionArgument #:nodoc: all
124
+ class OptionArgument # :nodoc: all
125
125
 
126
- #:nodoc:
126
+ # :nodoc:
127
127
  def initialize(arg, given_index, given_name, resolved_name, argument_alias, given_hyphens, given_label, value, extras)
128
128
 
129
129
  @arg = arg
@@ -146,7 +146,7 @@ class Arguments
146
146
  attr_reader :value
147
147
  attr_reader :extras
148
148
 
149
- #:nodoc:
149
+ # :nodoc:
150
150
  def eql?(rhs)
151
151
 
152
152
  return false if rhs.nil?
@@ -157,7 +157,7 @@ class Arguments
157
157
  false
158
158
  end
159
159
 
160
- #:nodoc:
160
+ # :nodoc:
161
161
  def ==(rhs)
162
162
 
163
163
  return false if rhs.nil?
@@ -168,13 +168,13 @@ class Arguments
168
168
  eql? rhs
169
169
  end
170
170
 
171
- #:nodoc:
171
+ # :nodoc:
172
172
  def hash
173
173
 
174
174
  @arg.hash
175
175
  end
176
176
 
177
- #:nodoc:
177
+ # :nodoc:
178
178
  def to_s
179
179
 
180
180
  "#{name}=#{value}"
@@ -194,15 +194,31 @@ class Arguments
194
194
  #
195
195
  # === Signature
196
196
  #
197
- # * *Parameters*:
198
- # - +argv+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+.
199
- # - +source+:: (+Hash+, +IO+) The arguments specification, either as a Hash or an instance of an IO-implementing type containing a YAML specification.
200
- # - +options+:: An options hash, containing any of the following options.
197
+ # * *Parameters:*
198
+ # - +argv+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+
199
+ # - +source+:: (+Hash+, +IO+) The arguments specification, either as a Hash or an instance of an IO-implementing type containing a YAML specification
200
+ # - +options+:: An options hash, containing any of the following options
201
201
  #
202
- # * *Options*:
203
- # - +mutate_argv:+:: (+Boolean+) Determines if the library should mutate +argv+. Defaults to +true+. This is essential when using CLASP in conjunction with <tt>$\<</tt>.
202
+ # * *Options:*
203
+ # - +mutate_argv:+:: (+Boolean+) Determines if the library should mutate +argv+. Defaults to +true+. This is essential when using CLASP in conjunction with <tt>$\<</tt>
204
204
  #
205
- def self.load(argv, source, options = {})
205
+ def self.load(argv, source, options = {}) # :yields: An instance of +CLASP::Arguments+
206
+
207
+ options ||= {}
208
+
209
+ specs = load_specifications(source, options)
210
+
211
+ self.new argv, specs, options
212
+ end
213
+
214
+ # Loads the specifications as specified by +source+, according to the given parameters
215
+ #
216
+ # === Signature
217
+ #
218
+ # * *Parameters:*
219
+ # - +source+:: (+Hash+, +IO+) The arguments specification, either as a Hash or an instance of an IO-implementing type containing a YAML specification
220
+ # - +options+:: An options hash, containing any of the following options
221
+ def self.load_specifications(source, options = {}) # :yields: An array of specification instances
206
222
 
207
223
  options ||= {}
208
224
 
@@ -226,7 +242,7 @@ class Arguments
226
242
  end
227
243
  end
228
244
 
229
- specifications = []
245
+ specs = []
230
246
 
231
247
  _clasp = h['clasp'] or raise ArgumentError, "missing top-level 'clasp' element in load configuration"
232
248
  ::Hash === _clasp or raise ArgumentError, "top-level 'clasp' element must be a #{::Hash}"
@@ -257,7 +273,7 @@ class Arguments
257
273
  _aliases = _details['aliases']
258
274
  _help = _details['help'] || _details['description']
259
275
 
260
- specifications << CLASP.Flag(_name, alias: _alias, aliases: _aliases, help: _help)
276
+ specs << CLASP.Flag(_name, alias: _alias, aliases: _aliases, help: _help)
261
277
  end
262
278
  when 'option', :option
263
279
 
@@ -276,7 +292,7 @@ class Arguments
276
292
  _required_message = _details['required_message']
277
293
  _values_range = _details['values_range'] || _details['values']
278
294
 
279
- specifications << CLASP.Option(_name, alias: _alias, aliases: _aliases, default_value: _default_value, help: _help, required: _required, required_message: _required_message, values_range: _values_range)
295
+ specs << CLASP.Option(_name, alias: _alias, aliases: _aliases, default_value: _default_value, help: _help, required: _required, required_message: _required_message, values_range: _values_range)
280
296
  end
281
297
  when 'alias', :alias
282
298
 
@@ -295,7 +311,7 @@ class Arguments
295
311
  warn "alias specification missing required 'alias' or 'aliases' field"
296
312
  else
297
313
 
298
- specifications << CLASP.Flag(_resolved, alias: _alias, aliases: _aliases)
314
+ specs << CLASP.Flag(_resolved, alias: _alias, aliases: _aliases)
299
315
  end
300
316
  end
301
317
  else
@@ -309,7 +325,7 @@ class Arguments
309
325
  end
310
326
  end
311
327
 
312
- self.new argv, specifications, options
328
+ specs
313
329
  end
314
330
 
315
331
  # Constructs an instance of the class, according to the given parameters
@@ -318,13 +334,13 @@ class Arguments
318
334
  #
319
335
  # === Signature
320
336
  #
321
- # * *Parameters*:
322
- # - +argv+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+.
323
- # - +specifications+:: (+Array+) The specifications array. Defaults to +nil+. If none supplied, no aliasing will be performed.
324
- # - +options+:: An options hash, containing any of the following options.
337
+ # * *Parameters:*
338
+ # - +argv+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+
339
+ # - +specifications+:: (+Array+) The specifications array. Defaults to +nil+. If none supplied, no aliasing will be performed
340
+ # - +options+:: An options hash, containing any of the following options
325
341
  #
326
- # * *Options*:
327
- # - +mutate_argv:+:: (+Boolean+) Determines if the library should mutate +argv+. Defaults to +true+. This is essential when using CLASP in conjunction with <tt>$\<</tt>.
342
+ # * *Options:*
343
+ # - +mutate_argv:+:: (+Boolean+) Determines if the library should mutate +argv+. Defaults to +true+. This is essential when using CLASP in conjunction with <tt>$\<</tt>
328
344
  #
329
345
  def initialize(argv = ARGV, specifications = nil, options = {})
330
346
 
@@ -598,7 +614,7 @@ class Arguments
598
614
  #
599
615
  # === Signature
600
616
  #
601
- # * *Parameters*:
617
+ # * *Parameters:*
602
618
  # - +id+:: (String, CLASP::Flag) The name of a flag, or the flag itself
603
619
  def find_flag(id)
604
620
 
@@ -615,7 +631,7 @@ class Arguments
615
631
  #
616
632
  # === Signature
617
633
  #
618
- # * *Parameters*:
634
+ # * *Parameter:*
619
635
  # - +id+:: (String, CLASP::Flag) The name of a option, or the option itself
620
636
  def find_option(id)
621
637
 
@@ -5,7 +5,7 @@
5
5
  # Purpose: Command-line interface
6
6
  #
7
7
  # Created: 27th July 2015
8
- # Updated: 11th April 2019
8
+ # Updated: 12th April 2019
9
9
  #
10
10
  # Home: http://github.com/synesissoftware/CLASP.Ruby
11
11
  #
@@ -113,11 +113,11 @@ end # module CLI_helpers_
113
113
  #
114
114
  # === Signature
115
115
  #
116
- # * *Parameters*:
116
+ # * *Parameters:*
117
117
  # - +specifications+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+.
118
118
  # - +options+:: An options hash, containing any of the following options.
119
119
  #
120
- # * *Options*:
120
+ # * *Options:*
121
121
  # - +:exit+:: a program exit code; <tt>exit()</tt> not called if not specified (or +nil+).
122
122
  # - +:program_name+:: program name; inferred from <tt>$0</tt> if not specified.
123
123
  # - +:stream+:: output stream; <tt>$stdout</tt> if not specified.
@@ -254,11 +254,11 @@ end
254
254
  #
255
255
  # === Signature
256
256
  #
257
- # * *Parameters*:
257
+ # * *Parameters:*
258
258
  # - +specifications+:: (+Array+) The arguments array. May not be +nil+. Defaults to +ARGV+.
259
259
  # - +options+:: An options hash, containing any of the following options.
260
260
  #
261
- # * *Options*:
261
+ # * *Options:*
262
262
  # - +:exit+:: a program exit code; <tt>exit()</tt> not called if not specified (or +nil+).
263
263
  # - +:program_name+:: program name; inferred from <tt>$0</tt> if not specified.
264
264
  # - +:stream+:: output stream; <tt>$stdout</tt> if not specified.
@@ -5,7 +5,7 @@
5
5
  # Purpose: Argument specification classes
6
6
  #
7
7
  # Created: 25th October 2014
8
- # Updated: 10th April 2019
8
+ # Updated: 13th April 2019
9
9
  #
10
10
  # Home: http://github.com/synesissoftware/CLASP.Ruby
11
11
  #
@@ -65,10 +65,10 @@ class FlagSpecification
65
65
  # === Signature
66
66
  #
67
67
  # * *Parameters*
68
- # - +name+:: (+String+) The name, or long-form, of the flag.
69
- # - +aliases+:: (+Array+) 0 or more strings specifying short-form or option-value aliases.
70
- # - +help+:: (+String+) The help string, which may be +nil+.
71
- # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+.
68
+ # - +name+:: (+String+) The name, or long-form, of the flag
69
+ # - +aliases+:: (+Array+) 0 or more strings specifying short-form or option-value aliases
70
+ # - +help+:: (+String+) The help string, which may be +nil+
71
+ # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+
72
72
  def initialize(name, aliases, help, extras = nil)
73
73
 
74
74
  @name = name
@@ -92,6 +92,41 @@ class FlagSpecification
92
92
  "{#{name}; aliases=#{aliases.join(', ')}; help='#{help}'; extras=#{extras}}"
93
93
  end
94
94
 
95
+ def eql? rhs # :nodoc:
96
+
97
+ case rhs
98
+ when self.class
99
+
100
+ ;
101
+ else
102
+
103
+ return false
104
+ end
105
+
106
+ return false unless name == rhs.name
107
+ return false unless aliases == rhs.aliases
108
+ return false unless help == rhs.help
109
+ return false unless extras == rhs.extras
110
+
111
+ return true
112
+ end
113
+
114
+ # Compares instance against another FlagSpecification or against a name (String)
115
+ def == rhs
116
+
117
+ case rhs
118
+ when self.class
119
+
120
+ return self.eql? rhs
121
+ when String
122
+
123
+ return name == rhs
124
+ else
125
+
126
+ false
127
+ end
128
+ end
129
+
95
130
  private
96
131
  @@Help_ = self.new('--help', [], 'shows this help and terminates')
97
132
  @@Version_ = self.new('--version', [], 'shows version and terminates')
@@ -126,11 +161,11 @@ class OptionSpecification
126
161
  # === Signature
127
162
  #
128
163
  # * *Parameters*
129
- # - +name+:: (+String+) The name, or long-form, of the option.
130
- # - +aliases+:: (+Array+) 0 or more strings specifying short-form or option-value aliases.
131
- # - +help+:: (+String+) The help string, which may be +nil+.
132
- # - +values_range+:: (+Array+) 0 or more strings specifying values supported by the option.
133
- # - +default_value+:: (+String+) The default value of the option. May be +nil+.
164
+ # - +name+:: (+String+) The name, or long-form, of the option
165
+ # - +aliases+:: (+Array+) 0 or more strings specifying short-form or option-value aliases
166
+ # - +help+:: (+String+) The help string, which may be +nil+
167
+ # - +values_range+:: (+Array+) 0 or more strings specifying values supported by the option
168
+ # - +default_value+:: (+String+) The default value of the option. May be +nil+
134
169
  # - +required+:: [boolean] Whether the option is required. May be
135
170
  # +nil+
136
171
  # - +required_message+:: [::String] Message to be used when reporting
@@ -139,7 +174,7 @@ class OptionSpecification
139
174
  # usage". If begins with the nul character ("\0"), then is used in
140
175
  # the place of the <option-name> and placed into the rest of the
141
176
  # standard form message
142
- # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+.
177
+ # - +extras+:: An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+
143
178
  def initialize(name, aliases, help, values_range, default_value, required, required_message, extras = nil)
144
179
 
145
180
  @name = name
@@ -195,6 +230,45 @@ class OptionSpecification
195
230
 
196
231
  "{#{name}; aliases=#{aliases.join(', ')}; values_range=[ #{values_range.join(', ')} ]; default_value='#{default_value}'; help='#{help}'; required?=#{required?}; extras=#{extras}}"
197
232
  end
233
+
234
+ def eql? rhs # :nodoc:
235
+
236
+ case rhs
237
+ when self.class
238
+
239
+ ;
240
+ else
241
+
242
+ return false
243
+ end
244
+
245
+ return false unless name == rhs.name
246
+ return false unless aliases == rhs.aliases
247
+ return false unless help == rhs.help
248
+ return false unless values_range == rhs.values_range
249
+ return false unless default_value == rhs.default_value
250
+ return false unless required == rhs.required
251
+ return false unless required_message == rhs.required_message
252
+ return false unless extras == rhs.extras
253
+
254
+ return true
255
+ end
256
+
257
+ # Compares instance against another OptionSpecification or against a name (String)
258
+ def == rhs
259
+
260
+ case rhs
261
+ when self.class
262
+
263
+ return self.eql? rhs
264
+ when String
265
+
266
+ return name == rhs
267
+ else
268
+
269
+ false
270
+ end
271
+ end
198
272
  end
199
273
 
200
274
  # A class that represents an explicit alias for a flag or an option
@@ -5,7 +5,7 @@
5
5
  # Purpose: Version for CLASP.Ruby library
6
6
  #
7
7
  # Created: 16th November 2014
8
- # Updated: 12th April 2019
8
+ # Updated: 13th April 2019
9
9
  #
10
10
  # Home: http://github.com/synesissoftware/CLASP.Ruby
11
11
  #
@@ -51,7 +51,7 @@
51
51
  module CLASP
52
52
 
53
53
  # Current version of the CLASP.Ruby library
54
- VERSION = '0.18.2'
54
+ VERSION = '0.19.0'
55
55
 
56
56
  private
57
57
  VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
@@ -0,0 +1,74 @@
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_OptionValueAliases_1 < Test::Unit::TestCase
10
+
11
+ def test_option_with_two_flag_specifications
12
+
13
+ specifications = [
14
+
15
+ CLASP.Flag('--action=list', alias: '-l'),
16
+ CLASP.Flag('--action=change', alias: '-c'),
17
+ CLASP.Option('--action', alias: '-a'),
18
+ ]
19
+
20
+ # With no arguments
21
+ begin
22
+
23
+ argv = []
24
+ args = CLASP::Arguments.new argv, specifications
25
+
26
+ assert_equal 0, args.flags.size
27
+ assert_equal 0, args.options.size
28
+ assert_equal 0, args.values.size
29
+ end
30
+
31
+ # With option
32
+ begin
33
+
34
+ argv = %w{ --action=action1 }
35
+ args = CLASP::Arguments.new argv, specifications
36
+
37
+ assert_equal 0, args.flags.size
38
+ assert_equal 1, args.options.size
39
+ assert_equal 0, args.values.size
40
+
41
+ assert_equal '--action', args.options[0].name
42
+ assert_equal 'action1', args.options[0].value
43
+ end
44
+
45
+ # With option alias
46
+ begin
47
+
48
+ argv = %w{ -a action2 }
49
+ args = CLASP::Arguments.new argv, specifications
50
+
51
+ assert_equal 0, args.flags.size
52
+ assert_equal 1, args.options.size
53
+ assert_equal 0, args.values.size
54
+
55
+ assert_equal '--action', args.options[0].name
56
+ assert_equal 'action2', args.options[0].value
57
+ end
58
+
59
+ # With flag alias
60
+ begin
61
+
62
+ argv = %w{ -c }
63
+ args = CLASP::Arguments.new argv, specifications
64
+
65
+ assert_equal 0, args.flags.size
66
+ assert_equal 1, args.options.size
67
+ assert_equal 0, args.values.size
68
+
69
+ assert_equal '--action', args.options[0].name
70
+ assert_equal 'change', args.options[0].value
71
+ end
72
+ end
73
+ end
74
+
@@ -1,4 +1,4 @@
1
- #! /usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
4
4
 
@@ -8,68 +8,15 @@ require 'test/unit'
8
8
 
9
9
  class Test_Specifications_1 < Test::Unit::TestCase
10
10
 
11
- def test_option_with_two_flag_specifications
11
+ def test_simple_Flag
12
12
 
13
- specifications = [
14
-
15
- CLASP.Flag('--action=list', alias: '-l'),
16
- CLASP.Flag('--action=change', alias: '-c'),
17
- CLASP.Option('--action', alias: '-a'),
18
- ]
19
-
20
- # With no arguments
21
- begin
22
-
23
- argv = []
24
- args = CLASP::Arguments.new argv, specifications
25
-
26
- assert_equal 0, args.flags.size
27
- assert_equal 0, args.options.size
28
- assert_equal 0, args.values.size
29
- end
30
-
31
- # With option
32
- begin
33
-
34
- argv = %w{ --action=action1 }
35
- args = CLASP::Arguments.new argv, specifications
36
-
37
- assert_equal 0, args.flags.size
38
- assert_equal 1, args.options.size
39
- assert_equal 0, args.values.size
40
-
41
- assert_equal '--action', args.options[0].name
42
- assert_equal 'action1', args.options[0].value
43
- end
44
-
45
- # With option alias
46
- begin
47
-
48
- argv = %w{ -a action2 }
49
- args = CLASP::Arguments.new argv, specifications
50
-
51
- assert_equal 0, args.flags.size
52
- assert_equal 1, args.options.size
53
- assert_equal 0, args.values.size
54
-
55
- assert_equal '--action', args.options[0].name
56
- assert_equal 'action2', args.options[0].value
57
- end
58
-
59
- # With flag alias
60
- begin
61
-
62
- argv = %w{ -c }
63
- args = CLASP::Arguments.new argv, specifications
64
-
65
- assert_equal 0, args.flags.size
66
- assert_equal 1, args.options.size
67
- assert_equal 0, args.values.size
68
-
69
- assert_equal '--action', args.options[0].name
70
- assert_equal 'change', args.options[0].value
71
- end
13
+ flag_debug = CLASP.Flag('--name')
14
+ flag_logged = CLASP.Flag('--logged')
72
15
 
16
+ assert_equal flag_debug, flag_debug
17
+ assert_equal flag_debug, '--name'
18
+ assert_not_equal flag_logged, flag_debug
73
19
  end
74
20
  end
75
21
 
22
+
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.18.2
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Wilson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-12 00:00:00.000000000 Z
11
+ date: 2019-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xqsr3
@@ -64,6 +64,7 @@ files:
64
64
  - test/unit/tc_examples_Arguments.rb
65
65
  - test/unit/tc_extras.rb
66
66
  - test/unit/tc_option_required.rb
67
+ - test/unit/tc_option_value_aliases.rb
67
68
  - test/unit/tc_specifications.rb
68
69
  - test/unit/tc_usage.rb
69
70
  - test/unit/ts_all.rb