cri 2.0a2 → 2.0a3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cri.rb +1 -1
- data/lib/cri/command.rb +16 -6
- data/lib/cri/command_dsl.rb +2 -2
- data/test/test_command.rb +54 -7
- data/test/test_command_dsl.rb +3 -3
- metadata +1 -1
data/lib/cri.rb
CHANGED
data/lib/cri/command.rb
CHANGED
@@ -76,10 +76,12 @@ module Cri
|
|
76
76
|
# @todo Document
|
77
77
|
def self.define(string=nil, &block)
|
78
78
|
dsl = Cri::CommandDSL.new
|
79
|
-
if
|
79
|
+
if string
|
80
|
+
dsl.instance_eval(string)
|
81
|
+
elsif block.arity == 0
|
80
82
|
dsl.instance_eval(&block)
|
81
83
|
else
|
82
|
-
|
84
|
+
block.call(dsl)
|
83
85
|
end
|
84
86
|
dsl.command
|
85
87
|
end
|
@@ -105,7 +107,11 @@ module Cri
|
|
105
107
|
# @todo Document
|
106
108
|
def modify(&block)
|
107
109
|
dsl = Cri::CommandDSL.new(self)
|
108
|
-
|
110
|
+
if block.arity == 0
|
111
|
+
dsl.instance_eval(&block)
|
112
|
+
else
|
113
|
+
block.call(dsl)
|
114
|
+
end
|
109
115
|
self
|
110
116
|
end
|
111
117
|
|
@@ -128,7 +134,11 @@ module Cri
|
|
128
134
|
# Execute DSL
|
129
135
|
dsl = Cri::CommandDSL.new
|
130
136
|
dsl.name name unless name.nil?
|
131
|
-
|
137
|
+
if block.arity == 0
|
138
|
+
dsl.instance_eval(&block)
|
139
|
+
else
|
140
|
+
block.call(dsl)
|
141
|
+
end
|
132
142
|
|
133
143
|
# Create command
|
134
144
|
cmd = dsl.command
|
@@ -189,7 +199,7 @@ module Cri
|
|
189
199
|
if @block.nil?
|
190
200
|
raise "No implementation available for '#{self.name}'"
|
191
201
|
end
|
192
|
-
|
202
|
+
block.call(global_opts, args, self)
|
193
203
|
else
|
194
204
|
# Parse up to command name
|
195
205
|
stuff = partition(opts_and_args)
|
@@ -284,7 +294,7 @@ module Cri
|
|
284
294
|
opts.each_pair do |key, value|
|
285
295
|
opt_def = global_option_definitions.find { |o| o[:long] == key.to_s }
|
286
296
|
block = opt_def[:block]
|
287
|
-
|
297
|
+
block.call(value, self) if block
|
288
298
|
end
|
289
299
|
end
|
290
300
|
|
data/lib/cri/command_dsl.rb
CHANGED
@@ -73,9 +73,9 @@ module Cri
|
|
73
73
|
|
74
74
|
# @todo Document
|
75
75
|
def run(&block)
|
76
|
-
|
76
|
+
unless block.arity != 2 || block.arity != 3
|
77
77
|
raise ArgumentError,
|
78
|
-
"The block given to Cri::Command#run expects
|
78
|
+
"The block given to Cri::Command#run expects two or three args"
|
79
79
|
end
|
80
80
|
|
81
81
|
@command.block = block
|
data/test/test_command.rb
CHANGED
@@ -9,16 +9,16 @@ class Cri::CommandTestCase < Cri::TestCase
|
|
9
9
|
summary 'does stuff'
|
10
10
|
description 'This command does a lot of stuff.'
|
11
11
|
|
12
|
-
option :a, :aaa, 'opt a', :argument => :optional do |value|
|
13
|
-
$stdout.puts "#{name}:#{value}"
|
12
|
+
option :a, :aaa, 'opt a', :argument => :optional do |value, cmd|
|
13
|
+
$stdout.puts "#{cmd.name}:#{value}"
|
14
14
|
end
|
15
15
|
required :b, :bbb, 'opt b'
|
16
16
|
optional :c, :ccc, 'opt c'
|
17
17
|
flag :d, :ddd, 'opt d'
|
18
18
|
forbidden :e, :eee, 'opt e'
|
19
19
|
|
20
|
-
run do |opts, args|
|
21
|
-
$stdout.puts "Awesome #{name}!"
|
20
|
+
run do |opts, args, c|
|
21
|
+
$stdout.puts "Awesome #{c.name}!"
|
22
22
|
|
23
23
|
$stdout.puts args.join(',')
|
24
24
|
|
@@ -45,8 +45,8 @@ class Cri::CommandTestCase < Cri::TestCase
|
|
45
45
|
summary 'does super stuff'
|
46
46
|
description 'This command does super stuff.'
|
47
47
|
|
48
|
-
option :a, :aaa, 'opt a', :argument => :optional do |value|
|
49
|
-
$stdout.puts "#{name}:#{value}"
|
48
|
+
option :a, :aaa, 'opt a', :argument => :optional do |value, cmd|
|
49
|
+
$stdout.puts "#{cmd.name}:#{value}"
|
50
50
|
end
|
51
51
|
required :b, :bbb, 'opt b'
|
52
52
|
optional :c, :ccc, 'opt c'
|
@@ -220,7 +220,20 @@ class Cri::CommandTestCase < Cri::TestCase
|
|
220
220
|
bare_cmd.help
|
221
221
|
end
|
222
222
|
|
223
|
-
def
|
223
|
+
def test_modify_with_block_argument
|
224
|
+
cmd = Cri::Command.define do |c|
|
225
|
+
c.name 'build'
|
226
|
+
end
|
227
|
+
assert_equal 'build', cmd.name
|
228
|
+
|
229
|
+
cmd.modify do |c|
|
230
|
+
c.name 'compile'
|
231
|
+
end
|
232
|
+
|
233
|
+
assert_equal 'compile', cmd.name
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_modify_without_block_argument
|
224
237
|
cmd = Cri::Command.define do
|
225
238
|
name 'build'
|
226
239
|
end
|
@@ -248,4 +261,38 @@ class Cri::CommandTestCase < Cri::TestCase
|
|
248
261
|
assert_equal 'help', cmd.subcommands.to_a[0].name
|
249
262
|
end
|
250
263
|
|
264
|
+
def test_define_with_block_argument
|
265
|
+
cmd = Cri::Command.define do |c|
|
266
|
+
c.name 'moo'
|
267
|
+
end
|
268
|
+
|
269
|
+
assert_equal 'moo', cmd.name
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_define_without_block_argument
|
273
|
+
cmd = Cri::Command.define do
|
274
|
+
name 'moo'
|
275
|
+
end
|
276
|
+
|
277
|
+
assert_equal 'moo', cmd.name
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_define_subcommand_with_block_argument
|
281
|
+
cmd = bare_cmd
|
282
|
+
cmd.define_command do |c|
|
283
|
+
c.name 'baresub'
|
284
|
+
end
|
285
|
+
|
286
|
+
assert_equal 'baresub', cmd.subcommands.to_a[0].name
|
287
|
+
end
|
288
|
+
|
289
|
+
def test_define_subcommand_without_block_argument
|
290
|
+
cmd = bare_cmd
|
291
|
+
cmd.define_command do
|
292
|
+
name 'baresub'
|
293
|
+
end
|
294
|
+
|
295
|
+
assert_equal 'baresub', cmd.subcommands.to_a[0].name
|
296
|
+
end
|
297
|
+
|
251
298
|
end
|
data/test/test_command_dsl.rb
CHANGED
@@ -5,7 +5,7 @@ class Cri::CommandDSLTestCase < Cri::TestCase
|
|
5
5
|
def test_create_command
|
6
6
|
# Define
|
7
7
|
dsl = Cri::CommandDSL.new
|
8
|
-
dsl.instance_eval do
|
8
|
+
dsl.instance_eval do
|
9
9
|
name 'moo'
|
10
10
|
usage 'dunno whatever'
|
11
11
|
summary 'does stuff'
|
@@ -51,8 +51,8 @@ class Cri::CommandDSLTestCase < Cri::TestCase
|
|
51
51
|
dsl = Cri::CommandDSL.new
|
52
52
|
dsl.instance_eval do
|
53
53
|
name 'super'
|
54
|
-
subcommand do
|
55
|
-
name 'sub'
|
54
|
+
subcommand do |c|
|
55
|
+
c.name 'sub'
|
56
56
|
end
|
57
57
|
end
|
58
58
|
command = dsl.command
|