ruby_ex 0.4.6.2 → 0.5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/datas.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/datas.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Datas
|
9
|
-
end # module Datas
|
10
|
-
|
11
|
-
end # module Commands
|
@@ -1,55 +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/datas/composite.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Datas
|
9
|
-
|
10
|
-
class Composite < self::Data
|
11
|
-
|
12
|
-
attr_accessor :contents
|
13
|
-
|
14
|
-
def initialize ( *contents )
|
15
|
-
super()
|
16
|
-
@contents = contents.flatten
|
17
|
-
end
|
18
|
-
|
19
|
-
def each ( &block )
|
20
|
-
@contents.each(&block)
|
21
|
-
end
|
22
|
-
|
23
|
-
def waitpid
|
24
|
-
each { |x| x.waitpid }
|
25
|
-
end
|
26
|
-
|
27
|
-
def kill ( *a, &b )
|
28
|
-
each { |x| x.kill(*a, &b) }
|
29
|
-
end
|
30
|
-
|
31
|
-
def << ( data )
|
32
|
-
@contents << data
|
33
|
-
end
|
34
|
-
|
35
|
-
def status
|
36
|
-
@contents.last.status
|
37
|
-
end
|
38
|
-
|
39
|
-
def output
|
40
|
-
@contents.last.output
|
41
|
-
end
|
42
|
-
|
43
|
-
def error
|
44
|
-
@contents.last.error
|
45
|
-
end
|
46
|
-
|
47
|
-
def input
|
48
|
-
@contents.first.input
|
49
|
-
end
|
50
|
-
|
51
|
-
end # class Composite
|
52
|
-
|
53
|
-
end # module Datas
|
54
|
-
|
55
|
-
end # module Commands
|
data/lib/commands/datas/data.rb
DELETED
@@ -1,160 +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/datas/data.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Datas
|
9
|
-
|
10
|
-
#
|
11
|
-
# A CommandData instance contains all information returned by a Command#run:
|
12
|
-
#
|
13
|
-
# * It's exit status:
|
14
|
-
# - Exit number.
|
15
|
-
# - Signals
|
16
|
-
# - ...
|
17
|
-
#
|
18
|
-
# * It's outputs:
|
19
|
-
# - What it writes on stdout.
|
20
|
-
# - stderr.
|
21
|
-
class Data
|
22
|
-
|
23
|
-
attr_accessor :pid
|
24
|
-
attr_reader :input
|
25
|
-
attr_reader :output
|
26
|
-
attr_reader :error
|
27
|
-
attr_accessor :status
|
28
|
-
attr_reader :open_mode
|
29
|
-
|
30
|
-
@@datas ||= Set.new
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@open_mode = :w
|
34
|
-
@status, @pid = nil, nil
|
35
|
-
@@datas << self
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
def waitpid
|
40
|
-
return @status unless @status.nil?
|
41
|
-
return if @pid.nil?
|
42
|
-
Process.waitpid(@pid)
|
43
|
-
@status = $?
|
44
|
-
@@datas.delete(self)
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
def | ( rhs ) # FIXME CHECK ME
|
50
|
-
raise unless rhs.is_a? Command
|
51
|
-
case output
|
52
|
-
when Pathname then rhs < output
|
53
|
-
when File then rhs < output.path.to_path
|
54
|
-
else raise "Unexpected class #{rhs.class}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
def method_missing ( meth, *a, &b )
|
60
|
-
if output.respond_to?(meth)
|
61
|
-
output.send(meth, *a, &b)
|
62
|
-
else
|
63
|
-
super
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
def display ( out=STDOUT, err=STDERR )
|
69
|
-
waitpid
|
70
|
-
out.print @output.read
|
71
|
-
err.print @error.read
|
72
|
-
end
|
73
|
-
|
74
|
-
def input= ( anObject )
|
75
|
-
if anObject.is_a? Pathname
|
76
|
-
anObject = anObject.dup
|
77
|
-
anObject.open_mode = :r
|
78
|
-
end
|
79
|
-
@input = anObject
|
80
|
-
end
|
81
|
-
|
82
|
-
def output= ( anObject )
|
83
|
-
if anObject.is_a? Pathname
|
84
|
-
anObject = anObject.dup
|
85
|
-
anObject.open_mode = @open_mode
|
86
|
-
end
|
87
|
-
@output = anObject
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
def error= ( anObject )
|
92
|
-
if anObject.is_a? Pathname
|
93
|
-
anObject = anObject.dup
|
94
|
-
anObject.open_mode = @open_mode
|
95
|
-
end
|
96
|
-
@error = anObject
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
def open_mode= ( mode )
|
101
|
-
raise ArgumentError, "bad mode #{mode} need :w or :a" if mode == :r
|
102
|
-
@open_mode = mode
|
103
|
-
end
|
104
|
-
|
105
|
-
|
106
|
-
have YamlExtension, :'commands::data'
|
107
|
-
|
108
|
-
def to_yaml_string
|
109
|
-
suppress(IOError) { out = output.read }
|
110
|
-
suppress(IOError) { err = error.read }
|
111
|
-
out ||= ''
|
112
|
-
err ||= ''
|
113
|
-
|
114
|
-
msg = []
|
115
|
-
msg << "exit: #{status.exitstatus}" unless status.nil?
|
116
|
-
unless out.empty?
|
117
|
-
out.gsub!(/^/, ' ')
|
118
|
-
msg << "output: |\n #{out}"
|
119
|
-
end
|
120
|
-
unless err.empty?
|
121
|
-
err.gsub!(/^/, ' ')
|
122
|
-
msg << "error: |\n #{err}"
|
123
|
-
end
|
124
|
-
"\n" + msg.join("\n")
|
125
|
-
end
|
126
|
-
|
127
|
-
def kill ( sig='KILL' )
|
128
|
-
Process.kill sig, @pid if @status.nil? and not @pid.nil?
|
129
|
-
waitpid
|
130
|
-
end
|
131
|
-
|
132
|
-
def clean
|
133
|
-
kill
|
134
|
-
[input, output, error].each do |stream|
|
135
|
-
next if stream.nil? or stream.is_a? IO
|
136
|
-
if stream.is_a? File
|
137
|
-
stream.close
|
138
|
-
stream = stream.path.to_path
|
139
|
-
end
|
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})"
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
def self.clean_all
|
151
|
-
@@datas.dup.each { |data| data.clean }
|
152
|
-
end
|
153
|
-
|
154
|
-
at_exit { clean_all }
|
155
|
-
|
156
|
-
end # class Data
|
157
|
-
|
158
|
-
end # module Datas
|
159
|
-
|
160
|
-
end # module Commands
|
@@ -1,74 +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/datas/factory.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Datas
|
9
|
-
|
10
|
-
class Factory < self::Data
|
11
|
-
|
12
|
-
attr_accessor :command_data_class
|
13
|
-
|
14
|
-
def initialize ( values={}, *a, &b )
|
15
|
-
super(*a, &b)
|
16
|
-
values.each do |k, v|
|
17
|
-
send("#{k}=", v)
|
18
|
-
end
|
19
|
-
@command_data_class ||= Temp
|
20
|
-
end
|
21
|
-
|
22
|
-
def new_command_data ( *a, &b )
|
23
|
-
data = @command_data_class.new(*a, &b)
|
24
|
-
instance_variables.each do |var|
|
25
|
-
next if var == '@command_data_class'
|
26
|
-
next if var =~ /^@__/
|
27
|
-
val = instance_variable_get(var)
|
28
|
-
data.send(var[1..-1] + '=', val) unless val.nil?
|
29
|
-
end
|
30
|
-
data
|
31
|
-
end
|
32
|
-
|
33
|
-
def create ( *a, &b )
|
34
|
-
new_command_data(*a, &b)
|
35
|
-
end
|
36
|
-
|
37
|
-
end # class Factory
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
test_section __FILE__ do
|
43
|
-
|
44
|
-
class FactoryTest < Test::Unit::TestCase
|
45
|
-
|
46
|
-
def setup
|
47
|
-
assert_nothing_raised { @fa = Factory.new }
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_0_initialize
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_new_command_data
|
54
|
-
assert_nothing_raised do
|
55
|
-
assert_kind_of(Data, @fa.create)
|
56
|
-
assert_kind_of(Data, @fa.new_command_data)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_simple
|
61
|
-
assert_nothing_raised do
|
62
|
-
@fa.pid = 42
|
63
|
-
@data = @fa.create
|
64
|
-
end
|
65
|
-
assert_equal(42, @data.pid)
|
66
|
-
end
|
67
|
-
|
68
|
-
end # class FactoryTest
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
end # module Datas
|
73
|
-
|
74
|
-
end # module Commands
|
data/lib/commands/datas/pipe.rb
DELETED
@@ -1,52 +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/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
DELETED
@@ -1,24 +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/datas/temp.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Datas
|
9
|
-
|
10
|
-
class Temp < self::Data
|
11
|
-
|
12
|
-
def initialize ( *a, &b )
|
13
|
-
super
|
14
|
-
@output = TempPath.new('cmd-output')
|
15
|
-
@output.open_mode = :w
|
16
|
-
@error = TempPath.new('cmd-error')
|
17
|
-
@error.open_mode = :w
|
18
|
-
end
|
19
|
-
|
20
|
-
end # class Temp
|
21
|
-
|
22
|
-
end # module Datas
|
23
|
-
|
24
|
-
end # module Commands
|
data/lib/commands/factory.rb
DELETED
@@ -1,65 +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/factory.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
class Factory < Command
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
super(nil)
|
12
|
-
@command_class = Command
|
13
|
-
end
|
14
|
-
|
15
|
-
def new_command ( *a, &b )
|
16
|
-
cmd = @command_class.new(*a, &b)
|
17
|
-
instance_variables.each do |var|
|
18
|
-
next if var =~ /^@command(_class)?$/
|
19
|
-
cmd.send(var[1..-1] + '=', instance_variable_get(var))
|
20
|
-
end
|
21
|
-
cmd
|
22
|
-
end
|
23
|
-
|
24
|
-
alias :create :new_command
|
25
|
-
|
26
|
-
end # class Factory
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
test_section __FILE__ do
|
31
|
-
|
32
|
-
class FactoryTest < Test::Unit::TestCase
|
33
|
-
|
34
|
-
def setup
|
35
|
-
assert_nothing_raised { @fa = Factory.new }
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_0_initialize
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_new_command
|
42
|
-
assert_nothing_raised do
|
43
|
-
assert_kind_of(Command, @fa.create('wc'))
|
44
|
-
assert_kind_of(Command, @fa.new_command('ls'))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_simple
|
49
|
-
assert_nothing_raised do
|
50
|
-
@fa << 42
|
51
|
-
@fa.input = 'inp'
|
52
|
-
@fa = @fa > 'out'
|
53
|
-
@cmd = @fa.create('foo')
|
54
|
-
end
|
55
|
-
assert_equal('foo', @cmd.command)
|
56
|
-
assert_equal(42, @cmd.args.first)
|
57
|
-
assert_equal('inp', @cmd.input)
|
58
|
-
assert_equal('out', @cmd.output)
|
59
|
-
end
|
60
|
-
|
61
|
-
end # class FactoryTest
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
end # module Commands
|