ruby_ex 0.4.6.2 → 0.5.5.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/NEWS +17 -0
- data/README +1 -0
- data/SPEC.gemspec +14 -0
- data/SPEC.yml +10 -6
- data/lib/abstract.rb +3 -4
- data/lib/d_logger.rb +3 -3
- data/lib/drb/observable_pool.rb +5 -2
- data/lib/drb_ex.rb +1 -6
- data/lib/exp_mod.rb +48 -0
- data/lib/file_type.rb +82 -97
- data/lib/kill_all.rb +3 -3
- data/lib/{module → module_extensions}/autoload_tree.rb +5 -10
- data/lib/{module → module_extensions}/hierarchy.rb +11 -5
- data/lib/{module → module_extensions}/instance_method_visibility.rb +7 -5
- data/lib/{ordered_hash.rb → o_hash.rb} +8 -13
- data/lib/probability_distributions/gaussian_distribution.rb +34 -0
- data/lib/probability_distributions/probability_distribution.rb +16 -0
- data/lib/probability_distributions/uniform_distribution.rb +12 -0
- data/lib/random_generators.rb +1 -3
- data/lib/ruby_ex.rb +4 -4
- data/lib/sendmail.rb +7 -4
- data/lib/sym_tbl_gsub.rb +48 -17
- data/lib/uri/file.rb +5 -10
- data/lib/uri/ftp_ex.rb +4 -4
- data/lib/uri/generic_ex.rb +11 -7
- data/lib/uri/http_ex.rb +4 -4
- data/lib/uri/mysql.rb +3 -5
- data/lib/uri/pgsql.rb +3 -5
- data/lib/uri/rsync.rb +2 -4
- data/lib/uri/ssh.rb +3 -6
- data/lib/uri/svn.rb +10 -12
- data/lib/{yaml → yaml_extensions}/chop_header.rb +3 -3
- data/lib/{yaml → yaml_extensions}/transform.rb +4 -4
- data/lib/{yaml → yaml_extensions}/yregexpath.rb +3 -3
- metadata +89 -105
- data/lib/commands.rb +0 -27
- data/lib/commands/command.rb +0 -545
- data/lib/commands/datas.rb +0 -11
- data/lib/commands/datas/composite.rb +0 -55
- data/lib/commands/datas/data.rb +0 -160
- data/lib/commands/datas/factory.rb +0 -74
- data/lib/commands/datas/pipe.rb +0 -52
- data/lib/commands/datas/temp.rb +0 -24
- data/lib/commands/factory.rb +0 -65
- data/lib/commands/helpers.rb +0 -76
- data/lib/commands/pipe.rb +0 -114
- data/lib/commands/runners.rb +0 -11
- data/lib/commands/runners/exec.rb +0 -46
- data/lib/commands/runners/fork.rb +0 -104
- data/lib/commands/runners/mockable.rb +0 -63
- data/lib/commands/runners/no_run.rb +0 -44
- data/lib/commands/runners/popen.rb +0 -49
- data/lib/commands/runners/runner.rb +0 -177
- data/lib/commands/runners/system.rb +0 -54
- data/lib/commands/seq.rb +0 -31
- data/lib/hookable.rb +0 -294
- data/lib/hooker.rb +0 -52
data/lib/commands/helpers.rb
DELETED
@@ -1,76 +0,0 @@
|
|
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/helpers.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
require 'shellwords'
|
7
|
-
|
8
|
-
module Commands
|
9
|
-
|
10
|
-
module Helpers
|
11
|
-
|
12
|
-
class ::Object
|
13
|
-
|
14
|
-
def to_io_for_commands
|
15
|
-
to_io
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
class ::String
|
21
|
-
|
22
|
-
#
|
23
|
-
# Make a command from a String.
|
24
|
-
#
|
25
|
-
# Split your command using the Shellwords module.
|
26
|
-
#
|
27
|
-
def to_cmd
|
28
|
-
Shellwords.shellwords(self).to_cmd
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_io_for_commands
|
32
|
-
tmp = TempPath.new
|
33
|
-
tmp.open('w') { |f| f.write self }
|
34
|
-
tmp.to_io_for_commands
|
35
|
-
end
|
36
|
-
|
37
|
-
end # class ::String
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
class ::Array
|
42
|
-
|
43
|
-
def to_cmd
|
44
|
-
Commands::Command.new(*self)
|
45
|
-
end
|
46
|
-
|
47
|
-
end # class ::Array
|
48
|
-
|
49
|
-
end # module Helpers
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
test_section __FILE__ do
|
54
|
-
|
55
|
-
class HelpersTest < Test::Unit::TestCase
|
56
|
-
|
57
|
-
def test_string_to_cmd
|
58
|
-
assert_equal(['foo', 'bar'], "foo bar".to_cmd.to_a)
|
59
|
-
|
60
|
-
assert_equal(['foo', 'b/ar', 'qu44x32'],
|
61
|
-
"foo b/ar \t \n qu44x32".to_cmd.to_a)
|
62
|
-
|
63
|
-
s = "foo 'b/ar \t' \n qu44x32"
|
64
|
-
assert_equal(["foo", "b/ar \t", "qu44x32"], s.to_cmd.to_a)
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_array_to_cmd
|
68
|
-
a = ['foo', "b/ar \t", "\n qu44x32"]
|
69
|
-
assert_equal(a, a.to_cmd.to_a)
|
70
|
-
end
|
71
|
-
|
72
|
-
end # class HelpersTest
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
end # module Commands
|
data/lib/commands/pipe.rb
DELETED
@@ -1,114 +0,0 @@
|
|
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/pipe.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
class IO
|
7
|
-
|
8
|
-
def pipe?
|
9
|
-
false
|
10
|
-
end
|
11
|
-
|
12
|
-
class << self
|
13
|
-
|
14
|
-
alias_method :pipe_without_pipe?, :pipe unless method_defined? :pipe_without_pipe?
|
15
|
-
|
16
|
-
def pipe
|
17
|
-
ios = pipe_without_pipe?
|
18
|
-
ios.each do |io|
|
19
|
-
io.send(:define_singleton_method, :pipe?) { true }
|
20
|
-
end
|
21
|
-
ios
|
22
|
-
end
|
23
|
-
|
24
|
-
end # class << self
|
25
|
-
|
26
|
-
end # class IO
|
27
|
-
|
28
|
-
module Commands
|
29
|
-
|
30
|
-
class Pipe < Command
|
31
|
-
|
32
|
-
def initialize ( *cmds )
|
33
|
-
@cmds = cmds.flatten.map { |x| x.dup }
|
34
|
-
end
|
35
|
-
|
36
|
-
def run ( runner=@runner, *a )
|
37
|
-
datas = Datas::Composite.new
|
38
|
-
runner = runner.dup
|
39
|
-
runner.hook_trigger :display_command, self
|
40
|
-
runner.disable_hook :display_command
|
41
|
-
runner.disable_hook :waitpid
|
42
|
-
([nil] + @cmds).zip(@cmds + [nil]).each do |cmd1, cmd2|
|
43
|
-
next if cmd1.nil? or cmd2.nil?
|
44
|
-
rd, wr = IO.pipe
|
45
|
-
cmd1_runner = runner.dup
|
46
|
-
cmd1_runner.disable_hook :waitpid
|
47
|
-
cmd1_runner.subscribe_hook(:son) { rd.close }
|
48
|
-
cmd1.output = wr
|
49
|
-
cmd2.input = rd
|
50
|
-
datas << cmd1.run(cmd1_runner)
|
51
|
-
wr.close
|
52
|
-
end
|
53
|
-
runner = runner.dup
|
54
|
-
datas << @cmds.last.run(runner, *a)
|
55
|
-
datas.waitpid if runner.is_a? Runners::System
|
56
|
-
datas
|
57
|
-
end
|
58
|
-
|
59
|
-
def input= ( arg )
|
60
|
-
@cmds.first.input = arg
|
61
|
-
end
|
62
|
-
|
63
|
-
def input
|
64
|
-
@cmds.first.input
|
65
|
-
end
|
66
|
-
|
67
|
-
def output= ( arg )
|
68
|
-
@cmds.last.output = arg
|
69
|
-
end
|
70
|
-
|
71
|
-
def output
|
72
|
-
@cmds.last.output
|
73
|
-
end
|
74
|
-
|
75
|
-
def error= ( arg )
|
76
|
-
@cmds.last.error = arg
|
77
|
-
end
|
78
|
-
|
79
|
-
def error
|
80
|
-
@cmds.last.error
|
81
|
-
end
|
82
|
-
|
83
|
-
%w[ args command ].each do |meth|
|
84
|
-
class_eval %Q{
|
85
|
-
def #{meth} ( *a, &b )
|
86
|
-
raise ArgumentError, "no method `#{meth}' on a pipe"
|
87
|
-
end
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
def [] ( *args )
|
92
|
-
new_cmds = @cmds.dup
|
93
|
-
new_cmds[-1] = new_cmds.last[*args]
|
94
|
-
Pipe.new(*new_cmds)
|
95
|
-
end
|
96
|
-
|
97
|
-
#
|
98
|
-
# Conversion methods
|
99
|
-
#
|
100
|
-
|
101
|
-
def to_sh
|
102
|
-
strs = @cmds.map { |cmd| "(#{cmd.to_sh})" }
|
103
|
-
"#{strs.join(' | ')}"
|
104
|
-
end
|
105
|
-
|
106
|
-
def to_s
|
107
|
-
to_sh
|
108
|
-
end
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
end # class Pipe
|
113
|
-
|
114
|
-
end # module Commands
|
data/lib/commands/runners.rb
DELETED
@@ -1,11 +0,0 @@
|
|
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.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
end # module Runners
|
10
|
-
|
11
|
-
end # module Commands
|
@@ -1,46 +0,0 @@
|
|
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/exec.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
class Exec < Runner
|
11
|
-
include Concrete
|
12
|
-
|
13
|
-
def exec ( aCommand, data )
|
14
|
-
Kernel.exec(*aCommand.to_a)
|
15
|
-
end
|
16
|
-
|
17
|
-
end # class Exec
|
18
|
-
|
19
|
-
test_section __FILE__ do
|
20
|
-
|
21
|
-
class ExecTest < Test::Unit::TestCase
|
22
|
-
|
23
|
-
def setup
|
24
|
-
assert_nothing_raised { @runner = Exec.new }
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_0_initialize
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_simple
|
31
|
-
TempPath.new do |tmp|
|
32
|
-
cmd = %Q[ruby -e "File.open('#{tmp}', 'w') { |f| f.puts :foo }"]
|
33
|
-
pid = fork do
|
34
|
-
@runner.run(cmd.to_cmd)
|
35
|
-
end
|
36
|
-
Process.waitpid pid
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end # class ExecTest
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
end # module Runners
|
45
|
-
|
46
|
-
end # module Commands
|
@@ -1,104 +0,0 @@
|
|
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/fork.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
class Fork < Exec
|
11
|
-
include Concrete
|
12
|
-
|
13
|
-
#
|
14
|
-
# Hooks declaration
|
15
|
-
#
|
16
|
-
|
17
|
-
hook_declare :exception_raised_during_exec
|
18
|
-
hook_declare :already_killed
|
19
|
-
hook_declare :waitpid
|
20
|
-
hook_declare :son
|
21
|
-
hook_declare :kill
|
22
|
-
|
23
|
-
#
|
24
|
-
# Methods
|
25
|
-
#
|
26
|
-
|
27
|
-
def run_impl ( aCommand, data )
|
28
|
-
data.pid = Kernel.fork do
|
29
|
-
begin
|
30
|
-
TempPath.fork_init true
|
31
|
-
hook_trigger :son, aCommand, data
|
32
|
-
super
|
33
|
-
rescue Exception => ex
|
34
|
-
hook_trigger :exception_raised_during_exec, ex
|
35
|
-
end
|
36
|
-
end
|
37
|
-
hook_trigger :waitpid, data
|
38
|
-
if data.status.nil? or not data.status.exitstatus.zero?
|
39
|
-
hook_trigger :failure, aCommand, data
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
def abort ( data )
|
45
|
-
if data.pid
|
46
|
-
begin
|
47
|
-
hook_trigger :kill, data
|
48
|
-
hook_trigger :waitpid, data
|
49
|
-
rescue Errno::ESRCH
|
50
|
-
hook_trigger :already_killed, data.pid
|
51
|
-
end
|
52
|
-
end
|
53
|
-
super
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
def exception_raised_during_exec ( anException )
|
58
|
-
STDERR.reopen(File.new(1))
|
59
|
-
STDERR.puts anException
|
60
|
-
exit! 127
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def kill ( data )
|
65
|
-
Process.kill('-KILL', -data.pid)
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
def before_exec ( command, data )
|
70
|
-
TempPath.clean
|
71
|
-
end
|
72
|
-
|
73
|
-
end # class Fork
|
74
|
-
|
75
|
-
|
76
|
-
test_section __FILE__ do
|
77
|
-
|
78
|
-
class ForkTest < Test::Unit::TestCase
|
79
|
-
|
80
|
-
def setup
|
81
|
-
assert_nothing_raised { @runner = Fork.new }
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_0_initialize
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_simple
|
88
|
-
TempPath.new do |tmp|
|
89
|
-
cmd = %Q[ruby -e "sleep 1
|
90
|
-
File.open('#{tmp}', 'w') { |f| f.puts :foo }"]
|
91
|
-
data = @runner.run(cmd.to_cmd)
|
92
|
-
assert(! tmp.exist?)
|
93
|
-
data.waitpid
|
94
|
-
assert(tmp.exist?)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
end # class ForkTest
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
end # module Runners
|
103
|
-
|
104
|
-
end # module Commands
|
@@ -1,63 +0,0 @@
|
|
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/mockable.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
module Mockable
|
11
|
-
|
12
|
-
def make_mock ( &block )
|
13
|
-
@log = []
|
14
|
-
@block = block
|
15
|
-
|
16
|
-
class << self
|
17
|
-
attr_reader :log
|
18
|
-
attr_accessor :block
|
19
|
-
|
20
|
-
def exec ( aCommand, aData )
|
21
|
-
@block[aCommand, aData]
|
22
|
-
end
|
23
|
-
|
24
|
-
def display_command ( m )
|
25
|
-
@log << m
|
26
|
-
end
|
27
|
-
end # class << self
|
28
|
-
|
29
|
-
self
|
30
|
-
end
|
31
|
-
|
32
|
-
end # module Mockable
|
33
|
-
|
34
|
-
Runner.include Mockable
|
35
|
-
|
36
|
-
test_section __FILE__ do
|
37
|
-
Commands::Helpers.import!
|
38
|
-
|
39
|
-
class MockTest < Test::Unit::TestCase
|
40
|
-
|
41
|
-
def setup
|
42
|
-
assert_nothing_raised { @runner = System.new.make_mock }
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_0_initialize
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_simple
|
49
|
-
assert_nothing_raised do
|
50
|
-
@cmd = 'foo bar baz'.to_cmd
|
51
|
-
@data = @runner.run(@cmd)
|
52
|
-
end
|
53
|
-
assert_kind_of(Commands::Datas::Data, @data)
|
54
|
-
assert_equal([@cmd], @runner.log)
|
55
|
-
end
|
56
|
-
|
57
|
-
end # class SystemTest
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
end # module Runners
|
62
|
-
|
63
|
-
end # module Commands
|
@@ -1,44 +0,0 @@
|
|
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
|