shellopts 0.9.5 → 0.9.6

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: 12f6d1397c2a4ae0a4e8c168f1d695f25ade753c37f94e8b4373ce57aa222593
4
- data.tar.gz: 9589f39de24f13c5d5bf6ae873b58d425cc393654362e9afa7699c5d7dd81a46
3
+ metadata.gz: 943b9d0c44ba0291937be24cbc79d0155dfc22ac788c69a76639850d78af3303
4
+ data.tar.gz: f38e038f613c577b06e9d2facc6096b39eb18f28266ba8c58a8280adcf75fe47
5
5
  SHA512:
6
- metadata.gz: 577ab3793305b1eeee0b3fca253832603fbeaf4d34a511e11a7625aa356b1031e17116213c055cb5672821e524d8c34409398a1209bc3cdade7a53fded96d87f
7
- data.tar.gz: bcadf1a3c495a6bda0863e42c40ef82744abc2fbe401a57286c335b62cc4e50f51ddf76847d2c360fae08f51120f3fbcd4538076e6527f5d379bd5828978f9b7
6
+ metadata.gz: 42cc6102c0c66dcffda0b03f9c584c32abc0e62a65dbe79e1389753b74af11f189e27a456e79fb2cb082595622ddbce0840dd22419204e276a48134ac8afd610
7
+ data.tar.gz: 6a3b2e35718a5ee1f52e5d56a50ea067da90fef35a4ac3322738e24d5ba80f4aba4ac4a692caace4bb094ccfb84432e9211fef2b15dfef2e194a95569ca80686
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  /.yardoc
3
3
  /_yardoc/
4
4
  /doc/
5
+ /rdoc/
5
6
  /pkg/
6
7
  /spec/reports/
7
8
  /tmp/
data/README.md CHANGED
@@ -1,20 +1,20 @@
1
1
  # Shellopts
2
2
 
3
- `ShellOpts` is a simple command line parsing libray that covers most modern use
3
+ `ShellOpts` is a simple Linux command line parsing libray that covers most modern use
4
4
  cases incl. sub-commands. Options and commands are specified using a
5
5
  getopt(1)-like string that is interpreted by the library to process the command
6
6
  line
7
7
 
8
8
  ## Usage
9
9
 
10
- The following program accepts `-a` and `--all` that are aliases
11
- for the same option, `--count` that may be given an integer argument but
12
- defaults to 42, `--file` that has a mandatory argument, and `-v` and
13
- `--verbose` that can be repeated to increase the verbosity level
10
+ Program that accepts the options -a or --all, --count, --file, and -v or
11
+ --verbose. The usage definition expects `--count` to have an optional integer
12
+ argument, `--file` to have a mandatory argument, and allows `-v` and
13
+ `--verbose` to be repeated:
14
14
 
15
- ```ruby
16
- require 'shellopts'
17
15
 
16
+ ```ruby
17
+
18
18
  # Define options
19
19
  USAGE = "a,all count=#? file= +v,verbose -- FILE..."
20
20
 
@@ -36,7 +36,7 @@ args = ShellOpts.process(USAGE, ARGV) do |opt, arg|
36
36
  end
37
37
  end
38
38
 
39
- # Process remaining arguments
39
+ # Process remaining command line arguments
40
40
  args.each { |arg| ... }
41
41
  ```
42
42
 
@@ -50,10 +50,10 @@ error
50
50
 
51
51
  ## Processing
52
52
 
53
- `ShellOpts.process` compiles a usage definition string into a grammar and use that to
54
- parse the command line. If given a block, the block is called with a name/value
55
- pair for each option or command and return a list of the remaining non-option
56
- arguments
53
+ `ShellOpts.process` compiles a usage definition string into a grammar and use
54
+ that to parse the command line. If given a block, the block is called with a
55
+ name/value pair for each option or command and return a list of the remaining
56
+ non-option arguments
57
57
 
58
58
  ```ruby
59
59
  args = ShellOpts.process(USAGE, ARGV) do |opt, arg|
@@ -101,6 +101,18 @@ An option is defined by a list of comma-separated names optionally prefixed by a
101
101
  [ "+" ] name-list [ "=" [ "#" | "$" ] [ label ] [ "?" ] ]
