clive 1.1.0 → 1.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.
- data/lib/clive/error.rb +14 -10
- data/lib/clive/option/runner.rb +18 -2
- data/lib/clive/struct_hash.rb +5 -5
- data/lib/clive/type/definitions.rb +3 -2
- data/lib/clive/version.rb +1 -1
- data/spec/clive/option/runner_spec.rb +22 -2
- data/spec/clive/struct_hash_spec.rb +7 -2
- data/spec/clive/type/definitions_spec.rb +3 -0
- metadata +17 -8
data/lib/clive/error.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
unless defined?(KeyError)
|
2
|
+
class KeyError < IndexError; end
|
3
|
+
end
|
4
|
+
|
1
5
|
class Clive
|
2
6
|
|
3
|
-
# For general errors with Clive. It stripts most of the backtrace which
|
7
|
+
# For general errors with Clive. It stripts most of the backtrace which
|
4
8
|
# you don't really want, and allows you to set nice error messages
|
5
|
-
# using {.reason}. Arguments can be passed and then used in messages by
|
9
|
+
# using {.reason}. Arguments can be passed and then used in messages by
|
6
10
|
# referencing with +#n+ tokens, where +n+ is the index of the argument.
|
7
11
|
#
|
8
12
|
# A lot of this is pulled from OptionParser::ParseError see
|
@@ -18,13 +22,13 @@ class Clive
|
|
18
22
|
#
|
19
23
|
class Error < StandardError
|
20
24
|
attr_accessor :args
|
21
|
-
|
25
|
+
|
22
26
|
# @param args
|
23
27
|
# Arguments that can be accessed with '#n' in {.reason}.
|
24
28
|
def initialize(*args)
|
25
29
|
@args = args
|
26
30
|
end
|
27
|
-
|
31
|
+
|
28
32
|
# Removes all references to files which are not the file being run
|
29
33
|
# unless in $DEBUG mode.
|
30
34
|
def self.filter_backtrace(array)
|
@@ -33,22 +37,22 @@ class Clive
|
|
33
37
|
end
|
34
38
|
array
|
35
39
|
end
|
36
|
-
|
40
|
+
|
37
41
|
# Set the reason for the error class.
|
38
42
|
# @param str [String]
|
39
43
|
def self.reason(str)
|
40
44
|
@reason = str
|
41
45
|
end
|
42
|
-
|
46
|
+
|
43
47
|
# Accessor for the reason set with {.reason}.
|
44
48
|
def self._reason
|
45
49
|
@reason
|
46
50
|
end
|
47
|
-
|
51
|
+
|
48
52
|
def set_backtrace(array)
|
49
53
|
super(self.class.filter_backtrace(array))
|
50
54
|
end
|
51
|
-
|
55
|
+
|
52
56
|
# Build the message by substituting the arguments into the reason.
|
53
57
|
def message
|
54
58
|
self.class._reason.gsub(/#\d/) do |i|
|
@@ -61,6 +65,6 @@ class Clive
|
|
61
65
|
end
|
62
66
|
end
|
63
67
|
alias_method :to_s, :message
|
64
|
-
|
68
|
+
|
65
69
|
end
|
66
|
-
end
|
70
|
+
end
|
data/lib/clive/option/runner.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
class Clive
|
2
2
|
|
3
3
|
# Methods for modifying a state object. Requires that the instance variable
|
4
|
-
# +@state+ exists and that it responds to +#
|
4
|
+
# +@state+ exists and that it responds to +#[]+, +#store+ and +#key?+.
|
5
5
|
module StateActions
|
6
6
|
|
7
|
+
# Gets the value for the key, returns nil if the key does not exist.
|
8
|
+
#
|
7
9
|
# @param key [Symbol]
|
8
10
|
#
|
9
11
|
# @example
|
@@ -13,9 +15,23 @@ class Clive
|
|
13
15
|
# end
|
14
16
|
#
|
15
17
|
def get(key)
|
16
|
-
@state
|
18
|
+
@state[key]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Gets the value for the key, raises an error if the key does not exist.
|
22
|
+
#
|
23
|
+
# @param key [Symbol]
|
24
|
+
# @raise [KeyError]
|
25
|
+
def get!(key)
|
26
|
+
if has?(key)
|
27
|
+
get(key)
|
28
|
+
else
|
29
|
+
raise KeyError, "key not found: #{key}"
|
30
|
+
end
|
17
31
|
end
|
18
32
|
|
33
|
+
# Sets the key to the value given.
|
34
|
+
#
|
19
35
|
# @param key [Symbol]
|
20
36
|
# @param value [Object]
|
21
37
|
#
|
data/lib/clive/struct_hash.rb
CHANGED
@@ -45,13 +45,13 @@ class Clive
|
|
45
45
|
@data[keys.first] = val
|
46
46
|
end
|
47
47
|
|
48
|
-
# Gets the value from the StructHash corresponding to the key given.
|
48
|
+
# Gets the value from the StructHash corresponding to the key given. Returns
|
49
|
+
# nil if the key given does not exist.
|
49
50
|
#
|
50
51
|
# @param key [Symbol]
|
51
|
-
def
|
52
|
-
@data
|
52
|
+
def [](key)
|
53
|
+
@data[@aliases[key]]
|
53
54
|
end
|
54
|
-
alias_method :[], :fetch
|
55
55
|
|
56
56
|
# Checks whether the StructHash contains an entry for the key given.
|
57
57
|
def key?(key)
|
@@ -87,7 +87,7 @@ class Clive
|
|
87
87
|
# Otherwise calls super.
|
88
88
|
def method_missing(sym, *args, &block)
|
89
89
|
if key?(sym)
|
90
|
-
|
90
|
+
self[sym]
|
91
91
|
elsif sym.to_s[-1..-1] == "?"
|
92
92
|
key? sym.to_s[0..-2].to_sym
|
93
93
|
else
|
@@ -158,8 +158,9 @@ class Clive
|
|
158
158
|
|
159
159
|
def typecast(arg)
|
160
160
|
parts = arg.split('/')
|
161
|
-
|
162
|
-
|
161
|
+
parts << '' if parts.size < 3
|
162
|
+
|
163
|
+
_, arg, mods = parts
|
163
164
|
mods = mods.split('').map {|a| OPTS[a] }.inject{|a,e| a | e }
|
164
165
|
|
165
166
|
::Regexp.new arg, mods
|
data/lib/clive/version.rb
CHANGED
@@ -14,9 +14,29 @@ describe Clive::Option::Runner do
|
|
14
14
|
|
15
15
|
describe '#get' do
|
16
16
|
it 'gets a value from state' do
|
17
|
+
r = nil
|
18
|
+
subject._run({}, {:a => 1}, proc { r = get(:a) })
|
19
|
+
r.must_equal 1
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns nil if key does not exist' do
|
23
|
+
r = true
|
24
|
+
subject._run({}, {:a => 1}, proc { r = get(:b) })
|
25
|
+
r.must_equal nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#get!' do
|
30
|
+
it 'gets a value from the state' do
|
31
|
+
r = nil
|
32
|
+
subject._run({}, {:a => 1}, proc { r = get!(:a) })
|
33
|
+
r.must_equal 1
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'raises an error if key does not exist' do
|
17
37
|
this {
|
18
|
-
subject._run({}, {:a => 1}, proc {
|
19
|
-
}.
|
38
|
+
subject._run({}, {:a => 1}, proc { r = get!(:b) })
|
39
|
+
}.must_raise KeyError
|
20
40
|
end
|
21
41
|
end
|
22
42
|
|
@@ -6,9 +6,14 @@ describe Clive::StructHash do
|
|
6
6
|
subject { Clive::StructHash }
|
7
7
|
|
8
8
|
describe '#[]' do
|
9
|
+
let(:s) { subject.new(:a => 1) }
|
10
|
+
|
9
11
|
it 'gets the value' do
|
10
|
-
|
11
|
-
|
12
|
+
s[:a].must_equal 1
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'returns nil if key does not exist' do
|
16
|
+
s[:b].must_equal nil
|
12
17
|
end
|
13
18
|
end
|
14
19
|
|
@@ -305,6 +305,9 @@ describe Clive::Type::Regexp do
|
|
305
305
|
|
306
306
|
describe '#typecast' do
|
307
307
|
it 'returns a Regexp' do
|
308
|
+
subject.typecast('/a|b/').must_be_kind_of Regexp
|
309
|
+
subject.typecast('/a|b/').must_equal /a|b/
|
310
|
+
|
308
311
|
subject.typecast('/a/i').must_be_kind_of Regexp
|
309
312
|
subject.typecast('/a/ix').must_equal /a/ix
|
310
313
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '2.6'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.6'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: mocha
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: '0.10'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.10'
|
36
46
|
description: ! " Clive provides a DSL for building command line interfaces. It
|
37
47
|
allows \n you to define commands and options, which can also take arguments,
|
38
48
|
\n and then runs the correct stuff!\n"
|
@@ -100,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
110
|
version: '0'
|
101
111
|
requirements: []
|
102
112
|
rubyforge_project:
|
103
|
-
rubygems_version: 1.8.
|
113
|
+
rubygems_version: 1.8.23
|
104
114
|
signing_key:
|
105
115
|
specification_version: 3
|
106
116
|
summary: A DSL for building command line interfaces.
|
@@ -123,4 +133,3 @@ test_files:
|
|
123
133
|
- spec/extras/expectations.rb
|
124
134
|
- spec/extras/focus.rb
|
125
135
|
- spec/helper.rb
|
126
|
-
has_rdoc:
|