shellopts 2.3.1 → 2.4.1

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
  SHA256:
3
- metadata.gz: 62e1be2ce8220b6bec3fac551a2c44fef7ca52fa4cf1f1565e15836387a85bd9
4
- data.tar.gz: b5872f570a32ff841cb632f18e390eb060fe746cd62d09347dd449782ce529ef
3
+ metadata.gz: 53f85a46df1cf2280e591fbf996781c73e3ddb3dfe88ede023f6ef29f26995a4
4
+ data.tar.gz: 0ffb37c5f3843e92676004994600687dec0db89afccd20dea984998692e160a8
5
5
  SHA512:
6
- metadata.gz: '08b6078dbf4690562e7e4d68cdbd27f2e840ba6440dbe8cbcb0aef932e27b2db959608bf3630f5725d2d8629691839546a41c72d6ea9f178c662a61e984b43be'
7
- data.tar.gz: 49bd8f950a6f1e3ce457b974b88301f4052a597578f2379680f6b7bed8581f522860a679d9a9600427b37927ea5f9a3f110dbe857be14c564cd4e7c221b361ff
6
+ metadata.gz: e67de152c69ae86557ec6898e7b0402d4188b8ca57a53128cfd7b3521655e80aadbc6114bcf943101f1a4012216604703dba54ae2a6921019d228b0b343b1837
7
+ data.tar.gz: bfe12de981b2504514cd42c81f64511d01fe7948d1d8a563b2f34473d30fa8cd7e5cc22f550e9e81bd3a31ff3da863adbc60dd33ffd9fed53ea69d0bc8907a62
@@ -60,6 +60,17 @@ module ShellOpts
60
60
  class FileArgument < ArgumentType
61
61
  attr_reader :kind
62
62
 
63
+ def subject # Used in error messages
64
+ @subject ||=
65
+ case kind
66
+ when :file, :efile, :nfile, :ifile, :ofile; "file"
67
+ when :dir, :edir, :ndir; "directory"
68
+ when :path, :epath, :npath; "path"
69
+ else
70
+ raise ArgumentError
71
+ end
72
+ end
73
+
63
74
  def initialize(kind)
64
75
  constrain kind, :file, :dir, :path, :efile, :edir, :epath, :nfile, :ndir, :npath, :ifile, :ofile
65
76
  @kind = kind
@@ -128,15 +139,6 @@ module ShellOpts
128
139
 
129
140
  protected
130
141
  def match_path(name, literal, kind, method, mode)
131
- subject =
132
- case kind
133
- when :file, :efile, :nfile, :ifile, :ofile; "file"
134
- when :dir, :edir, :ndir; "directory"
135
- when :path, :epath, :npath; "path"
136
- else
137
- raise ArgumentError
138
- end
139
-
140
142
  # file exists and is the rigth type?
141
143
  if File.send(method, literal)
142
144
  if mode == :new
@@ -174,7 +176,7 @@ module ShellOpts
174
176
  set_message "Illegal path in #{name}: #{literal}"
175
177
  end
176
178
  else
177
- set_message "Can't find #{literal}"
179
+ set_message "Can't find #{subject} #{literal}"
178
180
  end
179
181
  end
180
182
  end
@@ -315,12 +315,14 @@ module ShellOpts
315
315
  class Program < Command
316
316
  # Accessors for standard options values that are not affected if the option
317
317
  # is renamed
318
+ attr_accessor :__silent__
318
319
  attr_accessor :__quiet__
319
320
  attr_accessor :__verbose__
320
321
  attr_accessor :__debug__
321
322
 
322
323
  def initialize
323
324
  super
325
+ @__silent__ = false
324
326
  @__quiet__ = false
325
327
  @__verbose__ = 0
326
328
  @__debug__ = false
@@ -1,3 +1,3 @@
1
1
  module ShellOpts
2
- VERSION = "2.3.1"
2
+ VERSION = "2.4.1"
3
3
  end
data/lib/shellopts.rb CHANGED
@@ -110,6 +110,9 @@ module ShellOpts
110
110
  # Version of client program. If not nil, a --version option is added to the program
111
111
  attr_reader :version
112
112
 
113
+ # Automatically add a -s and a --silent option if true
114
+ attr_reader :silent
115
+
113
116
  # Automatically add a -q and a --quiet option if true
114
117
  attr_reader :quiet
115
118
 
@@ -140,6 +143,7 @@ module ShellOpts
140
143
  # Options
141
144
  help: true,
142
145
  version: true,
146
+ silent: nil,
143
147
  quiet: nil,
144
148
  verbose: nil,
145
149
  debug: nil,
@@ -157,6 +161,7 @@ module ShellOpts
157
161
  @name = name || File.basename($PROGRAM_NAME)
158
162
  @help = help
159
163
  @version = version || (version.nil? && !version_number.nil?)
164
+ @silent = silent
160
165
  @quiet = quiet
161
166
  @verbose = verbose
162
167
  @debug = debug
@@ -177,10 +182,13 @@ module ShellOpts
177
182
 
178
183
  help_spec = (@help == true ? "-h,help" : @help)
179
184
  version_spec = (@version == true ? "--version" : @version)
185
+ silent_spec = (@silent == true ? "-q,silent" : @silent)
180
186
  quiet_spec = (@quiet == true ? "-q,quiet" : @quiet)