102
102
  ```
103
103
 
104
+ #### Flags
105
+
106
+ There are the following flags:
107
+
108
+ |Flag|Effect|
109
+ |---|---|
110
+ |+|Repeated option (prefix)|
111
+ |=|Argument. Mandatory unless `?` is also used|
112
+ |#|Integer argument|
113
+ |$|Floating point argument|
114
+ |?|Optional argument|
115
+
104
116
  #### Repeated options
105
117
 
106
118
  Options are unique by default and the user will get an error if an option is
@@ -260,6 +272,23 @@ The methods are defined as instance methods on `ShellOpts::ShellOpts` and as
260
272
  class methods on `ShellOpts`. They can also be included in the global scope by
261
273
  `include ShellOpts::Utils`
262
274
 
275
+ #### Usage string
276
+
277
+ The error handling methods prints a prettified version of the usage string
278
+ given to `ShellOpts.parse`. It can be overridden by assigning to
279
+ `ShellOpts.usage`. You'll often assign to the usage string when it needs to be
280
+ split over several lines:
281
+
282
+ ```ruby
283
+
284
+ USAGE="long-and-complex-usage-string"
285
+ ShellOpts.usage = %(
286
+ usage explanation
287
+ split over
288
+ multiple lines
289
+ )
290
+ ```
291
+
263
292
  ## Example
264
293
 
265
294
  The rm(1) command could be implemented like this
data/bin/mkdoc CHANGED
@@ -1,10 +1,15 @@
1
1
  #!/usr/bin/bash
2
2
 
3
- LINK='<link rel="stylesheet" type="text/css" href="stylesheet.css">'
3
+ set -e
4
4
 
5
- {
6
- echo $LINK
7
- pandoc README.md
8
- } >index.html
5
+ # Generate github-like page
6
+ (
7
+ cd doc
8
+ {
9
+ echo '<link rel="stylesheet" type="text/css" href="stylesheet.css">'
10
+ pandoc ../README.md
11
+ } >index.html
12
+ )
9
13
 
10
- rdoc lib
14
+ # Generate rdoc
15
+ rdoc --output=rdoc --force-output lib
@@ -12,6 +12,18 @@ require 'shellopts/utils.rb'
12
12
  # name of the program
13
13
  #
14
14
  module ShellOpts
15
+ # Return the hidden +ShellOpts::ShellOpts+ object (see .process)
16
+ def self.shellopts()
17
+ @shellopts
18
+ end
19
+
20
+ # Prettified usage string used by #error and #fail. Default is +usage+ of
21
+ # the current +ShellOpts::ShellOpts+ object
22
+ def self.usage() @usage ||= @shellopts&.usage end
23
+
24
+ # Set the usage string
25
+ def self.usage=(usage) @usage = usage end
26
+
15
27
  # Process command line options and arguments. #process takes a usage string
16
28
  # defining the options and the array of command line arguments to be parsed
17
29
  # as arguments
@@ -72,14 +84,16 @@ module ShellOpts
72
84
  # #process saves a hidden {ShellOpts::ShellOpts} class variable used by the
73
85
  # class methods #error and #fail. Call #reset to clear the global object if
74
86
  # you really need to parse more than one command line. Alternatively you can
75
- # create +ShellOpts::ShellOpts+ objects yourself and use the object methods
76
- # #error and #fail instead:
87
+ # create +ShellOpts::ShellOpts+ objects yourself and also use the object methods
88
+ # #error and #fail:
77
89
  #
78
90
  # shellopts = ShellOpts::ShellOpts.new(USAGE, ARGS)
79
91
  # shellopts.each { |name, value| ... }
80
92
  # shellopts.args.each { |arg| ... }
81
93
  # shellopts.error("Something went wrong")
82
94
  #
95
+ # Use #shellopts to get the hidden +ShellOpts::ShellOpts+ object
96
+ #
83
97
  def self.process(usage, argv, program_name: PROGRAM, &block)
84
98
  if !block_given?
85
99
  ShellOpts.new(usage, argv, program_name: program_name)
@@ -95,15 +109,20 @@ module ShellOpts
95
109
  # another command line
96
110
  def self.reset()
97
111
  @shellopts = nil
112
+ @usage = nil
98
113
  end
99
114
 
100
115
  # Print error message and usage string and exit with status 1. It use the
101
116
  # current ShellOpts object if defined. This method should be called in
102
117
  # response to user-errors (eg. specifying an illegal option)
118
+ #
119
+ # If there is no current ShellOpts object +error+ will look for USAGE to make
120
+ # it possible to use +error+ before the command line is processed and also as
121
+ # a stand-alone error reporting method
103
122
  def self.error(*msgs)
104
123
  program = @shellopts&.program_name || PROGRAM
105
- usage = @shellopts&.usage || (defined?(USAGE) && USAGE ? Grammar.compile(PROGRAM, USAGE).usage : nil)
106
- emit_and_exit(program, usage, *msgs)
124
+ usage_string = usage || (defined?(USAGE) && USAGE ? Grammar.compile(PROGRAM, USAGE).usage : nil)
125
+ emit_and_exit(program, usage_string, *msgs)
107
126
  end
108
127
 
109
128
  # Print error message and exit with status 1. It use the current ShellOpts
@@ -119,7 +138,7 @@ module ShellOpts
119
138
  # Name of program
120
139
  attr_reader :program_name
121
140
 
122
- # Usage string. Shorthand for +grammar.usage+
141
+ # Prettified usage string used by #error and #fail. Shorthand for +grammar.usage+
123
142
  def usage() @grammar.usage end
124
143
 
125
144
  # The grammar compiled from the usage string. If #ast is defined, it's
@@ -1,3 +1,3 @@
1
1
  module Shellopts
2
- VERSION = "0.9.5"
2
+ VERSION = "0.9.6"
3
3
  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: 0.9.5
4
+ version: 0.9.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -103,6 +103,7 @@ files:
103
103
  - bin/console
104
104
  - bin/mkdoc
105
105
  - bin/setup
106
+ - doc/stylesheet.css
106
107
  - lib/ext/array.rb
107
108
  - lib/shellopts.rb
108
109
  - lib/shellopts/ast/command.rb
@@ -137,8 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
138
  - !ruby/object:Gem::Version
138
139
  version: '0'
139
140
  requirements: []
140
- rubyforge_project:
141
- rubygems_version: 2.7.6
141
+ rubygems_version: 3.0.8
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: Parse command line options and arguments