slop 4.1.0 → 4.2.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/CHANGELOG.md +9 -0
- data/README.md +11 -8
- data/lib/slop.rb +1 -1
- data/lib/slop/option.rb +1 -1
- data/lib/slop/parser.rb +2 -0
- data/lib/slop/result.rb +1 -1
- data/lib/slop/types.rb +26 -2
- data/test/option_test.rb +4 -0
- data/test/result_test.rb +14 -6
- data/test/types_test.rb +22 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73d86e1d2fe70c0ce378fdf9e6c1ca771970b11b
|
4
|
+
data.tar.gz: 1da89cf463e52371680e66a913b09c215b1ac730
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b4448b3fad94248ecdb67c8cf6af710c588a3da82a20e3d9286c0be123bdd97373cb187b7b0ed4da0ee5a1e6c9a80b1de7e52ec055e268482b56eacdcf4c0ef
|
7
|
+
data.tar.gz: b6ea3a312f1f8f5f7570b634d8f1ff42cee7e345067c3dbdaf037477c9b62e3e5c40d28a4515bf42a52bf3e506720b7b599dea25351d468001e4c0d17205ce87
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
v4.2.0 (2015-04-18)
|
5
|
+
-------------------
|
6
|
+
|
7
|
+
Features:
|
8
|
+
* Support for Regexp option type #167 (Laurent Arnoud)
|
9
|
+
* Support prefixed `--no-` for explicitly setting boolean options
|
10
|
+
to `false` #168
|
11
|
+
* Better handling of flags with multiple words #169 (Tim Rogers)
|
12
|
+
|
4
13
|
v4.1.0 (2015-04-18)
|
5
14
|
-------------------
|
6
15
|
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Slop is a simple option parser with an easy to remember syntax and friendly API.
|
|
6
6
|
Version 4 of Slop is aimed at Ruby 2.0 or later. Please use
|
7
7
|
[Version 3](https://github.com/leejarvis/slop/tree/v3) for Ruby 1.9 support.
|
8
8
|
|
9
|
-
[](http://travis-ci.org/leejarvis/slop)
|
10
10
|
|
11
11
|
Installation
|
12
12
|
------------
|
@@ -22,19 +22,21 @@ opts = Slop.parse do |o|
|
|
22
22
|
o.integer '--port', 'custom port', default: 80
|
23
23
|
o.bool '-v', '--verbose', 'enable verbose mode'
|
24
24
|
o.bool '-q', '--quiet', 'suppress output (quiet mode)'
|
25
|
+
o.bool '-c', '--check-ssl-certificate', 'check SSL certificate for host'
|
25
26
|
o.on '--version', 'print the version' do
|
26
27
|
puts Slop::VERSION
|
27
28
|
exit
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
ARGV #=> -v --host 192.168.0.1
|
32
|
+
ARGV #=> -v --host 192.168.0.1 --check-ssl-certificate
|
32
33
|
|
33
|
-
opts[:host]
|
34
|
-
opts.verbose?
|
35
|
-
opts.quiet?
|
34
|
+
opts[:host] #=> 192.168.0.1
|
35
|
+
opts.verbose? #=> true
|
36
|
+
opts.quiet? #=> false
|
37
|
+
opts.check_ssl_certificate? #=> true
|
36
38
|
|
37
|
-
opts.to_hash #=> { host: "192.168.0.1", port: 80, verbose: true, quiet: false }
|
39
|
+
opts.to_hash #=> { host: "192.168.0.1", port: 80, verbose: true, quiet: false, check_ssl_certificate: true }
|
38
40
|
```
|
39
41
|
|
40
42
|
Option types
|
@@ -48,6 +50,7 @@ o.bool #=> Slop::BoolOption, no argument, aliased to BooleanOption
|
|
48
50
|
o.integer #=> Slop::IntegerOption, expects an argument, aliased to IntOption
|
49
51
|
o.float #=> Slop::FloatOption, expects an argument
|
50
52
|
o.array #=> Slop::ArrayOption, expects an argument
|
53
|
+
o.regexp #=> Slop::RegexpOption, expects an argument
|
51
54
|
o.null #=> Slop::NullOption, no argument and ignored from `to_hash`
|
52
55
|
o.on #=> alias for o.null
|
53
56
|
```
|
@@ -71,10 +74,10 @@ opts.int "-p", "--port", "a port", default: 80
|
|
71
74
|
opts.separator ""
|
72
75
|
opts.separator "Extra options:"
|
73
76
|
opts.array "--files", "a list of files to import"
|
74
|
-
opts.bool "-v", "--verbose", "enable verbose mode"
|
77
|
+
opts.bool "-v", "--verbose", "enable verbose mode", default: true
|
75
78
|
|
76
79
|
parser = Slop::Parser.new(opts)
|
77
|
-
result = parser.parse(["--hostname", "192.168.0.1"])
|
80
|
+
result = parser.parse(["--hostname", "192.168.0.1", "--no-verbose"])
|
78
81
|
|
79
82
|
result.to_hash #=> { hostname: "192.168.0.1", port: 80,
|
80
83
|
# files: [], verbose: false }
|
data/lib/slop.rb
CHANGED
data/lib/slop/option.rb
CHANGED
@@ -102,7 +102,7 @@ module Slop
|
|
102
102
|
|
103
103
|
# Returns the last key as a symbol. Used in Options.to_hash.
|
104
104
|
def key
|
105
|
-
(config[:key] || flags.last.sub(/\A--?/, '')).to_sym
|
105
|
+
(config[:key] || flags.last.sub(/\A--?/, '')).tr("-", "_").to_sym
|
106
106
|
end
|
107
107
|
|
108
108
|
# Returns true if this option should be displayed in help text.
|
data/lib/slop/parser.rb
CHANGED
@@ -92,6 +92,8 @@ module Slop
|
|
92
92
|
def try_process(flag, arg)
|
93
93
|
if option = matching_option(flag)
|
94
94
|
process(option, arg)
|
95
|
+
elsif flag.start_with?("--no-") && option = matching_option(flag.sub("no-", ""))
|
96
|
+
process(option, false)
|
95
97
|
elsif flag =~ /\A-[^-]/ && flag.size > 2
|
96
98
|
# try and process as a set of grouped short flags. drop(1) removes
|
97
99
|
# the prefixed -, then we add them back to each flag separately.
|
data/lib/slop/result.rb
CHANGED
@@ -33,7 +33,7 @@ module Slop
|
|
33
33
|
|
34
34
|
# Returns an Option if it exists. Ignores any prefixed hyphens.
|
35
35
|
def option(flag)
|
36
|
-
cleaned = -> (f) { f.to_s.sub(/\A--?/, '') }
|
36
|
+
cleaned = -> (f) { f.to_s.sub(/\A--?/, '').tr('_', '-') }
|
37
37
|
options.find do |o|
|
38
38
|
o.flags.any? { |f| cleaned.(f) == cleaned.(flag) }
|
39
39
|
end
|
data/lib/slop/types.rb
CHANGED
@@ -8,12 +8,29 @@ module Slop
|
|
8
8
|
|
9
9
|
# Cast the option argument to true or false.
|
10
10
|
# Override default_value to default to false instead of nil.
|
11
|
-
# This option type does not expect an argument.
|
11
|
+
# This option type does not expect an argument. However, the API
|
12
|
+
# supports value being passed. This is to ensure it can capture
|
13
|
+
# an explicit false value
|
12
14
|
class BoolOption < Option
|
13
|
-
|
15
|
+
attr_accessor :explicit_value
|
16
|
+
|
17
|
+
def call(value)
|
18
|
+
self.explicit_value = value
|
14
19
|
true
|
15
20
|
end
|
16
21
|
|
22
|
+
def value
|
23
|
+
if force_false?
|
24
|
+
false
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def force_false?
|
31
|
+
explicit_value == false
|
32
|
+
end
|
33
|
+
|
17
34
|
def default_value
|
18
35
|
config[:default] || false
|
19
36
|
end
|
@@ -61,6 +78,13 @@ module Slop
|
|
61
78
|
end
|
62
79
|
end
|
63
80
|
|
81
|
+
# Cast the option argument to a Regexp.
|
82
|
+
class RegexpOption < Option
|
83
|
+
def call(value)
|
84
|
+
Regexp.new(value)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
64
88
|
# An option that discards the return value, inherits from Bool
|
65
89
|
# since it does not expect an argument.
|
66
90
|
class NullOption < BoolOption
|
data/test/option_test.rb
CHANGED
@@ -17,6 +17,10 @@ describe Slop::Option do
|
|
17
17
|
assert_equal :foo, option(%w(-f --foo), nil).key
|
18
18
|
end
|
19
19
|
|
20
|
+
it "converts dashes to underscores to make multi-word options symbol-friendly" do
|
21
|
+
assert_equal :foo_bar, option(%w(-f --foo-bar), nil).key
|
22
|
+
end
|
23
|
+
|
20
24
|
it "can be overridden" do
|
21
25
|
assert_equal :bar, option(%w(-f --foo), nil, key: "bar").key
|
22
26
|
end
|
data/test/result_test.rb
CHANGED
@@ -12,16 +12,18 @@ end
|
|
12
12
|
|
13
13
|
describe Slop::Result do
|
14
14
|
before do
|
15
|
-
@options
|
16
|
-
@verbose
|
17
|
-
@name
|
18
|
-
@unused
|
19
|
-
@
|
15
|
+
@options = Slop::Options.new
|
16
|
+
@verbose = @options.bool "-v", "--verbose"
|
17
|
+
@name = @options.string "--name"
|
18
|
+
@unused = @options.string "--unused"
|
19
|
+
@long_option = @options.string "--long-option"
|
20
|
+
@result = @options.parse %w(foo -v --name lee --long-option bar argument)
|
20
21
|
end
|
21
22
|
|
22
23
|
it "increments option count" do
|
23
24
|
# test this here so it's more "full stack"
|
24
25
|
assert_equal 1, @verbose.count
|
26
|
+
assert_equal 1, @long_option.count
|
25
27
|
@result.parser.parse %w(-v --verbose)
|
26
28
|
assert_equal 2, @verbose.count
|
27
29
|
end
|
@@ -51,6 +53,9 @@ describe Slop::Result do
|
|
51
53
|
assert_equal "lee", @result["name"]
|
52
54
|
assert_equal "lee", @result[:name]
|
53
55
|
assert_equal "lee", @result["--name"]
|
56
|
+
assert_equal "bar", @result["long_option"]
|
57
|
+
assert_equal "bar", @result[:long_option]
|
58
|
+
assert_equal "bar", @result["--long-option"]
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
@@ -72,6 +77,7 @@ describe Slop::Result do
|
|
72
77
|
it "checks if options have been used" do
|
73
78
|
assert_equal true, @result.verbose?
|
74
79
|
assert_equal false, @result.unused?
|
80
|
+
assert_equal true, @result.long_option?
|
75
81
|
end
|
76
82
|
end
|
77
83
|
|
@@ -79,6 +85,7 @@ describe Slop::Result do
|
|
79
85
|
it "returns an option by flag" do
|
80
86
|
assert_equal @verbose, @result.option("--verbose")
|
81
87
|
assert_equal @verbose, @result.option("-v")
|
88
|
+
assert_equal @long_option, @result.option("--long-option")
|
82
89
|
end
|
83
90
|
|
84
91
|
it "ignores prefixed hyphens" do
|
@@ -93,7 +100,8 @@ describe Slop::Result do
|
|
93
100
|
|
94
101
|
describe "#to_hash" do
|
95
102
|
it "returns option keys and values" do
|
96
|
-
assert_equal({ verbose: true, name: "lee", unused: nil },
|
103
|
+
assert_equal({ verbose: true, name: "lee", unused: nil, long_option: "bar" },
|
104
|
+
@result.to_hash)
|
97
105
|
end
|
98
106
|
end
|
99
107
|
end
|
data/test/types_test.rb
CHANGED
@@ -2,10 +2,11 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
describe Slop::BoolOption do
|
4
4
|
before do
|
5
|
-
@options
|
6
|
-
@
|
7
|
-
@
|
8
|
-
@
|
5
|
+
@options = Slop::Options.new
|
6
|
+
@verbose = @options.bool "--verbose"
|
7
|
+
@quiet = @options.bool "--quiet"
|
8
|
+
@inversed = @options.bool "--inversed", default: true
|
9
|
+
@result = @options.parse %w(--verbose --no-inversed)
|
9
10
|
end
|
10
11
|
|
11
12
|
it "returns true if used" do
|
@@ -15,6 +16,10 @@ describe Slop::BoolOption do
|
|
15
16
|
it "returns false if not used" do
|
16
17
|
assert_equal false, @result[:quiet]
|
17
18
|
end
|
19
|
+
|
20
|
+
it "can be inversed via --no- prefix" do
|
21
|
+
assert_equal false, @result[:inversed]
|
22
|
+
end
|
18
23
|
end
|
19
24
|
|
20
25
|
describe Slop::IntegerOption do
|
@@ -100,3 +105,16 @@ describe Slop::NullOption do
|
|
100
105
|
assert_equal({}, @result.to_hash)
|
101
106
|
end
|
102
107
|
end
|
108
|
+
|
109
|
+
describe Slop::RegexpOption do
|
110
|
+
before do
|
111
|
+
@options = Slop::Options.new
|
112
|
+
@exclude = @options.regexp "--exclude"
|
113
|
+
@exclude_value = "redirect|news"
|
114
|
+
@result = @options.parse %W(--exclude #{@exclude_value})
|
115
|
+
end
|
116
|
+
|
117
|
+
it "returns the value as a Regexp" do
|
118
|
+
assert_equal Regexp.new(@exclude_value), @result[:exclude]
|
119
|
+
end
|
120
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Jarvis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -98,3 +98,4 @@ test_files:
|
|
98
98
|
- test/result_test.rb
|
99
99
|
- test/test_helper.rb
|
100
100
|
- test/types_test.rb
|
101
|
+
has_rdoc:
|