shellopts 2.5.1 → 2.6.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
  SHA256:
3
- metadata.gz: 6ff7cb2ce9ba5f03f921c602b81c179c185193d6e26eb9b39d34f54bed30c3bd
4
- data.tar.gz: c18bf6c16327031b7228960649a88ef9d08638ec2e0bfadaf23ebcd49e29baab
3
+ metadata.gz: 1ba9102a9c2600e217c6ee3398b61d017ba7705a9eee4a56ac3a8005233827d2
4
+ data.tar.gz: 233b337ba011a4e868084ebe443b2794f044e06a41a5d913d449dc867a77125d
5
5
  SHA512:
6
- metadata.gz: a517100a6152d7f0238367d6c7c95e0d92c982f6aff3d4888458b00513cb4e30f3320305f9ee3fd273b24bc8a88eddc5a0b6200e673717db896def4902dcd703
7
- data.tar.gz: 895a4e62108e62106fcc644706a0c4cbd4bda973fb38d62ac473f0c50dda7439061357427f9a281f687ba4fc70e20d7eaab5e4910fbfb0bb0bba11529e7aae3d
6
+ metadata.gz: fa9721b673146939017c02e7434082f9e8d7133a3c0367e5d8016977adec49f859277be54b44c7998ae7927774d42203560ef4e53f7490e8bb3cf629350e78db
7
+ data.tar.gz: e5a926911404a936443ada678611089f93bb40c6620cd69d0c04b123ab7c2d3095af5f729b7862bdc4430ccb36a6343dcb63d6cc19d5aa29e73a035b40af1eb5
@@ -48,6 +48,18 @@ module ShellOpts
48
48
  end
49
49
  end
50
50
 
51
+ # Return true args contains at least the given count or range of elements
52
+ def extract?(count_or_range)
53
+ case count_or_range
54
+ when Range
55
+ count_or_range.min <= self.size
56
+ when Integer
57
+ count_or_range.abs <= self.size
58
+ else
59
+ raise ArgumentError
60
+ end
61
+ end
62
+
51
63
  # As #extract except the array is expected to be emptied by the operation.
52
64
  # Raise a #inoa exception if count is negative
53
65
  #
@@ -67,6 +79,19 @@ module ShellOpts
67
79
  extract(count_or_range) # Can't fail
68
80
  end
69
81
 
82
+ # Return true args contains the given count or range of elements
83
+ def expect?(count_or_range, message = nil)
84
+ case count_or_range
85
+ when Range
86
+ count_or_range === self.size
87
+ when Integer
88
+ count_or_range >= 0 or raise ArgumentError # FIXME in #expect
89
+ count_or_range.abs == self.size
90
+ else
91
+ raise ArgumentError
92
+ end
93
+ end
94
+
70
95
  private
71
96
  def inoa(message = nil)
72
97
  message ||= "Illegal number of arguments"
@@ -1,4 +1,4 @@
1
- require 'terminfo'
1
+ require 'tty-screen'
2
2
 
3
3
  module ShellOpts
4
4
  module Grammar
@@ -296,8 +296,13 @@ module ShellOpts
296
296
  end
297
297
 
298
298
  def self.width()
299
- @width ||= TermInfo.screen_width - MARGIN_RIGHT
300
- @width
299
+ begin
300
+ _stdout = $stdout # TTY::Screen use $stdout but that can be a StringIO object without ioctl
301
+ $stdout = STDOUT if !$stdout.respond_to? :ioctl
302
+ @width ||= TTY::Screen.width - MARGIN_RIGHT
303
+ ensure
304
+ $stdout = _stdout
305
+ end
301
306
  end
302
307
 
303
308
  # Used in rspec
@@ -6,7 +6,7 @@ module ShellOpts
6
6
  # BasicObject to have only a minimum of inherited member methods.
7
7
  #
8
8
  # The names of the inherited methods can't be used as options or
