ruby_ex 0.3.0 → 0.4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +324 -0
- data/NEWS +17 -0
- data/README +1 -1
- data/SPEC.yml +9 -9
- data/lib/abstract.rb +3 -38
- data/lib/abstract_node.rb +2 -4
- data/lib/algorithms/simulated_annealing.rb +26 -3
- data/lib/attributed_class.rb +2 -2
- data/lib/auto_object.rb +2 -6
- data/lib/blank_slate.rb +1 -1
- data/lib/cache.rb +4 -4
- data/lib/choose.rb +3 -5
- data/lib/commands/command.rb +53 -27
- data/lib/commands/datas/composite.rb +2 -4
- data/lib/commands/datas/data.rb +13 -16
- data/lib/commands/datas/factory.rb +2 -4
- data/lib/commands/datas/pipe.rb +52 -0
- data/lib/commands/datas/temp.rb +2 -2
- data/lib/commands/datas.rb +1 -6
- data/lib/commands/factory.rb +1 -3
- data/lib/commands/helpers.rb +6 -11
- data/lib/commands/pipe.rb +4 -6
- data/lib/commands/runners/exec.rb +2 -6
- data/lib/commands/runners/fork.rb +3 -20
- data/lib/commands/runners/mockable.rb +4 -7
- data/lib/commands/runners/no_run.rb +44 -0
- data/lib/commands/runners/popen.rb +49 -0
- data/lib/commands/runners/runner.rb +29 -6
- data/lib/commands/runners/system.rb +1 -4
- data/lib/commands/runners.rb +1 -6
- data/lib/commands/seq.rb +1 -3
- data/lib/commands.rb +3 -13
- data/lib/concrete.rb +38 -0
- data/lib/config_file.rb +2 -3
- data/lib/const_regexp.rb +1 -1
- data/lib/d_logger.rb +1 -1
- data/lib/daemon.rb +2 -3
- data/lib/diff.rb +1 -1
- data/lib/diff_tools.rb +1 -3
- data/lib/drb/drb_observable.rb +1 -1
- data/lib/drb/drb_observable_pool.rb +1 -1
- data/lib/drb/drb_service.rb +1 -1
- data/lib/drb/drb_undumped_attributes.rb +1 -1
- data/lib/drb/drb_undumped_indexed_object.rb +1 -1
- data/lib/drb/insecure_protected_methods.rb +1 -1
- data/lib/drb_ex.rb +1 -1
- data/lib/file_type.rb +2 -2
- data/lib/generate_id.rb +1 -1
- data/lib/genpasswd.rb +1 -1
- data/lib/hash_eval.rb +1 -1
- data/lib/histogram.rb +1 -1
- data/lib/hookable.rb +1 -4
- data/lib/hooker.rb +1 -1
- data/lib/html_encode.rb +1 -1
- data/lib/indexed_node.rb +0 -3
- data/lib/io_marshal.rb +1 -1
- data/lib/ioo.rb +1 -1
- data/lib/kill_all.rb +2 -2
- data/lib/labeled_node.rb +0 -3
- data/lib/logger_observer.rb +1 -1
- data/lib/md5sum.rb +1 -1
- data/lib/meta_factory.rb +1 -1
- data/lib/method_call.rb +1 -1
- data/lib/mocks/assertions.rb +1 -1
- data/lib/mocks/method_logger.rb +1 -3
- data/lib/mocks/mock.rb +2 -4
- data/lib/mocks/object.rb +1 -4
- data/lib/mocks/observer.rb +1 -3
- data/lib/mocks.rb +1 -6
- data/lib/module/autoload_tree.rb +1 -1
- data/lib/module/hierarchy.rb +1 -1
- data/lib/module/instance_method_visibility.rb +17 -16
- data/lib/object_monitor.rb +1 -1
- data/lib/object_monitor_activity.rb +1 -1
- data/lib/observable.rb +1 -1
- data/lib/observable_pool.rb +1 -1
- data/lib/ordered_hash.rb +1 -1
- data/lib/r_path.rb +44 -23
- data/lib/random_generators/random_generator.rb +1 -1
- data/lib/random_generators/ruby.rb +1 -5
- data/lib/random_generators.rb +20 -5
- data/lib/regex_list.rb +2 -5
- data/lib/regex_path.rb +64 -23
- data/lib/ruby_ex.rb +11 -2
- data/lib/safe_eval.rb +6 -15
- data/lib/sendmail.rb +41 -17
- data/lib/service_manager.rb +1 -1
- data/lib/shuffle.rb +3 -1
- data/lib/spring.rb +1 -1
- data/lib/spring_set.rb +1 -1
- data/lib/sym_tbl.rb +14 -8
- data/lib/sym_tbl_gsub.rb +88 -23
- data/lib/text.rb +1 -1
- data/lib/timeout_ex.rb +1 -1
- data/lib/trace.rb +1 -1
- data/lib/uri/druby.rb +3 -6
- data/lib/uri/file.rb +32 -18
- data/lib/uri/ftp_ex.rb +8 -3
- data/lib/uri/generic_ex.rb +158 -0
- data/lib/uri/http_ex.rb +9 -4
- data/lib/uri/mysql.rb +7 -15
- data/lib/uri/pgsql.rb +6 -14
- data/lib/uri/rsync.rb +77 -0
- data/lib/uri/ssh.rb +55 -27
- data/lib/uri/svn.rb +22 -76
- data/lib/verbose_object.rb +1 -5
- data/lib/yaml/transform.rb +1 -1
- data/lib/yaml/yregexpath.rb +1 -1
- data/test/algorithms/simulated_annealing_test.rb +79 -80
- data/test/unit-suite.yml +5 -3
- metadata +179 -172
- data/SPEC.dyn.yml +0 -10
- data/SPEC.gemspec +0 -14
- data/lib/uri_ex.rb +0 -110
- data/test/test-unit-setup.rb +0 -10
data/lib/commands/command.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: command.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/command.rb 8052 2006-01-01T16:29:27.129829Z ertai $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
@@ -41,30 +39,46 @@ module Commands
|
|
41
39
|
# Running methods.
|
42
40
|
#
|
43
41
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
@@default_runners = {}
|
43
|
+
@@running_options =
|
44
|
+
{
|
45
|
+
:verbose => :make_verbose,
|
46
|
+
:v => :make_verbose,
|
47
|
+
:raise => :raise_on_failures,
|
48
|
+
:r => :raise_on_failures,
|
49
|
+
:debug => :make_debug,
|
50
|
+
:d => :make_debug,
|
51
|
+
:mock => :make_mock,
|
52
|
+
:m => :make_mock,
|
53
|
+
}
|
54
|
+
def run_with_options ( runner_class, options )
|
55
|
+
if options.empty?
|
56
|
+
runner = @@default_runners[runner_class] ||= runner_class.new
|
57
|
+
else
|
58
|
+
runner = runner_class.new
|
59
|
+
options.each do |k|
|
60
|
+
runner.send(@@running_options[k])
|
61
|
+
end
|
48
62
|
end
|
49
|
-
run(
|
63
|
+
run(runner)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
# Simulate Kernel#system() to run the command (No shell expansion).
|
68
|
+
def system ( *options )
|
69
|
+
run_with_options(Runners::System, options.flatten)
|
50
70
|
end
|
51
71
|
|
52
72
|
|
53
73
|
# Use the ExecRunner.
|
54
|
-
def exec
|
55
|
-
|
56
|
-
@@exec_runner = Runners::Exec.new
|
57
|
-
end
|
58
|
-
run(@@exec_runner)
|
74
|
+
def exec ( *options )
|
75
|
+
run_with_options(Runners::Exec, options.flatten)
|
59
76
|
end
|
60
77
|
|
61
78
|
|
62
79
|
# FIXME test me
|
63
|
-
def sys
|
64
|
-
|
65
|
-
@@sys_runner = Runners::System.new.make_verbose.raise_on_failures
|
66
|
-
end
|
67
|
-
run(@@sys_runner)
|
80
|
+
def sys ( *options )
|
81
|
+
run_with_options(Runners::System, [:v, :r] + options.flatten)
|
68
82
|
end
|
69
83
|
|
70
84
|
|
@@ -89,13 +103,14 @@ module Commands
|
|
89
103
|
end
|
90
104
|
|
91
105
|
|
92
|
-
def popen
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
106
|
+
def popen ( *options )
|
107
|
+
run_with_options(Runners::Popen, options.flatten)
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
def fork ( *options )
|
112
|
+
run_with_options(Runners::Fork, options.flatten)
|
97
113
|
end
|
98
|
-
alias :fork :popen
|
99
114
|
|
100
115
|
|
101
116
|
# FIXME design me!
|
@@ -121,7 +136,7 @@ module Commands
|
|
121
136
|
|
122
137
|
# Pipe two commands.
|
123
138
|
def | ( rhs )
|
124
|
-
Pipe.new(self, rhs)
|
139
|
+
Commands::Pipe.new(self, rhs)
|
125
140
|
end
|
126
141
|
|
127
142
|
|
@@ -257,6 +272,8 @@ module Commands
|
|
257
272
|
|
258
273
|
end # class Command
|
259
274
|
|
275
|
+
Commands::Helpers.import!
|
276
|
+
|
260
277
|
test_section __FILE__ do
|
261
278
|
|
262
279
|
class CommandTest < Test::Unit::TestCase
|
@@ -300,6 +317,13 @@ module Commands
|
|
300
317
|
assert(@tmp.exist?)
|
301
318
|
end
|
302
319
|
|
320
|
+
def test_system_raise_on_failures
|
321
|
+
assert_raise(Runners::Runner::FailureHooker::Error) do
|
322
|
+
'false'.to_cmd.system(:r)
|
323
|
+
end
|
324
|
+
assert_not_equal(0, $?)
|
325
|
+
end
|
326
|
+
|
303
327
|
def test_sh_and_pipe
|
304
328
|
((@cat | @wc) < @file > @tmp).sh
|
305
329
|
assert_equal(0, $?)
|
@@ -381,6 +405,7 @@ module Commands
|
|
381
405
|
assert_match(/\s*2\s*4\s*17\s+/, str)
|
382
406
|
end
|
383
407
|
|
408
|
+
# FIXME
|
384
409
|
def test_popen
|
385
410
|
cmd = (@touch + @tmp) + (@sleep + 1)
|
386
411
|
diff = DTime.diff { @data = cmd.popen }
|
@@ -391,12 +416,13 @@ module Commands
|
|
391
416
|
end
|
392
417
|
|
393
418
|
def test_fork
|
394
|
-
|
419
|
+
sleep_arg = 2
|
420
|
+
cmd = (@touch + @tmp) + (@sleep + sleep_arg)
|
395
421
|
diff = DTime.diff { @data = cmd.fork }
|
396
422
|
assert(@tmp.exist?)
|
397
423
|
@data.waitpid
|
398
424
|
assert(@tmp.exist?)
|
399
|
-
assert(diff.to_f <
|
425
|
+
assert(diff.to_f < sleep_arg, "#{diff} should be < #{sleep_arg}")
|
400
426
|
end
|
401
427
|
|
402
428
|
def test_ruby
|
@@ -1,15 +1,13 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: composite.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas/composite.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
10
8
|
module Datas
|
11
9
|
|
12
|
-
class Composite < Data
|
10
|
+
class Composite < self::Data
|
13
11
|
|
14
12
|
attr_accessor :contents
|
15
13
|
|
data/lib/commands/datas/data.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: data.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas/data.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
@@ -108,26 +106,22 @@ module Commands
|
|
108
106
|
have YamlExtension, :'commands::data'
|
109
107
|
|
110
108
|
def to_yaml_string
|
111
|
-
out = output.read
|
112
|
-
err = error.read
|
109
|
+
suppress(IOError) { out = output.read }
|
110
|
+
suppress(IOError) { err = error.read }
|
113
111
|
out ||= ''
|
114
112
|
err ||= ''
|
115
113
|
|
116
114
|
msg = []
|
117
115
|
msg << "exit: #{status.exitstatus}" unless status.nil?
|
118
|
-
|
119
|
-
msg << 'output: ""'
|
120
|
-
else
|
116
|
+
unless out.empty?
|
121
117
|
out.gsub!(/^/, ' ')
|
122
118
|
msg << "output: |\n #{out}"
|
123
119
|
end
|
124
|
-
|
125
|
-
msg << 'error: ""'
|
126
|
-
else
|
120
|
+
unless err.empty?
|
127
121
|
err.gsub!(/^/, ' ')
|
128
122
|
msg << "error: |\n #{err}"
|
129
123
|
end
|
130
|
-
msg.join("\n")
|
124
|
+
"\n" + msg.join("\n")
|
131
125
|
end
|
132
126
|
|
133
127
|
def kill ( sig='KILL' )
|
@@ -141,12 +135,15 @@ module Commands
|
|
141
135
|
next if stream.nil? or stream.is_a? IO
|
142
136
|
if stream.is_a? File
|
143
137
|
stream.close
|
144
|
-
stream = stream.path.to_path
|
138
|
+
stream = stream.path.to_path
|
145
139
|
end
|
146
|
-
|
147
|
-
|
140
|
+
if stream.is_a? Pathname
|
141
|
+
stream.unlink if stream.exist? and stream.temp?
|
142
|
+
elsif stream.respond_to? :clean
|
143
|
+
stream.clean
|
144
|
+
else
|
145
|
+
raise ArgumentError, "must at least respond to :clean (#{stream})"
|
148
146
|
end
|
149
|
-
stream.unlink if stream.exist? and stream.temp?
|
150
147
|
end
|
151
148
|
end
|
152
149
|
|
@@ -1,15 +1,13 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: factory.rb
|
5
|
-
|
6
|
-
Commands.import!
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas/factory.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
10
8
|
module Datas
|
11
9
|
|
12
|
-
class Factory < Data
|
10
|
+
class Factory < self::Data
|
13
11
|
|
14
12
|
attr_accessor :command_data_class
|
15
13
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
|
+
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
|
+
# License:: GNU General Public License (GPL).
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas/pipe.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
+
|
6
|
+
class IOPipe
|
7
|
+
attr_accessor :reader, :writer, :open_mode
|
8
|
+
def initialize
|
9
|
+
@reader, @writer = IO.pipe
|
10
|
+
@open_mode = :w
|
11
|
+
end
|
12
|
+
def open ( mode=:r )
|
13
|
+
case mode.to_sym
|
14
|
+
when :r
|
15
|
+
@writer.close
|
16
|
+
@reader
|
17
|
+
when :w
|
18
|
+
@reader.close
|
19
|
+
@writer
|
20
|
+
else raise ArgumentError, "Bad open mode: #{mode.inspect}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def close
|
24
|
+
@reader.close
|
25
|
+
@writer.close
|
26
|
+
end
|
27
|
+
alias_method :clean, :close
|
28
|
+
def to_io_for_commands
|
29
|
+
open(open_mode)
|
30
|
+
end
|
31
|
+
def read
|
32
|
+
open.read
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module Commands
|
37
|
+
|
38
|
+
module Datas
|
39
|
+
|
40
|
+
class Pipe < self::Data
|
41
|
+
|
42
|
+
def initialize ( *a, &b )
|
43
|
+
super
|
44
|
+
@output = IOPipe.new
|
45
|
+
@error = IOPipe.new
|
46
|
+
end
|
47
|
+
|
48
|
+
end # class Pipe
|
49
|
+
|
50
|
+
end # module Datas
|
51
|
+
|
52
|
+
end # module Commands
|
data/lib/commands/datas/temp.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: temp.rb
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas/temp.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
5
|
|
6
6
|
module Commands
|
7
7
|
|
8
8
|
module Datas
|
9
9
|
|
10
|
-
class Temp < Data
|
10
|
+
class Temp < self::Data
|
11
11
|
|
12
12
|
def initialize ( *a, &b )
|
13
13
|
super
|
data/lib/commands/datas.rb
CHANGED
@@ -1,16 +1,11 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: datas.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/datas.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
10
8
|
module Datas
|
11
|
-
|
12
|
-
autoloaded_module(__FILE__, false)
|
13
|
-
|
14
9
|
end # module Datas
|
15
10
|
|
16
11
|
end # module Commands
|
data/lib/commands/factory.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: factory.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/factory.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
data/lib/commands/helpers.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: helpers.rb
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/helpers.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'shellwords'
|
7
7
|
|
8
8
|
module Commands
|
9
9
|
|
@@ -22,15 +22,10 @@ module Commands
|
|
22
22
|
#
|
23
23
|
# Make a command from a String.
|
24
24
|
#
|
25
|
-
# Split your command
|
25
|
+
# Split your command using the Shellwords module.
|
26
26
|
#
|
27
|
-
# Do not touch the String and give as one argument.
|
28
27
|
def to_cmd
|
29
|
-
|
30
|
-
Command.new(self)
|
31
|
-
else
|
32
|
-
Command.new(*split(/\s+/))
|
33
|
-
end
|
28
|
+
Shellwords.shellwords(self).to_cmd
|
34
29
|
end
|
35
30
|
|
36
31
|
def to_io_for_commands
|
@@ -46,7 +41,7 @@ module Commands
|
|
46
41
|
class ::Array
|
47
42
|
|
48
43
|
def to_cmd
|
49
|
-
Command.new(*self)
|
44
|
+
Commands::Command.new(*self)
|
50
45
|
end
|
51
46
|
|
52
47
|
end # class ::Array
|
@@ -66,7 +61,7 @@ module Commands
|
|
66
61
|
"foo b/ar \t \n qu44x32".to_cmd.to_a)
|
67
62
|
|
68
63
|
s = "foo 'b/ar \t' \n qu44x32"
|
69
|
-
assert_equal([
|
64
|
+
assert_equal(["foo", "b/ar \t", "qu44x32"], s.to_cmd.to_a)
|
70
65
|
end
|
71
66
|
|
72
67
|
def test_array_to_cmd
|
data/lib/commands/pipe.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: pipe.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/pipe.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
class IO
|
9
7
|
|
@@ -13,7 +11,7 @@ class IO
|
|
13
11
|
|
14
12
|
class << self
|
15
13
|
|
16
|
-
alias_method :pipe_without_pipe?, :pipe
|
14
|
+
alias_method :pipe_without_pipe?, :pipe unless method_defined? :pipe_without_pipe?
|
17
15
|
|
18
16
|
def pipe
|
19
17
|
ios = pipe_without_pipe?
|
@@ -35,7 +33,7 @@ module Commands
|
|
35
33
|
@cmds = cmds.flatten.map { |x| x.dup }
|
36
34
|
end
|
37
35
|
|
38
|
-
def run ( runner=@runner )
|
36
|
+
def run ( runner=@runner, *a )
|
39
37
|
datas = Datas::Composite.new
|
40
38
|
runner = runner.dup
|
41
39
|
runner.hook_trigger :display_command, self
|
@@ -53,7 +51,7 @@ module Commands
|
|
53
51
|
wr.close
|
54
52
|
end
|
55
53
|
runner = runner.dup
|
56
|
-
datas << @cmds.last.run(runner)
|
54
|
+
datas << @cmds.last.run(runner, *a)
|
57
55
|
datas.waitpid if runner.is_a? Runners::System
|
58
56
|
datas
|
59
57
|
end
|
@@ -1,16 +1,14 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: exec.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/runners/exec.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
10
8
|
module Runners
|
11
9
|
|
12
10
|
class Exec < Runner
|
13
|
-
|
11
|
+
include Concrete
|
14
12
|
|
15
13
|
def exec ( aCommand, data )
|
16
14
|
Kernel.exec(*aCommand.to_a)
|
@@ -18,8 +16,6 @@ module Commands
|
|
18
16
|
|
19
17
|
end # class Exec
|
20
18
|
|
21
|
-
|
22
|
-
|
23
19
|
test_section __FILE__ do
|
24
20
|
|
25
21
|
class ExecTest < Test::Unit::TestCase
|
@@ -1,16 +1,14 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: fork.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/runners/fork.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
10
8
|
module Runners
|
11
9
|
|
12
10
|
class Fork < Exec
|
13
|
-
|
11
|
+
include Concrete
|
14
12
|
|
15
13
|
#
|
16
14
|
# Hooks declaration
|
@@ -19,7 +17,6 @@ module Commands
|
|
19
17
|
hook_declare :exception_raised_during_exec
|
20
18
|
hook_declare :already_killed
|
21
19
|
hook_declare :waitpid
|
22
|
-
hook_declare :failure
|
23
20
|
hook_declare :son
|
24
21
|
hook_declare :kill
|
25
22
|
|
@@ -39,7 +36,7 @@ module Commands
|
|
39
36
|
end
|
40
37
|
hook_trigger :waitpid, data
|
41
38
|
if data.status.nil? or not data.status.exitstatus.zero?
|
42
|
-
hook_trigger :failure, data
|
39
|
+
hook_trigger :failure, aCommand, data
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
@@ -69,11 +66,6 @@ module Commands
|
|
69
66
|
end
|
70
67
|
|
71
68
|
|
72
|
-
def raise_on_failures
|
73
|
-
hooker_subscribe FailureHooker.new
|
74
|
-
self
|
75
|
-
end
|
76
|
-
|
77
69
|
def before_exec ( command, data )
|
78
70
|
TempPath.clean
|
79
71
|
end
|
@@ -81,15 +73,6 @@ module Commands
|
|
81
73
|
end # class Fork
|
82
74
|
|
83
75
|
|
84
|
-
class FailureHooker
|
85
|
-
class Error < Exception
|
86
|
-
end
|
87
|
-
def failure ( data )
|
88
|
-
raise Error, { 'Command failed' => data }.to_yaml
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
76
|
test_section __FILE__ do
|
94
77
|
|
95
78
|
class ForkTest < Test::Unit::TestCase
|
@@ -1,9 +1,7 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: mockable.rb
|
5
|
-
|
6
|
-
require 'commands'
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/runners/mockable.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
7
5
|
|
8
6
|
module Commands
|
9
7
|
|
@@ -31,13 +29,12 @@ module Commands
|
|
31
29
|
self
|
32
30
|
end
|
33
31
|
|
34
|
-
end # module
|
32
|
+
end # module Mockable
|
35
33
|
|
36
|
-
|
37
|
-
include Mockable
|
38
|
-
end
|
34
|
+
Runner.include Mockable
|
39
35
|
|
40
36
|
test_section __FILE__ do
|
37
|
+
Commands::Helpers.import!
|
41
38
|
|
42
39
|
class MockTest < Test::Unit::TestCase
|
43
40
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
|
+
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
|
+
# License:: GNU General Public License (GPL).
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/runners/no_run.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
+
|
6
|
+
module Commands
|
7
|
+
|
8
|
+
module Runners
|
9
|
+
|
10
|
+
# This very particular runner returns it's command instead of running it.
|
11
|
+
class NoRun < Runner
|
12
|
+
include Concrete
|
13
|
+
|
14
|
+
def run ( aCommand )
|
15
|
+
aCommand
|
16
|
+
end
|
17
|
+
|
18
|
+
end # class NoRun
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
test_section __FILE__ do
|
23
|
+
|
24
|
+
class NoRunTest < Test::Unit::TestCase
|
25
|
+
|
26
|
+
def setup
|
27
|
+
assert_nothing_raised { @runner = NoRun.new }
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_0_initialize
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_simple
|
34
|
+
cmd = 'sleep'.to_cmd[10]
|
35
|
+
assert_kind_of Command, cmd.run(@runner)
|
36
|
+
end
|
37
|
+
|
38
|
+
end # class NoRunTest
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end # module Runners
|
43
|
+
|
44
|
+
end # module Commands
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
|
+
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
|
+
# License:: GNU General Public License (GPL).
|
4
|
+
# Revision:: $Id: /w/fey/ruby_ex/trunk/lib/commands/runners/popen.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
+
|
6
|
+
module Commands
|
7
|
+
|
8
|
+
module Runners
|
9
|
+
|
10
|
+
class Popen < Fork
|
11
|
+
make Concrete
|
12
|
+
|
13
|
+
def initialize ( *a, &b )
|
14
|
+
super
|
15
|
+
@command_data_factory.command_data_class = Datas::Pipe
|
16
|
+
end
|
17
|
+
|
18
|
+
end # class Popen
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
test_section __FILE__ do
|
23
|
+
|
24
|
+
class PopenTest < Test::Unit::TestCase
|
25
|
+
|
26
|
+
def setup
|
27
|
+
assert_nothing_raised { @runner = Popen.new }
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_0_initialize
|
31
|
+
end
|
32
|
+
|
33
|
+
# FIXME
|
34
|
+
def test_simple
|
35
|
+
# TempPath.new do |tmp|
|
36
|
+
# cmd = %Q[ruby -e "sleep 0.5
|
37
|
+
# File.open('#{tmp}', 'w') { |f| f.puts :foo }"]
|
38
|
+
# @runner.run(cmd.to_cmd)
|
39
|
+
# assert(tmp.exist?)
|
40
|
+
# end
|
41
|
+
end
|
42
|
+
|
43
|
+
end # class PopenTest
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end # module Runners
|
48
|
+
|
49
|
+
end # module Commands
|