181
187
  verbose_spec = (@verbose == true ? "+v,verbose" : @verbose)
182
188
  debug_spec = (@debug == true ? "--debug" : @debug)
183
189
 
190
+ @silent_option =
191
+ ast.inject_option(silent_spec, "Quiet", "Do not write anything to standard output") if @silent
184
192
  @quiet_option =
185
193
  ast.inject_option(quiet_spec, "Quiet", "Do not write anything to standard output") if @quiet
186
194
  @verbose_option =
@@ -224,6 +232,8 @@ module ShellOpts
224
232
  puts version_number
225
233
  exit
226
234
  else
235
+ # Assign standard options. The targets doesn't change if the option is renamed
236
+ @program.__silent__ = @program.__send__(:"#{@silent_option.ident}?") if @silent
227
237
  @program.__quiet__ = @program.__send__(:"#{@quiet_option.ident}?") if @quiet
228
238
  @program.__verbose__ = @program.__send__(:"#{@verbose_option.ident}") if @verbose
229
239
  @program.__debug__ = @program.__send__(:"#{@debug_option.ident}?") if @debug
@@ -393,19 +403,35 @@ module ShellOpts
393
403
  end
394
404
  end
395
405
 
396
- def self.process(spec, argv, quiet: nil, verbose: nil, debug: nil, **opts)
406
+ def self.process(spec, argv, silent: nil, quiet: nil, verbose: nil, debug: nil, **opts)
407
+ constrain silent, String, true, false, nil
397
408
  constrain quiet, String, true, false, nil
409
+ silent = silent.nil? ? Message.is_included? || Verbose.is_included? : silent
398
410
  quiet = quiet.nil? ? Message.is_included? || Verbose.is_included? : quiet
399
411
  verbose = verbose.nil? ? ::ShellOpts::Verbose.is_included? : verbose
400
412
  debug = debug.nil? ? Debug.is_included? : debug
401
- ShellOpts.process(spec, argv, quiet: quiet, verbose: verbose, debug: debug, **opts)
413
+ ShellOpts.process(spec, argv, silent: silent, quiet: quiet, verbose: verbose, debug: debug, **opts)
402
414
  end
403
415
 
416
+ # The instance is a ShellOpts object. 'instance.program' and 'instance.argv'
417
+ # is the same as the values returned from ShellOpts.process
404
418
  @instance = nil
405
419
  def self.instance?() !@instance.nil? end
406
420
  def self.instance() @instance or raise Error, "ShellOpts is not initialized" end
407
421
  def self.instance=(instance) @instance = instance end
408
- def self.shellopts() instance end
422
+ def self.shellopts() instance end # TODO: Yt
423
+
424
+ # Returns the corresponding option status on the program object. Note that
425
+ # the "bare" ShellOpts standard option methods (eg. ShellOpts.silent)
426
+ # determines if an option can be used while the query methods (eg.
427
+ # ShellOpts.silent?) reports if the option was present on the command line
428
+ #
429
+ # The methods below are implemented using the name-independent members of
430
+ # Program: __silent__ etc.
431
+ def self.silent?() instance.program.__silent__ end
432
+ def self.quiet?() silent? || instance.program.__quiet__ end
433
+ def self.verbose?(level = 1) level <= instance.program.__verbose__ end
434
+ def self.debug?() instance.program.__debug__ end
409
435
 
410
436
  def self.error(subject = nil, message)
411
437
  instance.error(subject, message) if instance? # Never returns
@@ -419,30 +445,29 @@ module ShellOpts
419
445
  exit 1
420
446
  end
421
447
 
448
+ # Emit a message on standard error. The --silent option suppresses these messages
422
449
  def self.notice(message, newline: true)
423
450
  method = newline ? :puts : :print
424
- $stderr.send(method, message) if !instance.quiet || !instance.program.quiet? # FIXME quiet? vs __quiet__ below
451
+ $stderr.send(method, message) if !silent?
425
452
  end
426
453
 
454
+ # Emit a message on standard output. The --quiet option suppresses these messages
427
455
  def self.mesg(message, newline: true)
428
456
  method = newline ? :puts : :print
429
- $stdout.send(method, message) if !instance.quiet || !instance.program.__quiet__
457
+ $stdout.send(method, message) if !quiet?
430
458
  end
431
459
 
460
+ # Emit a message on standard output. The --verbose option controls these messages
432
461
  def self.verb(level = 1, message, newline: true)
433
462
  method = newline ? :puts : :print
434
- $stdout.send(method, message) if instance.verbose && level <= instance.program.__verbose__
463
+ $stdout.send(method, message) if verbose?(level)
435
464
  end
436
465
 
437
466
  def self.debug(message, newline: true)
438
467
  method = newline ? :puts : :print
439
- $stdout.send(method, message) if instance.debug && instance.program.__debug__
468
+ $stdout.send(method, message) if debug?
440
469
  end
441
470
 
442
- def self.quiet?() instance.program.quiet? end
443
- def self.verbose?(level = 1) level <= instance.program.verbose end
444
- def self.debug?() instance.program.debug? end
445
-
446
471
  module Message
447
472
  @is_included = false
448
473
  def self.is_included?() @is_included end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shellopts
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-28 00:00:00.000000000 Z
11
+ date: 2024-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forward_to