9
- # command namess. They are: instance_eval, instance_exec method_missing,
9
+ # command names. They are: instance_eval, instance_exec method_missing,
10
10
  # singleton_method_added, singleton_method_removed, and
11
11
  # singleton_method_undefined.
12
12
  #
@@ -1,5 +1,3 @@
1
- require 'terminfo'
2
-
3
1
  # Option rendering
4
2
  # -a, --all # Only used in brief and doc formats (enum)
5
3
  # --all # Only used in usage (long)
@@ -1,3 +1,3 @@
1
1
  module ShellOpts
2
- VERSION = "2.5.1"
2
+ VERSION = "2.6.1"
3
3
  end
data/lib/shellopts.rb CHANGED
@@ -89,6 +89,9 @@ module ShellOpts
89
89
  # Name of program. Defaults to the name of the executable
90
90
  attr_reader :name
91
91
 
92
+ # Executable. Default $PROGRAM_NAME
93
+ attr_reader :file
94
+
92
95
  # Specification (String). Initialized by #compile
93
96
  attr_reader :spec
94
97
 
@@ -133,14 +136,11 @@ module ShellOpts
133
136
  # message and exit
134
137
  attr_accessor :exception
135
138
 
136
- # File of source
137
- attr_reader :file
138
-
139
139
  # Debug: Internal variables made public
140
140
  attr_reader :tokens
141
141
  alias_method :ast, :grammar
142
142
 
