clasp-ruby 0.21.0 → 0.22.0.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 +5 -5
- data/lib/clasp/specifications.rb +91 -13
- data/lib/clasp/version.rb +3 -2
- data/test/unit/tc_with_action.rb +50 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bdf2add70e2d8e134e6759718fabde89ecb5c158
|
4
|
+
data.tar.gz: dcf9e41a17a28f53406daef64bdba1f614f2a080
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d329ce03d0057446f877425faec12da111253f0bb51dbcd0d1e619d0f3e7f5dcc781b20b18ffbb65eb796011b3021d208e1d391881754ec3ecd61e6efad49186
|
7
|
+
data.tar.gz: 63873b0a897f4d854d6f4c80e5605cd68ebecdb4591361662cfa075292ac9c4a69ae8aa8f09ab97446db675fe5611cca41bc7ea83f01853bafb55722b5093fee
|
data/lib/clasp/specifications.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Purpose: Argument specification classes
|
6
6
|
#
|
7
7
|
# Created: 25th October 2014
|
8
|
-
# Updated:
|
8
|
+
# Updated: 29th April 2019
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
@@ -57,8 +57,40 @@ module CLASP
|
|
57
57
|
# ######################################################################## #
|
58
58
|
# classes
|
59
59
|
|
60
|
+
# @!visibility private
|
61
|
+
class SpecificationBase # :nodoc: all
|
62
|
+
|
63
|
+
private
|
64
|
+
# @!visibility private
|
65
|
+
def check_arity_(blk, range, label) # :nodoc:
|
66
|
+
|
67
|
+
raise ArgumentError, "block must be a #{Proc}; #{blk.class} given" unless blk.nil? || Proc === blk
|
68
|
+
|
69
|
+
if blk
|
70
|
+
|
71
|
+
case blk.arity
|
72
|
+
when range
|
73
|
+
|
74
|
+
;
|
75
|
+
else
|
76
|
+
|
77
|
+
msg = "wrong arity for #{label}"
|
78
|
+
|
79
|
+
if $DEBUG
|
80
|
+
|
81
|
+
raise ArgumentError, msg
|
82
|
+
else
|
83
|
+
|
84
|
+
warn msg
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
public
|
90
|
+
end
|
91
|
+
|
60
92
|
# A class that represents the specification for a command-line flag
|
61
|
-
class FlagSpecification
|
93
|
+
class FlagSpecification < SpecificationBase
|
62
94
|
|
63
95
|
# Creates a FlagSpecification instance from the given name, aliases, and help
|
64
96
|
#
|
@@ -70,13 +102,18 @@ class FlagSpecification
|
|
70
102
|
# - +help+ (+String+) The help string, which may be +nil+
|
71
103
|
# - +extras+ An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+
|
72
104
|
#
|
105
|
+
# * *Block* An optional block that is called when a matching flag argument is found
|
106
|
+
#
|
73
107
|
# *NOTE:* Users should prefer the +CLASP::Flag()+ method
|
74
|
-
def initialize(name, aliases, help, extras = nil)
|
108
|
+
def initialize(name, aliases, help, extras = nil, &blk)
|
109
|
+
|
110
|
+
check_arity_(blk, 0..3, "flag")
|
75
111
|
|
76
112
|
@name = name
|
77
113
|
@aliases = (aliases || []).select { |a| a and not a.empty? }
|
78
114
|
@help = help
|
79
115
|
@extras = extras || {}
|
116
|
+
@action = blk
|
80
117
|
end
|
81
118
|
|
82
119
|
# The flag's name string
|
@@ -88,6 +125,17 @@ class FlagSpecification
|
|
88
125
|
# The flag's extras
|
89
126
|
attr_reader :extras
|
90
127
|
|
128
|
+
# (Proc) The procedure
|
129
|
+
attr_reader :action
|
130
|
+
|
131
|
+
# @!visibility private
|
132
|
+
def action=(blk) # :nodoc: all
|
133
|
+
|
134
|
+
check_arity_(blk, 0..3, "flag")
|
135
|
+
|
136
|
+
@action = blk
|
137
|
+
end
|
138
|
+
|
91
139
|
# String form of the flag
|
92
140
|
def to_s
|
93
141
|
|
@@ -135,28 +183,38 @@ class FlagSpecification
|
|
135
183
|
@@Version_ = self.new('--version', [], 'shows version and terminates')
|
136
184
|
public
|
137
185
|
# An instance of FlagSpecification that provides default '--help' information
|
138
|
-
|
186
|
+
#
|
187
|
+
# If you wish to specify +extras+ or attach a block, you may do so
|
188
|
+
def self.Help(extras = nil, &blk)
|
139
189
|
|
140
190
|
h = @@Help_
|
141
191
|
|
142
|
-
|
192
|
+
if extras || blk
|
193
|
+
|
194
|
+
return self.new(h.name, h.aliases, h.help, extras, &blk)
|
195
|
+
end
|
143
196
|
|
144
197
|
h
|
145
198
|
end
|
146
199
|
|
147
200
|
# An instance of FlagSpecification that provides default '--version' information
|
148
|
-
|
201
|
+
#
|
202
|
+
# If you wish to specify +extras+ or attach a block, you may do so
|
203
|
+
def self.Version(extras = nil, &blk)
|
149
204
|
|
150
205
|
h = @@Version_
|
151
206
|
|
152
|
-
|
207
|
+
if extras || blk
|
208
|
+
|
209
|
+
return self.new(h.name, h.aliases, h.help, extras, &blk)
|
210
|
+
end
|
153
211
|
|
154
212
|
h
|
155
213
|
end
|
156
214
|
end
|
157
215
|
|
158
216
|
# A class that represents the specification for a command-line option
|
159
|
-
class OptionSpecification
|
217
|
+
class OptionSpecification < SpecificationBase
|
160
218
|
|
161
219
|
# Creates an OptionSpecification instance from the given name, aliases, help,
|
162
220
|
# values_range, and default_value
|
@@ -174,8 +232,12 @@ class OptionSpecification
|
|
174
232
|
# - +constraint+ (Hash) Constraint to be applied to the parsed values of options matching this specification. NOTE: only integer constraints are supported in the current version
|
175
233
|
# - +extras+ An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+
|
176
234
|
#
|
235
|
+
# * *Block* An optional block that is called when a matching option argument is found
|
236
|
+
#
|
177
237
|
# *NOTE:* Users should prefer the +CLASP::Option()+ method
|
178
|
-
def initialize(name, aliases, help, values_range, default_value, required, required_message, constraint, extras = nil)
|
238
|
+
def initialize(name, aliases, help, values_range, default_value, required, required_message, constraint, extras = nil, &blk)
|
239
|
+
|
240
|
+
check_arity_(blk, 0..3, "option")
|
179
241
|
|
180
242
|
@name = name
|
181
243
|
@aliases = (aliases || []).select { |a| a and not a.empty? }
|
@@ -186,6 +248,7 @@ class OptionSpecification
|
|
186
248
|
@required_message = nil
|
187
249
|
@constraint = constraint || {}
|
188
250
|
@extras = extras || {}
|
251
|
+
@action = blk
|
189
252
|
|
190
253
|
rm_name = nil
|
191
254
|
|
@@ -227,6 +290,17 @@ class OptionSpecification
|
|
227
290
|
# The option's extras
|
228
291
|
attr_reader :extras
|
229
292
|
|
293
|
+
# (Proc) The procedure
|
294
|
+
attr_reader :action
|
295
|
+
|
296
|
+
# @!visibility private
|
297
|
+
def action=(blk) # :nodoc: all
|
298
|
+
|
299
|
+
check_arity_(blk, 0..3, "flag")
|
300
|
+
|
301
|
+
@action = blk
|
302
|
+
end
|
303
|
+
|
230
304
|
# String form of the option
|
231
305
|
def to_s
|
232
306
|
|
@@ -318,7 +392,9 @@ end
|
|
318
392
|
# - +:aliases+ (::Array) An array of aliases, e.g. [ '-v', '-verb' ]. Ignored if +:alias+ is specified
|
319
393
|
# - +:extras+ An application-defined object, usually a hash of custom attributes
|
320
394
|
# - +:help+ (::String) A help string
|
321
|
-
|
395
|
+
#
|
396
|
+
# * *Block* An optional block that is called when a matching flag argument is found
|
397
|
+
def CLASP.Flag(name, options = {}, &blk)
|
322
398
|
|
323
399
|
aliases = nil
|
324
400
|
help = nil
|
@@ -351,7 +427,7 @@ def CLASP.Flag(name, options = {})
|
|
351
427
|
end
|
352
428
|
end
|
353
429
|
|
354
|
-
CLASP::FlagSpecification.new(name, aliases, help, extras)
|
430
|
+
CLASP::FlagSpecification.new(name, aliases, help, extras, &blk)
|
355
431
|
end
|
356
432
|
|
357
433
|
# Generator method that obtains a CLASP::OptionSpecification according to the given
|
@@ -376,7 +452,9 @@ end
|
|
376
452
|
# - +constraint+ (Hash) Constraint to be applied to the parsed values of options matching this specification. NOTE: only integer constraints are supported in the current version
|
377
453
|
# - +:values_range+ (::Array) An array defining the accepted values for the option
|
378
454
|
# - +:values+ [DEPRECATED] Alternative to +:values_range+
|
379
|
-
|
455
|
+
#
|
456
|
+
# * *Block* An optional block that is called when a matching option argument is found
|
457
|
+
def CLASP.Option(name, options = {}, &blk)
|
380
458
|
|
381
459
|
aliases = nil
|
382
460
|
help = nil
|
@@ -429,7 +507,7 @@ def CLASP.Option(name, options = {})
|
|
429
507
|
end
|
430
508
|
end
|
431
509
|
|
432
|
-
CLASP::OptionSpecification.new(name, aliases, help, values_range, default_value, required, require_message, constraint, extras)
|
510
|
+
CLASP::OptionSpecification.new(name, aliases, help, values_range, default_value, required, require_message, constraint, extras, &blk)
|
433
511
|
end
|
434
512
|
|
435
513
|
def CLASP.Alias(name, *args)
|
data/lib/clasp/version.rb
CHANGED
@@ -5,12 +5,13 @@
|
|
5
5
|
# Purpose: Version for CLASP.Ruby library
|
6
6
|
#
|
7
7
|
# Created: 16th November 2014
|
8
|
-
# Updated:
|
8
|
+
# Updated: 22nd August 2020
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
12
|
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
+
# Copyright (c) 2019-2020, Matthew Wilson and Synesis Information Systems
|
14
15
|
# Copyright (c) 2014-2019, Matthew Wilson and Synesis Software
|
15
16
|
# All rights reserved.
|
16
17
|
#
|
@@ -51,7 +52,7 @@
|
|
51
52
|
module CLASP
|
52
53
|
|
53
54
|
# Current version of the CLASP.Ruby library
|
54
|
-
VERSION = '0.
|
55
|
+
VERSION = '0.22.0.1'
|
55
56
|
|
56
57
|
private
|
57
58
|
# @!visibility private
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'xqsr3/extensions/test/unit'
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
|
11
|
+
class Test_WithAction < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def test_flag_with_action
|
14
|
+
|
15
|
+
debug = false
|
16
|
+
|
17
|
+
specifications = [
|
18
|
+
|
19
|
+
CLASP.Flag('--debug', alias: '-d') { debug = true }
|
20
|
+
]
|
21
|
+
argv = []
|
22
|
+
args = CLASP.parse argv, specifications
|
23
|
+
|
24
|
+
assert_equal 0, args.flags.size
|
25
|
+
assert_equal 0, args.options.size
|
26
|
+
assert_equal 0, args.values.size
|
27
|
+
|
28
|
+
assert_false debug
|
29
|
+
|
30
|
+
argv2 = [ '--debug' ]
|
31
|
+
args2 = CLASP.parse argv2, specifications
|
32
|
+
|
33
|
+
assert_equal 1, args2.flags.size
|
34
|
+
assert_equal 0, args2.options.size
|
35
|
+
assert_equal 0, args2.values.size
|
36
|
+
|
37
|
+
assert_false debug
|
38
|
+
|
39
|
+
if ix = args2.flags.index('--debug')
|
40
|
+
|
41
|
+
flag = args2.flags[ix]
|
42
|
+
|
43
|
+
flag.argument_specification.action.call(flag, flag.argument_specification)
|
44
|
+
end
|
45
|
+
|
46
|
+
assert_true debug
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
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.
|
4
|
+
version: 0.22.0.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:
|
11
|
+
date: 2020-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xqsr3
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- test/unit/tc_specifications.rb
|
72
72
|
- test/unit/tc_typed_options.rb
|
73
73
|
- test/unit/tc_usage.rb
|
74
|
+
- test/unit/tc_with_action.rb
|
74
75
|
- test/unit/ts_all.rb
|
75
76
|
homepage: http://github.com/synesissoftware/CLASP.Ruby
|
76
77
|
licenses:
|
@@ -92,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
93
|
version: '0'
|
93
94
|
requirements: []
|
94
95
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.
|
96
|
+
rubygems_version: 2.4.5.5
|
96
97
|
signing_key:
|
97
98
|
specification_version: 4
|
98
99
|
summary: CLASP.Ruby
|