libclimate-ruby 0.12.2 → 0.13.0
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 +4 -4
- data/examples/flag_and_option_specifications.from_DATA.rb +82 -0
- data/lib/libclimate/climate.rb +265 -11
- data/lib/libclimate/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c5040323c276e22e2dcf86fbebf1e66bf159904d9a28e764ff913aed1d9a508
|
4
|
+
data.tar.gz: 9551c44bc9ca7bb1f69783d8c6b1e5ae0288548140dcd86023cd80df6fa98c14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 158c64020110e066c1f57be6c4820e9519bed9fccee5883b903dd8d8f4c49d91f971bcfef8e2ff3fd416e6074be0149562098305b56a7cd705aa2619199c7620
|
7
|
+
data.tar.gz: 7672ba94c8724a7504f12d589ff20e703b31eb5ae5e27e6f1878ba8136a8ab2f0749e307b5d00ef11cfca277641c3c3479808c0a2d2406be1247abe887ae3f93
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# examples/flag_and_option_specifications.from_DATA.rb
|
4
|
+
|
5
|
+
|
6
|
+
# requires
|
7
|
+
|
8
|
+
require 'libclimate'
|
9
|
+
|
10
|
+
|
11
|
+
# constants
|
12
|
+
|
13
|
+
PROGRAM_VERSION = '0.0.1'
|
14
|
+
|
15
|
+
|
16
|
+
# Specify aliases, parse, and checking standard flags
|
17
|
+
|
18
|
+
options = {}
|
19
|
+
climate = LibCLImate::Climate.load DATA do |cl|
|
20
|
+
|
21
|
+
cl.on_flag('--debug') { options[:debug] = true }
|
22
|
+
|
23
|
+
cl.on_option('--verbosity') { |o, a| options[:verbosity] = o.value }
|
24
|
+
end
|
25
|
+
|
26
|
+
r = climate.run ARGV
|
27
|
+
|
28
|
+
|
29
|
+
# Program-specific processing of flags/options
|
30
|
+
|
31
|
+
if options[:verbosity]
|
32
|
+
|
33
|
+
$stdout.puts "verbosity is specified as: #{options[:verbosity]}"
|
34
|
+
end
|
35
|
+
|
36
|
+
if options[:debug]
|
37
|
+
|
38
|
+
$stdout.puts 'Debug mode is specified'
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
__END__
|
43
|
+
---
|
44
|
+
libclimate:
|
45
|
+
clasp:
|
46
|
+
specifications:
|
47
|
+
- flag:
|
48
|
+
name: --debug
|
49
|
+
alias: -d
|
50
|
+
help: runs in Debug mode
|
51
|
+
required: false
|
52
|
+
- option:
|
53
|
+
name: --verbosity
|
54
|
+
help: specifies the verbosity
|
55
|
+
values:
|
56
|
+
- silent
|
57
|
+
- quiet
|
58
|
+
- terse
|
59
|
+
- chatty
|
60
|
+
- verbose
|
61
|
+
- alias:
|
62
|
+
resolved: --verbosity=chatty
|
63
|
+
aliases:
|
64
|
+
- --chatty
|
65
|
+
- -c
|
66
|
+
constrain_values: !ruby/range 1..2
|
67
|
+
exit_on_missing: true
|
68
|
+
flags_and_options: "[... flags/options ...]"
|
69
|
+
usage_values: "<directory-1> [ <directory-2> ]"
|
70
|
+
value_names:
|
71
|
+
- directory-1
|
72
|
+
- directory-2
|
73
|
+
info_lines:
|
74
|
+
- libCLImate.Ruby examples
|
75
|
+
- :version
|
76
|
+
- Illustrates use of libCLImate.Ruby's specification of flags, options, and aliases, from DATA
|
77
|
+
-
|
78
|
+
version:
|
79
|
+
- 0
|
80
|
+
- 3
|
81
|
+
- "4"
|
82
|
+
|
data/lib/libclimate/climate.rb
CHANGED
@@ -44,6 +44,8 @@ require 'clasp'
|
|
44
44
|
require 'xqsr3/extensions/io'
|
45
45
|
require 'xqsr3/quality/parameter_checking'
|
46
46
|
|
47
|
+
require 'yaml'
|
48
|
+
|
47
49
|
=begin
|
48
50
|
=end
|
49
51
|
|
@@ -166,6 +168,11 @@ class Climate
|
|
166
168
|
#:stopdoc:
|
167
169
|
|
168
170
|
private
|
171
|
+
module Climate_Constants_
|
172
|
+
|
173
|
+
GIVEN_SPECS_ = "_Given_Specs_01B59422_8407_4c89_9432_8160C52BD5AD"
|
174
|
+
end # module Climate_Constants_
|
175
|
+
|
169
176
|
def show_usage_
|
170
177
|
|
171
178
|
options = {}
|
@@ -262,10 +269,166 @@ class Climate
|
|
262
269
|
|
263
270
|
nil
|
264
271
|
end
|
272
|
+
|
273
|
+
def self.check_type_(v, types)
|
274
|
+
|
275
|
+
return true if v.nil?
|
276
|
+
|
277
|
+
types = [ types ] unless Array === types
|
278
|
+
|
279
|
+
return true if types.empty?
|
280
|
+
|
281
|
+
types.each do |type|
|
282
|
+
|
283
|
+
if false
|
284
|
+
|
285
|
+
;
|
286
|
+
elsif :boolean == type
|
287
|
+
|
288
|
+
return true if [ TrueClass, FalseClass ].include? v.class
|
289
|
+
elsif type.is_a?(Class)
|
290
|
+
|
291
|
+
return true if v.is_a?(type)
|
292
|
+
elsif type.is_a?(Array)
|
293
|
+
|
294
|
+
t0 = type[0]
|
295
|
+
|
296
|
+
if t0
|
297
|
+
|
298
|
+
#return true if v.is_a?
|
299
|
+
else
|
300
|
+
|
301
|
+
# Can be array of anything
|
302
|
+
|
303
|
+
return true if v.is_a?(Array)
|
304
|
+
end
|
305
|
+
else
|
306
|
+
|
307
|
+
warn "Cannot validate type of '#{v}' (#{v.class}) against type specification '#{type}'"
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
false
|
312
|
+
end
|
313
|
+
|
314
|
+
def self.lookup_element_(h, types, name, path)
|
315
|
+
|
316
|
+
if h.has_key?(name)
|
317
|
+
|
318
|
+
r = h[name]
|
319
|
+
|
320
|
+
unless self.check_type_(r, types)
|
321
|
+
|
322
|
+
raise TypeError, "element '#{name}' is of type '#{r.class}' and '#{types}' is required"
|
323
|
+
end
|
324
|
+
|
325
|
+
return r
|
326
|
+
end
|
327
|
+
|
328
|
+
nil
|
329
|
+
end
|
330
|
+
|
331
|
+
def self.require_element_(h, types, name, path)
|
332
|
+
|
333
|
+
unless h.has_key?(name)
|
334
|
+
|
335
|
+
if (path || '').empty?
|
336
|
+
|
337
|
+
raise ArgumentError, "missing top-level element '#{name}' in load configuration"
|
338
|
+
else
|
339
|
+
|
340
|
+
raise ArgumentError, "missing element '#{path}/#{name}' in load configuration"
|
341
|
+
end
|
342
|
+
else
|
343
|
+
|
344
|
+
r = h[name]
|
345
|
+
|
346
|
+
unless self.check_type_(r, types)
|
347
|
+
|
348
|
+
raise TypeError, "element '#{name}' is of type '#{r.class}' and '#{types}' is required"
|
349
|
+
end
|
350
|
+
|
351
|
+
return r
|
352
|
+
end
|
353
|
+
end
|
265
354
|
#:startdoc:
|
266
355
|
|
267
356
|
public
|
268
357
|
|
358
|
+
# Loads an instance of the class, as specified by +source+, according to the given parameters
|
359
|
+
#
|
360
|
+
# === Signature
|
361
|
+
#
|
362
|
+
# * *Parameters:*
|
363
|
+
# - +source+:: (+Hash+, +IO+) The arguments specification, either as a Hash or an instance of an IO-implementing type containing a YAML specification
|
364
|
+
# - +options+:: An options hash, containing any of the following options
|
365
|
+
#
|
366
|
+
# * *Options:*
|
367
|
+
# - +:no_help_flag+ (boolean) Prevents the use of the +CLASP::Flag.Help+ flag-specification
|
368
|
+
# - +:no_version_flag+ (boolean) Prevents the use of the +CLASP::Flag.Version+ flag-specification
|
369
|
+
# - +:program_name+ (::String) An explicit program-name, which is inferred from +$0+ if this is +nil+
|
370
|
+
# - +:version+ (String, [Integer], [String]) A version specification. If not specified, this is inferred
|
371
|
+
# - +:version_context+ Object or class that defines a context for searching the version. Ignored if +:version+ is specified
|
372
|
+
#
|
373
|
+
# * *Block* An optional block that receives the initialising Climate instance, allowing the user to modify the attributes.
|
374
|
+
def self.load source, options = (options_defaulted_ = {}), &blk
|
375
|
+
|
376
|
+
check_parameter options, 'options', allow_nil: true, type: ::Hash
|
377
|
+
|
378
|
+
options ||= {}
|
379
|
+
|
380
|
+
h = nil
|
381
|
+
|
382
|
+
case source
|
383
|
+
when ::IO
|
384
|
+
|
385
|
+
h = YAML.load source.read
|
386
|
+
when ::Hash
|
387
|
+
|
388
|
+
h = source
|
389
|
+
else
|
390
|
+
|
391
|
+
if source.respond_to?(:to_hash)
|
392
|
+
|
393
|
+
h = source.to_hash
|
394
|
+
else
|
395
|
+
|
396
|
+
raise TypeError, "#{self}.#{__method__}() 'source' argument must be a #{::Hash}, or an object implementing #{::IO}, or a type implementing 'to_hash'"
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
_libclimate = require_element_(h, Hash, 'libclimate', nil)
|
401
|
+
_exit_on_missing = lookup_element_(_libclimate, :boolean, 'exit_on_missing', 'libclimate')
|
402
|
+
_ignore_unknown = lookup_element_(_libclimate, :boolean, 'ignore_unknown', 'libclimate')
|
403
|
+
_exit_on_unknown = lookup_element_(_libclimate, :boolean, 'exit_on_unknown', 'libclimate')
|
404
|
+
_exit_on_usage = lookup_element_(_libclimate, :boolean, 'exit_on_usage', 'libclimate')
|
405
|
+
_info_lines = lookup_element_(_libclimate, Array, 'info_lines', 'libclimate')
|
406
|
+
_program_name = lookup_element_(_libclimate, String, 'program_name', 'libclimate')
|
407
|
+
_constrain_values = lookup_element_(_libclimate, [ Integer, Range ], 'constrain_values', 'libclimate')
|
408
|
+
_flags_and_options = lookup_element_(_libclimate, String, 'flags_and_options', 'libclimate')
|
409
|
+
_usage_values = lookup_element_(_libclimate, String, 'usage_values', 'libclimate')
|
410
|
+
_value_names = lookup_element_(_libclimate, Array, 'value_names', 'libclimate')
|
411
|
+
_version = lookup_element_(_libclimate, [ String, [] ], 'version', 'libclimate')
|
412
|
+
|
413
|
+
specs = CLASP::Arguments.load_specifications _libclimate, options
|
414
|
+
|
415
|
+
cl = Climate.new(options.merge(Climate_Constants_::GIVEN_SPECS_ => specs), &blk)
|
416
|
+
|
417
|
+
cl.exit_on_missing = _exit_on_missing unless _exit_on_missing.nil?
|
418
|
+
cl.ignore_unknown = _ignore_unknown unless _ignore_unknown.nil?
|
419
|
+
cl.exit_on_unknown = _exit_on_unknown unless _exit_on_unknown.nil?
|
420
|
+
cl.exit_on_usage = _exit_on_usage unless _exit_on_usage.nil?
|
421
|
+
cl.info_lines = _info_lines unless _info_lines.nil?
|
422
|
+
cl.program_name = _program_name unless _program_name.nil?
|
423
|
+
cl.constrain_values = _constrain_values unless _constrain_values.nil?
|
424
|
+
cl.flags_and_options = _flags_and_options unless _flags_and_options.nil?
|
425
|
+
cl.usage_values = _usage_values unless _usage_values.nil?
|
426
|
+
cl.value_names = _value_names unless _value_names.nil?
|
427
|
+
cl.version = _version unless _version.nil?
|
428
|
+
|
429
|
+
cl
|
430
|
+
end
|
431
|
+
|
269
432
|
# Creates an instance of the Climate class.
|
270
433
|
#
|
271
434
|
# === Signature
|
@@ -280,8 +443,8 @@ class Climate
|
|
280
443
|
# - +:version+ (String, [Integer], [String]) A version specification. If not specified, this is inferred
|
281
444
|
# - +:version_context+ Object or class that defines a context for searching the version. Ignored if +:version+ is specified
|
282
445
|
#
|
283
|
-
# * *Block* An optional block
|
284
|
-
def initialize(options={}) # :yields: climate
|
446
|
+
# * *Block* An optional block that receives the initialising Climate instance, allowing the user to modify the attributes.
|
447
|
+
def initialize(options={}, &blk) # :yields: climate
|
285
448
|
|
286
449
|
check_parameter options, 'options', allow_nil: true, type: ::Hash
|
287
450
|
|
@@ -299,6 +462,8 @@ class Climate
|
|
299
462
|
pr_name = (pr_name =~ /\.(?:bat|cmd|rb|sh)$/) ? "#$`(#$&)" : pr_name
|
300
463
|
end
|
301
464
|
|
465
|
+
given_specs = options[Climate_Constants_::GIVEN_SPECS_]
|
466
|
+
|
302
467
|
@specifications = []
|
303
468
|
@ignore_unknown = false
|
304
469
|
@exit_on_unknown = true
|
@@ -318,6 +483,8 @@ class Climate
|
|
318
483
|
@specifications << CLASP::Flag.Help(handle: proc { show_usage_ }) unless options[:no_help_flag]
|
319
484
|
@specifications << CLASP::Flag.Version(handle: proc { show_version_ }) unless options[:no_version_flag]
|
320
485
|
|
486
|
+
@specifications = @specifications + given_specs if given_specs
|
487
|
+
|
321
488
|
yield self if block_given?
|
322
489
|
end
|
323
490
|
|
@@ -386,6 +553,13 @@ class Climate
|
|
386
553
|
raise ArgumentError, "argv may not be nil" if argv.nil?
|
387
554
|
|
388
555
|
arguments = CLASP::Arguments.new argv, specifications
|
556
|
+
|
557
|
+
run_ argv, arguments
|
558
|
+
end
|
559
|
+
|
560
|
+
private
|
561
|
+
def run_ argv, arguments # :nodoc:
|
562
|
+
|
389
563
|
flags = arguments.flags
|
390
564
|
options = arguments.options
|
391
565
|
values = arguments.values.to_a
|
@@ -594,7 +768,7 @@ class Climate
|
|
594
768
|
message = "wrong number of values: #{values.size} given, #{values_constraint} required; use --help for usage"
|
595
769
|
end
|
596
770
|
|
597
|
-
if
|
771
|
+
if exit_on_missing
|
598
772
|
|
599
773
|
self.abort message
|
600
774
|
else
|
@@ -619,7 +793,7 @@ class Climate
|
|
619
793
|
message = "wrong number of values: #{values.size} givens, #{values_constraint.begin} - #{values_constraint.end - (values_constraint.exclude_end? ? 1 : 0)} required; use --help for usage"
|
620
794
|
end
|
621
795
|
|
622
|
-
if
|
796
|
+
if exit_on_missing
|
623
797
|
|
624
798
|
self.abort message
|
625
799
|
else
|
@@ -661,6 +835,7 @@ class Climate
|
|
661
835
|
|
662
836
|
results
|
663
837
|
end
|
838
|
+
public
|
664
839
|
|
665
840
|
# Calls abort() with the given message prefixed by the program_name
|
666
841
|
#
|
@@ -719,20 +894,22 @@ class Climate
|
|
719
894
|
# - +:help+ (String) Description string used when writing response to "+--help+" flag
|
720
895
|
# - +:required+ (boolean) Indicates whether the flag is required, causing #run to fail with appropriate message if the flag is not specified in the command-line arguments
|
721
896
|
#
|
897
|
+
# * *Block* An optional block that is invoked when the parsed command-line contains the given flag, receiving the argument and the alias
|
898
|
+
#
|
722
899
|
# === Examples
|
723
900
|
#
|
724
901
|
# ==== Specification(s) of a flag (single statement)
|
725
902
|
#
|
726
|
-
def add_flag(name_or_flag, options={}, &
|
903
|
+
def add_flag(name_or_flag, options={}, &blk)
|
727
904
|
|
728
|
-
check_parameter name_or_flag, 'name_or_flag', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::
|
905
|
+
check_parameter name_or_flag, 'name_or_flag', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::FlagSpecification ]
|
729
906
|
|
730
907
|
if ::CLASP::Flag === name_or_flag
|
731
908
|
|
732
909
|
specifications << name_or_flag
|
733
910
|
else
|
734
911
|
|
735
|
-
specifications << CLASP.Flag(name_or_flag, **options, &
|
912
|
+
specifications << CLASP.Flag(name_or_flag, **options, &blk)
|
736
913
|
end
|
737
914
|
end
|
738
915
|
|
@@ -750,16 +927,19 @@ class Climate
|
|
750
927
|
# - +:help+ (String) Description string used when writing response to "+--help+" flag
|
751
928
|
# - +:values_range+ ([String]) An array of strings representing the valid/expected values used when writing response to "+--help+" flag. NOTE: the current version does not validate against these values, but a future version may do so
|
752
929
|
# - +:default_value+ (String) The default version used when, say, for the option +--my-opt+ the command-line contain the argument "+--my-opt=+"
|
753
|
-
|
930
|
+
#
|
931
|
+
# * *Block* An optional block that is invoked when the parsed command-line contains the given option, receiving the argument and the alias
|
932
|
+
#
|
933
|
+
def add_option(name_or_option, options={}, &blk)
|
754
934
|
|
755
|
-
check_parameter name_or_option, 'name_or_option', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::
|
935
|
+
check_parameter name_or_option, 'name_or_option', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::OptionSpecification ]
|
756
936
|
|
757
937
|
if ::CLASP::Option === name_or_option
|
758
938
|
|
759
939
|
specifications << name_or_option
|
760
940
|
else
|
761
941
|
|
762
|
-
specifications << CLASP.Option(name_or_option, **options, &
|
942
|
+
specifications << CLASP.Option(name_or_option, **options, &blk)
|
763
943
|
end
|
764
944
|
end
|
765
945
|
|
@@ -803,7 +983,7 @@ class Climate
|
|
803
983
|
# climate.add_alias('--verbosity=verbose', '-v')
|
804
984
|
def add_alias(name_or_specification, *aliases)
|
805
985
|
|
806
|
-
check_parameter name_or_specification, 'name_or_specification', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::
|
986
|
+
check_parameter name_or_specification, 'name_or_specification', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::FlagSpecification, ::CLASP::OptionSpecification ]
|
807
987
|
raise ArgumentError, "must supply at least one alias" if aliases.empty?
|
808
988
|
|
809
989
|
case name_or_specification
|
@@ -818,6 +998,80 @@ class Climate
|
|
818
998
|
self.specifications << CLASP.Alias(name_or_specification, aliases: aliases)
|
819
999
|
end
|
820
1000
|
end
|
1001
|
+
|
1002
|
+
# Attaches a block to an already-registered flag
|
1003
|
+
#
|
1004
|
+
# === Signature
|
1005
|
+
#
|
1006
|
+
# * *Parameters:*
|
1007
|
+
# - +name_or_flag+ (String, ::CLASP::FlagSpecification) The flag name or instance of CLASP::FlagSpecification
|
1008
|
+
# - +options+ (Hash) An options hash, containing any of the following options. No options are recognised currently
|
1009
|
+
#
|
1010
|
+
# * *Options:*
|
1011
|
+
#
|
1012
|
+
# * *Block* A required block that is invoked when the parsed command-line contains the given flag, receiving the argument and the alias
|
1013
|
+
#
|
1014
|
+
def on_flag(name_or_flag, options={}, &blk)
|
1015
|
+
|
1016
|
+
check_parameter name_or_flag, 'name_or_flag', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::FlagSpecification ]
|
1017
|
+
|
1018
|
+
raise ArgumentError, "on_flag() requires a block to be given" unless block_given?
|
1019
|
+
|
1020
|
+
specifications.each do |spec|
|
1021
|
+
|
1022
|
+
case spec
|
1023
|
+
when CLASP::FlagSpecification
|
1024
|
+
|
1025
|
+
if spec == name_or_flag
|
1026
|
+
|
1027
|
+
spec.action = blk
|
1028
|
+
|
1029
|
+
return true
|
1030
|
+
end
|
1031
|
+
end
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
warn "The Climate instance does not contain a FlagSpecification matching '#{name_or_flag}' (#{name_or_flag.class})"
|
1035
|
+
|
1036
|
+
false
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
# Attaches a block to an already-registered option
|
1040
|
+
#
|
1041
|
+
# === Signature
|
1042
|
+
#
|
1043
|
+
# * *Parameters:*
|
1044
|
+
# - +name_or_option+ (String, ::CLASP::OptionSpecification) The option name or instance of CLASP::OptionSpecification
|
1045
|
+
# - +options+ (Hash) An options hash, containing any of the following options. No options are recognised currently
|
1046
|
+
#
|
1047
|
+
# * *Options:*
|
1048
|
+
#
|
1049
|
+
# * *Block* A required block that is invoked when the parsed command-line contains the given option, receiving the argument and the alias
|
1050
|
+
#
|
1051
|
+
def on_option(name_or_option, options={}, &blk)
|
1052
|
+
|
1053
|
+
check_parameter name_or_option, 'name_or_option', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::OptionSpecification ]
|
1054
|
+
|
1055
|
+
raise ArgumentError, "on_option() requires a block to be given" unless block_given?
|
1056
|
+
|
1057
|
+
specifications.each do |spec|
|
1058
|
+
|
1059
|
+
case spec
|
1060
|
+
when CLASP::OptionSpecification
|
1061
|
+
|
1062
|
+
if spec == name_or_option
|
1063
|
+
|
1064
|
+
spec.action = blk
|
1065
|
+
|
1066
|
+
return true
|
1067
|
+
end
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
warn "The Climate instance does not contain an OptionSpecification matching '#{name_or_option}' (#{name_or_option.class})"
|
1072
|
+
|
1073
|
+
false
|
1074
|
+
end
|
821
1075
|
end # class Climate
|
822
1076
|
end # module LibCLImate
|
823
1077
|
|
data/lib/libclimate/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libclimate-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wilson
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.19'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.19'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: xqsr3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,6 +46,7 @@ extra_rdoc_files: []
|
|
46
46
|
files:
|
47
47
|
- LICENSE
|
48
48
|
- README.md
|
49
|
+
- examples/flag_and_option_specifications.from_DATA.rb
|
49
50
|
- examples/flag_and_option_specifications.md
|
50
51
|
- examples/flag_and_option_specifications.rb
|
51
52
|
- examples/show_usage_and_version.md
|