143
- def initialize(name: nil,
143
+ def initialize(name: nil, file: $PROGRAM_NAME,
144
144
  # Options
145
145
  help: true,
146
146
  version: true,
@@ -149,7 +149,7 @@ module ShellOpts
149
149
  verbose: nil,
150
150
  debug: nil,
151
151
 
152
- # Version number (usually detected)
152
+ # Version number (auto-detected for gem packages)
153
153
  version_number: nil,
154
154
 
155
155
  # Floating options
@@ -159,14 +159,15 @@ module ShellOpts
159
159
  exception: false
160
160
  )
161
161
 
162
- @name = name || File.basename($PROGRAM_NAME)
162
+ @name = name || File.basename(file)
163
+ @file = file
163
164
  @help = help
164
- @version = version || (version.nil? && !version_number.nil?)
165
+ @version_number = version_number || (version && find_version_number)
166
+ @version = !@version_number.nil? && version
165
167
  @silent = silent
166
168
  @quiet = quiet
167
169
  @verbose = verbose
168
170
  @debug = debug
169
- @version_number = version_number || find_version_number
170
171
  @float = float
171
172
  @exception = exception
172
173
  end
@@ -177,19 +178,18 @@ module ShellOpts
177
178
  handle_exceptions {
178
179
  @oneline = spec.index("\n").nil?
179
180
  @spec = spec.sub(/^\s*\n/, "")
180
- @file = find_caller_file
181
181
  @tokens = Lexer.lex(name, @spec, @oneline)
182
182
  ast = Parser.parse(tokens)
183
183
 
184
184
  help_spec = (@help == true ? "-h,help" : @help)
185
185
  version_spec = (@version == true ? "--version" : @version)
186
- silent_spec = (@silent == true ? "-q,silent" : @silent)
186
+ silent_spec = (@silent == true ? "--silent" : @silent)
187
187
  quiet_spec = (@quiet == true ? "-q,quiet" : @quiet)
188
188
  verbose_spec = (@verbose == true ? "+v,verbose" : @verbose)
189
189
  debug_spec = (@debug == true ? "--debug" : @debug)
190
190
 
191
191
  @silent_option =
192
- ast.inject_option(silent_spec, "Quiet", "Do not write anything to standard output") if @silent
192
+ ast.inject_option(silent_spec, "Silent", "Do not write anything to standard output/error") if @silent
193
193
  @quiet_option =
194
194
  ast.inject_option(quiet_spec, "Quiet", "Do not write anything to standard output") if @quiet
195
195
  @verbose_option =
@@ -311,10 +311,8 @@ module ShellOpts
311
311
 
312
312
  private
313
313
  def find_version_number
314
- exe = caller.find { |line| line =~ /`<top \(required\)>'$/ }&.sub(/:.*/, "") or return nil
315
- file = Dir.glob(File.dirname(exe) + "/../lib/*/version.rb").first or return nil
316
- IO.read(file).sub(/^.*VERSION\s*=\s*"(.*?)".*$/m, '\1') or
317
- raise ArgumentError, "ShellOpts needs an explicit version"
314
+ version_rb = Dir.glob(File.dirname(file) + "/../lib/*/version.rb").first or return nil
315
+ IO.readlines(version_rb).grep(/^.*VERSfION\s*=\s*"(.*?)".*$/) { $1 }.first
318
316
  end
319
317
 
320
318
  def handle_exceptions(&block)
@@ -334,10 +332,6 @@ module ShellOpts
334
332
  end
335
333
  end
336
334
 
337
- def find_caller_file
338
- caller.reverse.select { |line| line !~ /^\s*#{__FILE__}:/ }.last.sub(/:.*/, "").sub(/^\.\//, "")
339
- end
340
-
341
335
  def self.compare_lines(text, spec)
342
336
  return true if text == spec
343
337
  return true if text =~ /[#\$\\]/
data/main CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.unshift "#{Dir.getwd}/lib"
3
+ #$LOAD_PATH.unshift "#{Dir.getwd}/lib"
4
4
 
5
- require 'shellopts'
5
+ require_relative 'lib/shellopts.rb'
6
6
 
7
7
  #include ShellOpts::Message
8
8
  include ShellOpts::Verbose
@@ -10,7 +10,6 @@ include ShellOpts::Verbose
10
10
 
11
11
  #include ShellOpts::Messages
12
12
  #p ShellOpts::Messages.is_included?
13
-
14
13
  SPEC = %(
15
14
  Test
16
15
 
@@ -18,12 +17,12 @@ SPEC = %(
18
17
  An option
19
18
  )
20
19
 
21
- opts, args = ShellOpts.process(SPEC, ARGV, version: "--ver", version_number: "1.2.3", help: "-?,help")
20
+ opts, args = ShellOpts.process(SPEC, ARGV, version: "--ver", version_number: "1.2.3")
22
21
 
23
22
  verb "Verbose default"
24
23
  (0..3).each { |i| verb i, "Verbose #{i}" }
25
24
  mesg "Message"
26
25
  notice "Notice"
27
26
  #debug "Debug"
28
-
27
+ puts ShellOpts.instance.version_number
29
28
 
data/shellopts.gemspec CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "forward_to"
27
27
  spec.add_dependency "constrain"
28
- spec.add_dependency "ruby-terminfo-r3"
29
28
  spec.add_dependency "indented_io"
29
+ spec.add_dependency "tty-screen"
30
30
 
31
31
  spec.add_development_dependency "rake"
32
32
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shellopts
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-09-15 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: forward_to
@@ -39,7 +38,7 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: ruby-terminfo-r3
41
+ name: indented_io
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
@@ -53,7 +52,7 @@ dependencies:
53
52
  - !ruby/object:Gem::Version
54
53
  version: '0'
55
54
  - !ruby/object:Gem::Dependency
56
- name: indented_io
55
+ name: tty-screen
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ">="
@@ -159,7 +158,6 @@ files:
159
158
  homepage: http://github.com/clrgit/shellopts
160
159
  licenses: []
161
160
  metadata: {}
162
- post_install_message:
163
161
  rdoc_options: []
164
162
  require_paths:
165
163
  - lib
@@ -174,8 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
172
  - !ruby/object:Gem::Version
175
173
  version: '0'
176
174
  requirements: []
177
- rubygems_version: 3.3.7
178
- signing_key:
175
+ rubygems_version: 3.6.9
179
176
  specification_version: 4
180
177
  summary: Parse command line options and arguments
181
178
  test_files: []