clive 0.2.1 → 0.2.2
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/VERSION +1 -1
- data/clive.gemspec +5 -3
- data/lib/clive.rb +43 -0
- data/lib/clive/commands.rb +2 -1
- data/test/helper.rb +2 -1
- data/test/test_exceptions.rb +28 -0
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/clive.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{clive}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joshua Hawxwell"]
|
@@ -33,7 +33,8 @@ Gem::Specification.new do |s|
|
|
33
33
|
"lib/clive/tokens.rb",
|
34
34
|
"test/bin_test",
|
35
35
|
"test/helper.rb",
|
36
|
-
"test/test_clive.rb"
|
36
|
+
"test/test_clive.rb",
|
37
|
+
"test/test_exceptions.rb"
|
37
38
|
]
|
38
39
|
s.homepage = %q{http://github.com/hawx/clive}
|
39
40
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -42,7 +43,8 @@ Gem::Specification.new do |s|
|
|
42
43
|
s.summary = %q{Imagine if optparse and gli had a son called clive.}
|
43
44
|
s.test_files = [
|
44
45
|
"test/helper.rb",
|
45
|
-
"test/test_clive.rb"
|
46
|
+
"test/test_clive.rb",
|
47
|
+
"test/test_exceptions.rb"
|
46
48
|
]
|
47
49
|
|
48
50
|
if s.respond_to? :specification_version then
|
data/lib/clive.rb
CHANGED
@@ -21,6 +21,49 @@ require 'clive/booleans'
|
|
21
21
|
#
|
22
22
|
class Clive
|
23
23
|
|
24
|
+
# general problem with input
|
25
|
+
class ParseError < StandardError
|
26
|
+
attr_accessor :args, :reason
|
27
|
+
|
28
|
+
def initialize(*args)
|
29
|
+
@args = args
|
30
|
+
@reason = "parse error"
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.filter_backtrace(array)
|
34
|
+
unless $DEBUG
|
35
|
+
array = [$0]
|
36
|
+
end
|
37
|
+
array
|
38
|
+
end
|
39
|
+
|
40
|
+
def set_backtrace(array)
|
41
|
+
super(self.class.filter_backtrace(array))
|
42
|
+
end
|
43
|
+
|
44
|
+
def message
|
45
|
+
@reason + ': ' + args.join(' ')
|
46
|
+
end
|
47
|
+
alias_method :to_s, :message
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# a flag has a missing argument
|
52
|
+
class MissingArgument < ParseError
|
53
|
+
def initialize(*args)
|
54
|
+
@args = args
|
55
|
+
@reason = "missing argument"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# a option that wasn't defined has been found
|
60
|
+
class InvalidOption < ParseError
|
61
|
+
def initialize(*args)
|
62
|
+
@args = args
|
63
|
+
@reason = "invalid option"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
24
67
|
attr_accessor :base
|
25
68
|
|
26
69
|
def initialize(&block)
|
data/lib/clive/commands.rb
CHANGED
@@ -82,6 +82,7 @@ class Clive
|
|
82
82
|
when :switch
|
83
83
|
v.run
|
84
84
|
when :flag
|
85
|
+
raise MissingArgument.new(v.long||v.short) unless i[2]
|
85
86
|
v.run(i[2])
|
86
87
|
when :argument
|
87
88
|
r << v
|
@@ -138,7 +139,7 @@ class Clive
|
|
138
139
|
tokens << [:flag, flag]
|
139
140
|
pre -= [[k, v]] unless @base
|
140
141
|
else
|
141
|
-
raise
|
142
|
+
raise InvalidOption.new(v) if @base
|
142
143
|
end
|
143
144
|
when :word
|
144
145
|
if tokens.last
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'test/unit'
|
3
2
|
require 'shoulda'
|
3
|
+
require 'rr'
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
7
|
require 'clive'
|
8
8
|
|
9
9
|
class Test::Unit::TestCase
|
10
|
+
include RR::Adapters::TestUnit
|
10
11
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestClive < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "When given bad input" do
|
6
|
+
|
7
|
+
should "warn of missing arguments" do
|
8
|
+
c = Clive.new do
|
9
|
+
flag(:hello) {}
|
10
|
+
end
|
11
|
+
assert_raise Clive::MissingArgument do
|
12
|
+
c.parse(["--hello"])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
should "warn of invalid options" do
|
17
|
+
c = Clive.new do
|
18
|
+
switch(:hello) {}
|
19
|
+
end
|
20
|
+
assert_raise Clive::InvalidOption do
|
21
|
+
c.parse(["--what"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hawxwell
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- test/bin_test
|
74
74
|
- test/helper.rb
|
75
75
|
- test/test_clive.rb
|
76
|
+
- test/test_exceptions.rb
|
76
77
|
has_rdoc: true
|
77
78
|
homepage: http://github.com/hawx/clive
|
78
79
|
licenses: []
|
@@ -110,3 +111,4 @@ summary: Imagine if optparse and gli had a son called clive.
|
|
110
111
|
test_files:
|
111
112
|
- test/helper.rb
|
112
113
|
- test/test_clive.rb
|
114
|
+
- test/test_exceptions.rb
|