parseopt 0.2.0 → 0.3.0

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: 344951947cddbdaf40959c6d42b7319f668d431d34d19f0c9e7c94f253aa957a
4
- data.tar.gz: 6e3fc5489a126736cb1b03d2a1cee80e3478178e048948200d0132d5afd1a995
3
+ metadata.gz: 6b4e4cca586e2ff40e257ebcc12528f9227f983f12243370ee09169aa03686cb
4
+ data.tar.gz: d058140b9cc13b30de2edafce3d5ac57c806f4be6458a6ec4eef1f337b21676c
5
5
  SHA512:
6
- metadata.gz: e2e4884941cb8c03e132941287ca014b2df78d2eaa47f52819e9966fbbaf2155deef19c16d386d2d6763dbfa5722e11e6234097ff7227fe99ec486605cb7e24f
7
- data.tar.gz: e841a204bd15ec89c612bd9a99a9bacbc798c859a39919409a5a395b45b5423603247a0744b15b99197360c5734d7cd60536e5c58294f3267acbacfb9e07e83a
6
+ metadata.gz: ae40e7ba95a36edc00b5cd0a11031a10bc859c263fd781fc0e4a290da422ea9d610e15aefd173ee786cb6b43adf8609a65dbd7b9a9324dffa8fddaea8612661f
7
+ data.tar.gz: eeabc5a66a1ad9607a7fadf4681fed615895032fd74fa6610038a4dbe70b309744b1008ac9e46f6f5661625bf42e5ec40c2f04667f93ae32fc129521ed57940f
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ A very simple option parser.
2
+
3
+ ```ruby
4
+ require 'parseopt'
5
+
6
+ opts = ParseOpt.new('my command')
7
+
8
+ # only short
9
+ opts.on('b') do |v|
10
+ $bool = v
11
+ end
12
+
13
+ # short and long
14
+ opts.on('s', 'string') do |v|
15
+ $string = v
16
+ end
17
+
18
+ # short, long, and help
19
+ opts.on('n', 'number', 'Number') do |v|
20
+ $number = v.to_i
21
+ end
22
+
23
+ opts.parse
24
+ ```
25
+
26
+ Running with `--help` gives:
27
+
28
+ ```
29
+ usage: my command
30
+ -b
31
+ -s, --string
32
+ -n, --number Number
33
+ ```
34
+
35
+ ## Installation
36
+
37
+ Simply install the gem:
38
+
39
+ gem install parseopt
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'rake/testtask'
2
+
3
+ task default: :test
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ end
data/lib/parseopt.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  class ParseOpt
2
- attr_writer :usage
3
-
4
2
  class Option
5
3
  attr_reader :short, :long, :help
6
4
 
@@ -15,17 +13,38 @@ class ParseOpt
15
13
  @block.call(v) || true
16
14
  end
17
15
  end
16
+ private_constant :Option
18
17
 
19
- def initialize
18
+ # Creates a new instance.
19
+ #
20
+ # Yields itself if called with a block.
21
+ #
22
+ # @param [String] usage usage banner.
23
+ #
24
+ # @yieldparam [ParseOpt] self Option parser object
25
+ def initialize(usage = nil)
20
26
  @list = {}
27
+ @usage = usage
28
+ yield self if block_given?
21
29
  end
22
30
 
31
+ # Creates an option.
32
+ #
33
+ # The block is called with the value when the option is found.
34
+ #
35
+ # @example Simple boolean
36
+ # opts.on('b') { $bool = true }
37
+ # @example Simple string with value
38
+ # opts.on('s', 'string') { |value| $string = value }
39
+ #
40
+ # @yieldparam value value parsed
23
41
  def on(short, long = nil, help = nil, &block)
24
42
  opt = Option.new(short, long, help, &block)
25
43
  @list[short] = opt if short
26
44
  @list[long] = opt if long
27
45
  end
28
46
 
47
+ # Parses all the command line arguments
29
48
  def parse(args = ARGV)
30
49
  if args.member?('-h') or args.member?('--help')
31
50
  usage
@@ -50,6 +69,12 @@ class ParseOpt
50
69
  end
51
70
  end
52
71
 
72
+ # Sets the usage banner
73
+ def usage=(value)
74
+ @usage = value
75
+ end
76
+
77
+ # Generates the usage output (similar to `--help`)
53
78
  def usage
54
79
  puts 'usage: %s' % @usage
55
80
  @list.values.uniq.each do |opt|
@@ -58,6 +58,14 @@ class ParseOptTest < Test::Unit::TestCase
58
58
  assert(!bool)
59
59
  end
60
60
 
61
+ def test_init
62
+ bool = false
63
+ ParseOpt.new('test script') do |opts|
64
+ opts.on('b', 'bool') { |v| bool = v }
65
+ end.parse(%w[-b])
66
+ assert(bool)
67
+ end
68
+
61
69
  def test_usage
62
70
  expected = <<~EOF
63
71
  usage:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parseopt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Contreras
@@ -10,12 +10,14 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2021-05-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A very simple option parser
13
+ description:
14
14
  email: felipe.contreras@gmail.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - README.md
20
+ - Rakefile
19
21
  - lib/parseopt.rb
20
22
  - test/test_optparse.rb
21
23
  homepage: https://rubygems.org/gems/parseopt
@@ -40,6 +42,6 @@ requirements: []
40
42
  rubygems_version: 3.2.15
41
43
  signing_key:
42
44
  specification_version: 4
43
- summary: Option parser
45
+ summary: A very simple option parser.
44
46
  test_files:
45
47
  - test/test_optparse.rb