acclaim 0.2.2 → 0.2.3
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/Gemfile +1 -4
- data/LICENSE.MPL2 +3 -0
- data/acclaim.gemspec +1 -1
- data/lib/acclaim.rb +3 -7
- data/lib/acclaim/command.rb +3 -3
- data/lib/acclaim/command/help.rb +2 -3
- data/lib/acclaim/command/help/template.rb +0 -1
- data/lib/acclaim/command/version.rb +2 -3
- data/lib/acclaim/option.rb +5 -6
- data/lib/acclaim/option/arity.rb +10 -5
- data/lib/acclaim/option/parser.rb +1 -28
- data/lib/acclaim/option/parser/error.rb +35 -0
- data/lib/acclaim/option/parser/regexp.rb +4 -0
- data/lib/acclaim/option/type.rb +3 -6
- data/lib/acclaim/version.rb +1 -1
- data/spec/acclaim/option/arity_spec.rb +36 -0
- data/spec/acclaim/option_spec.rb +5 -5
- metadata +28 -12
- data/LICENSE.GPLv3 +0 -14
data/Gemfile
CHANGED
@@ -2,10 +2,7 @@ source :rubygems
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
{
|
6
|
-
ribbon: '~/projects/ribbon',
|
7
|
-
rookie: '~/projects/rookie'
|
8
|
-
}.each do |project, path|
|
5
|
+
{ ribbon: '~/projects/ribbon', rookie: '~/projects/rookie' }.each do |project, path|
|
9
6
|
path = File.expand_path path
|
10
7
|
gem project.to_s, path: path if Dir.exists? path
|
11
8
|
end
|
data/LICENSE.MPL2
ADDED
data/acclaim.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new('acclaim') do |gem|
|
|
14
14
|
gem.author = 'Matheus Afonso Martins Moreira'
|
15
15
|
gem.email = 'matheus.a.m.moreira@gmail.com'
|
16
16
|
|
17
|
-
gem.files
|
17
|
+
gem.files = `git ls-files`.split "\n"
|
18
18
|
|
19
19
|
gem.add_runtime_dependency 'ribbon'
|
20
20
|
|
data/lib/acclaim.rb
CHANGED
data/lib/acclaim/command.rb
CHANGED
@@ -70,7 +70,7 @@ module Acclaim
|
|
70
70
|
end
|
71
71
|
|
72
72
|
# Same as #option.
|
73
|
-
alias
|
73
|
+
alias opt option
|
74
74
|
|
75
75
|
# The block which is executed when this command is called. It is given 2
|
76
76
|
# parameters; the first is an Ribbon instance which can be queried for
|
@@ -80,7 +80,7 @@ module Acclaim
|
|
80
80
|
end
|
81
81
|
|
82
82
|
# Same as #action.
|
83
|
-
alias
|
83
|
+
alias when_called action
|
84
84
|
|
85
85
|
# Adds help subcommand and options to this command.
|
86
86
|
def help(*args)
|
@@ -135,7 +135,7 @@ module Acclaim
|
|
135
135
|
end
|
136
136
|
|
137
137
|
# Same as #execute.
|
138
|
-
alias
|
138
|
+
alias call execute
|
139
139
|
|
140
140
|
# True if this is a top-level command.
|
141
141
|
def root?
|
data/lib/acclaim/command/help.rb
CHANGED
@@ -7,7 +7,6 @@ module Acclaim
|
|
7
7
|
# Module which adds help support to a command.
|
8
8
|
module Help
|
9
9
|
|
10
|
-
# The class methods.
|
11
10
|
class << self
|
12
11
|
|
13
12
|
# Creates a help subcommand that inherits from the given +base+ command
|
@@ -63,8 +62,8 @@ module Acclaim
|
|
63
62
|
# [:switches] The switches used when creating the help option.
|
64
63
|
def add_options_to!(*args)
|
65
64
|
opts, command = args.extract_ribbon!, args.shift
|
66
|
-
switches = opts.switches? %w(-h --help)
|
67
|
-
description = opts.description? 'Show usage information and exit.'
|
65
|
+
switches = opts.switches? { %w(-h --help) }
|
66
|
+
description = opts.description? { 'Show usage information and exit.' }
|
68
67
|
command.option :acclaim_help, *switches, description
|
69
68
|
end
|
70
69
|
|
@@ -6,7 +6,6 @@ module Acclaim
|
|
6
6
|
# Module which adds version query support to a command.
|
7
7
|
module Version
|
8
8
|
|
9
|
-
# The class methods.
|
10
9
|
class << self
|
11
10
|
|
12
11
|
# Creates a <tt>version</tt> subcommand that inherits from the given
|
@@ -43,8 +42,8 @@ module Acclaim
|
|
43
42
|
# [:switches] The switches used when creating the version option.
|
44
43
|
def add_options_to!(*args)
|
45
44
|
opts, command = args.extract_ribbon!, args.shift
|
46
|
-
switches = opts.switches? %w(-v --version)
|
47
|
-
description = opts.description? 'Show version and exit.'
|
45
|
+
switches = opts.switches? { %w(-v --version) }
|
46
|
+
description = opts.description? { 'Show version and exit.' }
|
48
47
|
command.option :acclaim_version, *switches, description
|
49
48
|
end
|
50
49
|
|
data/lib/acclaim/option.rb
CHANGED
@@ -128,19 +128,18 @@ module Acclaim
|
|
128
128
|
|
129
129
|
# Returns +true+ if this option takes no arguments.
|
130
130
|
def flag?
|
131
|
-
|
131
|
+
arity and arity.none?
|
132
132
|
end
|
133
133
|
|
134
134
|
# Same as <tt>flag?</tt>
|
135
|
-
alias
|
135
|
+
alias bool? flag?
|
136
136
|
|
137
137
|
# Same as <tt>flag?</tt>
|
138
|
-
alias
|
138
|
+
alias boolean? flag?
|
139
139
|
|
140
140
|
# Same as <tt>flag?</tt>
|
141
|
-
alias
|
141
|
+
alias switch? flag?
|
142
142
|
|
143
|
-
# The class methods.
|
144
143
|
class << self
|
145
144
|
|
146
145
|
# Derives a name from the given key's string representation. All
|
@@ -150,7 +149,7 @@ module Acclaim
|
|
150
149
|
# resulting name is not a valid switch, a +NameError+ will be raised.
|
151
150
|
def name_from(key)
|
152
151
|
name = key.to_s
|
153
|
-
raise ArgumentError, "Can't derive name from empty
|
152
|
+
raise ArgumentError, "Can't derive name from empty key." if name.empty?
|
154
153
|
name = (name.length == 1 ? '-' : '--') + name
|
155
154
|
name.gsub! '_', '-'
|
156
155
|
raise NameError, "Derived name is invalid: #{name}" unless name =~ Parser::Regexp::SWITCH
|
data/lib/acclaim/option/arity.rb
CHANGED
@@ -12,7 +12,7 @@ module Acclaim
|
|
12
12
|
attr_accessor :optional
|
13
13
|
|
14
14
|
# Same as +minimum+.
|
15
|
-
alias
|
15
|
+
alias required minimum
|
16
16
|
|
17
17
|
# Initializes this arity with a number of required parameters and a number
|
18
18
|
# of optional parameters. If the latter is less than zero, then it means
|
@@ -27,6 +27,11 @@ module Acclaim
|
|
27
27
|
optional.zero? and minimum == n
|
28
28
|
end
|
29
29
|
|
30
|
+
# Returns +true+ if the option takes no parameters.
|
31
|
+
def none?
|
32
|
+
only? 0
|
33
|
+
end
|
34
|
+
|
30
35
|
# Returns +true+ if the option can take an infinite number of arguments.
|
31
36
|
def unlimited?
|
32
37
|
optional < 0
|
@@ -52,10 +57,10 @@ module Acclaim
|
|
52
57
|
end
|
53
58
|
|
54
59
|
# Same as +to_a+.
|
55
|
-
alias
|
60
|
+
alias to_ary to_a
|
56
61
|
|
57
62
|
# Same as +to_a+.
|
58
|
-
alias
|
63
|
+
alias to_array to_a
|
59
64
|
|
60
65
|
# Equivalent to <tt>to_a.hash</tt>.
|
61
66
|
def hash
|
@@ -72,10 +77,10 @@ module Acclaim
|
|
72
77
|
end
|
73
78
|
|
74
79
|
# Same as <tt>==</tt>
|
75
|
-
alias
|
80
|
+
alias eql? ==
|
76
81
|
|
77
82
|
# Same as <tt>==</tt>
|
78
|
-
alias
|
83
|
+
alias === ==
|
79
84
|
|
80
85
|
# Returns a string in the following format:
|
81
86
|
#
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'acclaim/option/parser/error'
|
1
2
|
require 'acclaim/option/parser/regexp'
|
2
3
|
require 'ribbon'
|
3
4
|
|
@@ -9,34 +10,6 @@ module Acclaim
|
|
9
10
|
|
10
11
|
include Parser::Regexp
|
11
12
|
|
12
|
-
# Errors raised by the parser.
|
13
|
-
class Error < StandardError
|
14
|
-
|
15
|
-
# Raises an Error with the following error message:
|
16
|
-
#
|
17
|
-
# Wrong number of arguments (#{actual} for #{minimum})
|
18
|
-
def self.raise_wrong_arg_number(actual, minimum, optional)
|
19
|
-
raise self, "Wrong number of arguments (#{actual} for #{minimum})"
|
20
|
-
end
|
21
|
-
|
22
|
-
# Raises an Error with the following error message:
|
23
|
-
#
|
24
|
-
# Missing required argument (#{option.names.join '|'})
|
25
|
-
def self.raise_missing_required(option)
|
26
|
-
names = option.names.join '|'
|
27
|
-
raise self, "Missing required argument (#{names})"
|
28
|
-
end
|
29
|
-
|
30
|
-
# Raises an error with the following error message:
|
31
|
-
#
|
32
|
-
# Multiple instances of [#{options.names.join ''}] encountered
|
33
|
-
def self.raise_multiple(option)
|
34
|
-
names = option.names.join '|'
|
35
|
-
raise self, "Multiple instances of [#{names}] encountered"
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
13
|
# The argument array to parse.
|
41
14
|
attr_accessor :argv
|
42
15
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Acclaim
|
2
|
+
class Option
|
3
|
+
class Parser
|
4
|
+
|
5
|
+
# Errors raised by the parser.
|
6
|
+
class Error < StandardError
|
7
|
+
|
8
|
+
# Raises an Error with the following error message:
|
9
|
+
#
|
10
|
+
# Wrong number of arguments (#{actual} for #{minimum})
|
11
|
+
def self.raise_wrong_arg_number(actual, minimum, optional)
|
12
|
+
raise self, "Wrong number of arguments (#{actual} for #{minimum})"
|
13
|
+
end
|
14
|
+
|
15
|
+
# Raises an Error with the following error message:
|
16
|
+
#
|
17
|
+
# Missing required argument (#{option.names.join '|'})
|
18
|
+
def self.raise_missing_required(option)
|
19
|
+
names = option.names.join '|'
|
20
|
+
raise self, "Missing required argument (#{names})"
|
21
|
+
end
|
22
|
+
|
23
|
+
# Raises an error with the following error message:
|
24
|
+
#
|
25
|
+
# Multiple instances of [#{options.names.join ''}] encountered
|
26
|
+
def self.raise_multiple(option)
|
27
|
+
names = option.names.join '|'
|
28
|
+
raise self, "Multiple instances of [#{names}] encountered"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -12,6 +12,8 @@ module Acclaim
|
|
12
12
|
# <tt>'-mult'</tt> should match MULTIPLE_SHORT_SWITCHES, and will be
|
13
13
|
# split into <tt>%w(-m -u -l -t)</tt>, which in turn should match this
|
14
14
|
# regular expression.
|
15
|
+
#
|
16
|
+
# \w is not used because it matches digits.
|
15
17
|
SHORT_SWITCH = /\A-[a-zA-Z_]\Z/.freeze
|
16
18
|
|
17
19
|
# Regular expression for a long option switch.
|
@@ -24,6 +26,8 @@ module Acclaim
|
|
24
26
|
# switch.
|
25
27
|
#
|
26
28
|
# Examples: <tt>-xvf; -abc; -de_f</tt>
|
29
|
+
#
|
30
|
+
# \w is not used because it matches digits.
|
27
31
|
MULTIPLE_SHORT_SWITCHES = /\A-[a-zA-Z_]{2,}\Z/.freeze
|
28
32
|
|
29
33
|
# Regular expression for a long switch connected to its parameters with
|
data/lib/acclaim/option/type.rb
CHANGED
@@ -59,9 +59,6 @@ module Acclaim
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
require 'acclaim/option/type/
|
64
|
-
|
65
|
-
require 'acclaim/option/type/symbol'
|
66
|
-
require 'acclaim/option/type/time'
|
67
|
-
require 'acclaim/option/type/uri'
|
62
|
+
%w(date date_time string symbol time uri).each do |type|
|
63
|
+
require type.prepend 'acclaim/option/type/'
|
64
|
+
end
|
data/lib/acclaim/version.rb
CHANGED
@@ -24,6 +24,12 @@ describe Acclaim::Option::Arity do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
describe '#none?' do
|
28
|
+
it 'should return true' do
|
29
|
+
subject.none?.should be_true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
27
33
|
describe '#unlimited?' do
|
28
34
|
it 'should return false' do
|
29
35
|
subject.unlimited?.should be_false
|
@@ -61,6 +67,12 @@ describe Acclaim::Option::Arity do
|
|
61
67
|
end
|
62
68
|
end
|
63
69
|
|
70
|
+
describe '#none?' do
|
71
|
+
it 'should return false' do
|
72
|
+
subject.none?.should be_false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
64
76
|
describe '#unlimited?' do
|
65
77
|
it 'should return false' do
|
66
78
|
subject.unlimited?.should be_false
|
@@ -99,6 +111,12 @@ describe Acclaim::Option::Arity do
|
|
99
111
|
end
|
100
112
|
end
|
101
113
|
|
114
|
+
describe '#none?' do
|
115
|
+
it 'should return false' do
|
116
|
+
subject.none?.should be_false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
102
120
|
describe '#unlimited?' do
|
103
121
|
it 'should return true' do
|
104
122
|
subject.unlimited?.should be_true
|
@@ -138,6 +156,12 @@ describe Acclaim::Option::Arity do
|
|
138
156
|
end
|
139
157
|
end
|
140
158
|
|
159
|
+
describe '#none?' do
|
160
|
+
it 'should return false' do
|
161
|
+
subject.none?.should be_false
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
141
165
|
describe '#unlimited?' do
|
142
166
|
it 'should return false' do
|
143
167
|
subject.unlimited?.should be_false
|
@@ -175,6 +199,12 @@ describe Acclaim::Option::Arity do
|
|
175
199
|
end
|
176
200
|
end
|
177
201
|
|
202
|
+
describe '#none?' do
|
203
|
+
it 'should return false' do
|
204
|
+
subject.none?.should be_false
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
178
208
|
describe '#unlimited?' do
|
179
209
|
it 'should return false' do
|
180
210
|
subject.unlimited?.should be_false
|
@@ -213,6 +243,12 @@ describe Acclaim::Option::Arity do
|
|
213
243
|
end
|
214
244
|
end
|
215
245
|
|
246
|
+
describe '#none?' do
|
247
|
+
it 'should return false' do
|
248
|
+
subject.none?.should be_false
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
216
252
|
describe '#unlimited?' do
|
217
253
|
it 'should return true' do
|
218
254
|
subject.unlimited?.should be_true
|
data/spec/acclaim/option_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe Acclaim::Option do
|
|
18
18
|
context 'when given multiple strings' do
|
19
19
|
let(:switches) { %w(-s --switch) }
|
20
20
|
let(:description) { 'Description' }
|
21
|
-
let(:args) { [switches, description]
|
21
|
+
let(:args) { [*switches, description] }
|
22
22
|
|
23
23
|
it 'should find the switches' do
|
24
24
|
subject.names.should == switches
|
@@ -126,7 +126,7 @@ describe Acclaim::Option do
|
|
126
126
|
let(:block) { proc { |*args| p args } }
|
127
127
|
|
128
128
|
it 'should have a custom handler' do
|
129
|
-
subject.handler.should
|
129
|
+
subject.handler.should respond_to(:call)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
end
|
@@ -140,7 +140,7 @@ describe Acclaim::Option do
|
|
140
140
|
let!(:params) { %w(a b c d) }
|
141
141
|
|
142
142
|
it 'should convert the parameters to strings' do
|
143
|
-
converted.should == params
|
143
|
+
converted.should == params
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
@@ -149,7 +149,7 @@ describe Acclaim::Option do
|
|
149
149
|
let(:params) { %w(a b c d) }
|
150
150
|
|
151
151
|
it 'should convert the parameters to strings' do
|
152
|
-
converted.should == params
|
152
|
+
converted.should == params
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
@@ -157,7 +157,7 @@ describe Acclaim::Option do
|
|
157
157
|
let(:type) { Symbol }
|
158
158
|
let(:params) { %w(a b c d) }
|
159
159
|
|
160
|
-
it 'should convert the parameters to
|
160
|
+
it 'should convert the parameters to symbols' do
|
161
161
|
converted.should == params.map(&:to_sym)
|
162
162
|
end
|
163
163
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acclaim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
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-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ribbon
|
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: '0'
|
22
22
|
type: :runtime
|
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: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
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'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rookie
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
description: Command-line option parser and command interface.
|
48
63
|
email: matheus.a.m.moreira@gmail.com
|
49
64
|
executables: []
|
@@ -53,7 +68,7 @@ files:
|
|
53
68
|
- .gitignore
|
54
69
|
- .rvmrc
|
55
70
|
- Gemfile
|
56
|
-
- LICENSE.
|
71
|
+
- LICENSE.MPL2
|
57
72
|
- README.markdown
|
58
73
|
- Rakefile
|
59
74
|
- acclaim.gemspec
|
@@ -67,6 +82,7 @@ files:
|
|
67
82
|
- lib/acclaim/option.rb
|
68
83
|
- lib/acclaim/option/arity.rb
|
69
84
|
- lib/acclaim/option/parser.rb
|
85
|
+
- lib/acclaim/option/parser/error.rb
|
70
86
|
- lib/acclaim/option/parser/regexp.rb
|
71
87
|
- lib/acclaim/option/type.rb
|
72
88
|
- lib/acclaim/option/type/date.rb
|
@@ -95,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
111
|
version: '0'
|
96
112
|
segments:
|
97
113
|
- 0
|
98
|
-
hash: -
|
114
|
+
hash: -3961771875420064857
|
99
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
116
|
none: false
|
101
117
|
requirements:
|
@@ -104,10 +120,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
120
|
version: '0'
|
105
121
|
segments:
|
106
122
|
- 0
|
107
|
-
hash: -
|
123
|
+
hash: -3961771875420064857
|
108
124
|
requirements: []
|
109
125
|
rubyforge_project:
|
110
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.21
|
111
127
|
signing_key:
|
112
128
|
specification_version: 3
|
113
129
|
summary: Command-line option parser and command interface.
|
data/LICENSE.GPLv3
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
Copyright © 2011 Matheus Afonso Martins Moreira
|
2
|
-
|
3
|
-
This program is free software: you can redistribute it and/or modify
|
4
|
-
it under the terms of the GNU General Public License as published by
|
5
|
-
the Free Software Foundation, either version 3 of the License, or
|
6
|
-
(at your option) any later version.
|
7
|
-
|
8
|
-
This program is distributed in the hope that it will be useful,
|
9
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
-
GNU General Public License for more details.
|
12
|
-
|
13
|
-
You should have received a copy of the GNU General Public License
|
14
|
-
along with this program. If not, see <http://www.gnu.org/licenses/>.
|