ruby_ex 0.1.1
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/AUTHORS +51 -0
- data/ChangeLog +1763 -0
- data/NEWS +3 -0
- data/README +1 -0
- data/Rakefile +8 -0
- data/SPEC.dyn.yml +10 -0
- data/SPEC.gem.yml +269 -0
- data/SPEC.yml +36 -0
- data/src/abstract.rb +253 -0
- data/src/abstract_node.rb +85 -0
- data/src/algorithms.rb +12 -0
- data/src/algorithms/simulated_annealing.rb +142 -0
- data/src/ask.rb +100 -0
- data/src/attributed_class.rb +303 -0
- data/src/cache.rb +350 -0
- data/src/checkout.rb +12 -0
- data/src/choose.rb +271 -0
- data/src/commands.rb +20 -0
- data/src/commands/command.rb +492 -0
- data/src/commands/datas.rb +16 -0
- data/src/commands/datas/composite.rb +31 -0
- data/src/commands/datas/data.rb +65 -0
- data/src/commands/datas/factory.rb +69 -0
- data/src/commands/datas/temp.rb +26 -0
- data/src/commands/factory.rb +67 -0
- data/src/commands/helpers.rb +81 -0
- data/src/commands/pipe.rb +66 -0
- data/src/commands/runners.rb +16 -0
- data/src/commands/runners/exec.rb +50 -0
- data/src/commands/runners/fork.rb +130 -0
- data/src/commands/runners/runner.rb +140 -0
- data/src/commands/runners/system.rb +57 -0
- data/src/commands/seq.rb +32 -0
- data/src/config_file.rb +95 -0
- data/src/const_regexp.rb +57 -0
- data/src/daemon.rb +135 -0
- data/src/diff.rb +665 -0
- data/src/dlogger.rb +62 -0
- data/src/drb/drb_observable.rb +95 -0
- data/src/drb/drb_observable_pool.rb +27 -0
- data/src/drb/drb_service.rb +44 -0
- data/src/drb/drb_undumped_attributes.rb +56 -0
- data/src/drb/drb_undumped_indexed_object.rb +55 -0
- data/src/drb/insecure_protected_methods.rb +101 -0
- data/src/drb_ex.rb +12 -0
- data/src/dumpable_proc.rb +57 -0
- data/src/filetype.rb +229 -0
- data/src/generate_id.rb +44 -0
- data/src/histogram.rb +222 -0
- data/src/hookable.rb +283 -0
- data/src/hooker.rb +54 -0
- data/src/indexed_node.rb +65 -0
- data/src/io_marshal.rb +99 -0
- data/src/ioo.rb +193 -0
- data/src/labeled_node.rb +62 -0
- data/src/logger_observer.rb +24 -0
- data/src/md5sum.rb +70 -0
- data/src/module/autoload_tree.rb +65 -0
- data/src/module/hierarchy.rb +334 -0
- data/src/module/instance_method_visibility.rb +71 -0
- data/src/node.rb +81 -0
- data/src/object_monitor.rb +143 -0
- data/src/object_monitor_activity.rb +34 -0
- data/src/observable.rb +138 -0
- data/src/observable_pool.rb +291 -0
- data/src/orderedhash.rb +252 -0
- data/src/pp_hierarchy.rb +30 -0
- data/src/random_generators.rb +29 -0
- data/src/random_generators/random_generator.rb +33 -0
- data/src/random_generators/ruby.rb +25 -0
- data/src/ruby_ex.rb +124 -0
- data/src/safe_eval.rb +346 -0
- data/src/sendmail.rb +214 -0
- data/src/service_manager.rb +122 -0
- data/src/shuffle.rb +30 -0
- data/src/spring.rb +134 -0
- data/src/spring_set.rb +134 -0
- data/src/symtbl.rb +108 -0
- data/src/synflow.rb +474 -0
- data/src/thread_mutex.rb +11 -0
- data/src/timeout_ex.rb +79 -0
- data/src/trace.rb +26 -0
- data/src/uri/druby.rb +78 -0
- data/src/uri/file.rb +63 -0
- data/src/uri/ftp_ex.rb +36 -0
- data/src/uri/http_ex.rb +41 -0
- data/src/uri/pgsql.rb +136 -0
- data/src/uri/ssh.rb +87 -0
- data/src/uri/svn.rb +113 -0
- data/src/uri_ex.rb +71 -0
- data/src/verbose_object.rb +70 -0
- data/src/yaml/basenode_ext.rb +63 -0
- data/src/yaml/chop_header.rb +24 -0
- data/src/yaml/transform.rb +450 -0
- data/src/yaml/yregexpath.rb +76 -0
- data/test/algorithms/simulated_annealing_test.rb +102 -0
- data/test/check-pkg-ruby_ex.yml +15 -0
- data/test/check-ruby_ex.yml +12 -0
- data/test/resources/autoload_tree/A.rb +11 -0
- data/test/resources/autoload_tree/B.rb +10 -0
- data/test/resources/autoload_tree/foo/C.rb +18 -0
- data/test/resources/foo.txt +6 -0
- data/test/sanity-suite.yml +12 -0
- data/test/sanity/multiple-requires.yml +20 -0
- data/test/sanity/single-requires.yml +24 -0
- data/test/test-unit-setup.rb +6 -0
- data/test/unit-suite.yml +14 -0
- metadata +269 -0
@@ -0,0 +1,16 @@
|
|
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: datas.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Datas
|
11
|
+
|
12
|
+
autoloaded_module(__FILE__, false)
|
13
|
+
|
14
|
+
end # module Datas
|
15
|
+
|
16
|
+
end # module Commands
|
@@ -0,0 +1,31 @@
|
|
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: composite.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Datas
|
11
|
+
|
12
|
+
class Composite < Data
|
13
|
+
|
14
|
+
def initialize ( *cmd )
|
15
|
+
@commands = cmd.flatten
|
16
|
+
end
|
17
|
+
|
18
|
+
def each ( &block )
|
19
|
+
@commands.each(&block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def waitpid
|
23
|
+
each { |x| x.waitpid }
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end # class Composite
|
28
|
+
|
29
|
+
end # module Datas
|
30
|
+
|
31
|
+
end # module Commands
|
@@ -0,0 +1,65 @@
|
|
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: data.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Datas
|
11
|
+
|
12
|
+
#
|
13
|
+
# A CommandData instance contains all information returned by a Command#run:
|
14
|
+
#
|
15
|
+
# * It's exit status:
|
16
|
+
# - Exit number.
|
17
|
+
# - Signals
|
18
|
+
# - ...
|
19
|
+
#
|
20
|
+
# * It's outputs:
|
21
|
+
# - What it writes on stdout.
|
22
|
+
# - stderr.
|
23
|
+
class Data
|
24
|
+
|
25
|
+
attr_accessor :pid
|
26
|
+
attr_accessor :input
|
27
|
+
attr_accessor :output
|
28
|
+
attr_accessor :error
|
29
|
+
attr_accessor :status
|
30
|
+
|
31
|
+
|
32
|
+
def waitpid
|
33
|
+
return @status unless @status.nil?
|
34
|
+
Process.waitpid(@pid)
|
35
|
+
@status = $?
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def | ( rhs ) # FIXME CHECK ME
|
40
|
+
raise unless rhs.is_a? Command
|
41
|
+
rhs < output
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def method_missing ( meth, *a, &b )
|
46
|
+
if output.respond_to?(meth)
|
47
|
+
output.send(meth, *a, &b)
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def display ( out=STDOUT, err=STDERR )
|
55
|
+
waitpid
|
56
|
+
out.print @output.read
|
57
|
+
err.print @error.read
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
end # class Data
|
62
|
+
|
63
|
+
end # module Datas
|
64
|
+
|
65
|
+
end # module Commands
|
@@ -0,0 +1,69 @@
|
|
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: factory.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Datas
|
11
|
+
|
12
|
+
class Factory < Data
|
13
|
+
|
14
|
+
attr_accessor :command_data_class
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@command_data_class = Temp
|
18
|
+
end
|
19
|
+
|
20
|
+
def new_command_data ( *a, &b )
|
21
|
+
data = @command_data_class.new(*a, &b)
|
22
|
+
instance_variables.each do |var|
|
23
|
+
next if var =~ /command_data_class/
|
24
|
+
val = instance_variable_get(var)
|
25
|
+
data.send(var[1..-1] + '=', val) unless val.nil?
|
26
|
+
end
|
27
|
+
data
|
28
|
+
end
|
29
|
+
|
30
|
+
alias :create :new_command_data
|
31
|
+
|
32
|
+
end # class Factory
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
test_section __FILE__ do
|
38
|
+
|
39
|
+
class FactoryTest < Test::Unit::TestCase
|
40
|
+
|
41
|
+
def setup
|
42
|
+
assert_nothing_raised { @fa = Factory.new }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_0_initialize
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_new_command_data
|
49
|
+
assert_nothing_raised do
|
50
|
+
assert_kind_of(Data, @fa.create)
|
51
|
+
assert_kind_of(Data, @fa.new_command_data)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_simple
|
56
|
+
assert_nothing_raised do
|
57
|
+
@fa.pid = 42
|
58
|
+
@data = @fa.create
|
59
|
+
end
|
60
|
+
assert_equal(42, @data.pid)
|
61
|
+
end
|
62
|
+
|
63
|
+
end # class FactoryTest
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end # module Datas
|
68
|
+
|
69
|
+
end # module Commands
|
@@ -0,0 +1,26 @@
|
|
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: temp.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Datas
|
11
|
+
|
12
|
+
class Temp < Data
|
13
|
+
|
14
|
+
def initialize ( *a, &b )
|
15
|
+
super
|
16
|
+
@output = TempPath.new('cmd-output')
|
17
|
+
@output.open_mode = 'w'
|
18
|
+
@error = TempPath.new('cmd-error')
|
19
|
+
@error.open_mode = 'w'
|
20
|
+
end
|
21
|
+
|
22
|
+
end # class Temp
|
23
|
+
|
24
|
+
end # module Datas
|
25
|
+
|
26
|
+
end # module Commands
|
@@ -0,0 +1,67 @@
|
|
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: factory.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
class Factory < Command
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
super(nil)
|
14
|
+
@command_class = Command
|
15
|
+
end
|
16
|
+
|
17
|
+
def new_command ( *a, &b )
|
18
|
+
cmd = @command_class.new(*a, &b)
|
19
|
+
instance_variables.each do |var|
|
20
|
+
next if var =~ /^@command(_class)?$/
|
21
|
+
cmd.send(var[1..-1] + '=', instance_variable_get(var))
|
22
|
+
end
|
23
|
+
cmd
|
24
|
+
end
|
25
|
+
|
26
|
+
alias :create :new_command
|
27
|
+
|
28
|
+
end # class Factory
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
test_section __FILE__ do
|
33
|
+
|
34
|
+
class FactoryTest < Test::Unit::TestCase
|
35
|
+
|
36
|
+
def setup
|
37
|
+
assert_nothing_raised { @fa = Factory.new }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_0_initialize
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_new_command
|
44
|
+
assert_nothing_raised do
|
45
|
+
assert_kind_of(Command, @fa.create('wc'))
|
46
|
+
assert_kind_of(Command, @fa.new_command('ls'))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_simple
|
51
|
+
assert_nothing_raised do
|
52
|
+
@fa << 42
|
53
|
+
@fa.input = 'inp'
|
54
|
+
@fa = @fa > 'out'
|
55
|
+
@cmd = @fa.create('foo')
|
56
|
+
end
|
57
|
+
assert_equal('foo', @cmd.command)
|
58
|
+
assert_equal(42, @cmd.args.first)
|
59
|
+
assert_equal('inp', @cmd.input)
|
60
|
+
assert_equal('out', @cmd.output)
|
61
|
+
end
|
62
|
+
|
63
|
+
end # class FactoryTest
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end # module Commands
|
@@ -0,0 +1,81 @@
|
|
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: helpers.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
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 when no quotations are used.
|
26
|
+
#
|
27
|
+
# Do not touch the String and give as one argument.
|
28
|
+
def to_cmd
|
29
|
+
if self =~ /['"`]/
|
30
|
+
Command.new(self)
|
31
|
+
else
|
32
|
+
Command.new(*split(/\s+/))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_io_for_commands
|
37
|
+
tmp = TempPath.new
|
38
|
+
tmp.open('w') { |f| f.write self }
|
39
|
+
tmp.to_io_for_commands
|
40
|
+
end
|
41
|
+
|
42
|
+
end # class ::String
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
class ::Array
|
47
|
+
|
48
|
+
def to_cmd
|
49
|
+
Command.new(*self)
|
50
|
+
end
|
51
|
+
|
52
|
+
end # class ::Array
|
53
|
+
|
54
|
+
end # module Helpers
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
test_section __FILE__ do
|
59
|
+
|
60
|
+
class HelpersTest < Test::Unit::TestCase
|
61
|
+
|
62
|
+
def test_string_to_cmd
|
63
|
+
assert_equal(['foo', 'bar'], "foo bar".to_cmd.to_a)
|
64
|
+
|
65
|
+
assert_equal(['foo', 'b/ar', 'qu44x32'],
|
66
|
+
"foo b/ar \t \n qu44x32".to_cmd.to_a)
|
67
|
+
|
68
|
+
s = "foo 'b/ar \t' \n qu44x32"
|
69
|
+
assert_equal([s], s.to_cmd.to_a)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_array_to_cmd
|
73
|
+
a = ['foo', "b/ar \t", "\n qu44x32"]
|
74
|
+
assert_equal(a, a.to_cmd.to_a)
|
75
|
+
end
|
76
|
+
|
77
|
+
end # class HelpersTest
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end # module Commands
|
@@ -0,0 +1,66 @@
|
|
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: pipe.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
class Pipe < Command
|
11
|
+
|
12
|
+
def initialize ( *cmds )
|
13
|
+
@cmds = cmds.map { |x| x.dup }
|
14
|
+
end
|
15
|
+
|
16
|
+
def run ( *a )
|
17
|
+
pids = []
|
18
|
+
([nil] + @cmds).zip(@cmds + [nil]).each do |cmd1, cmd2|
|
19
|
+
next if cmd1.nil? or cmd2.nil?
|
20
|
+
rd, wr = IO.pipe
|
21
|
+
cmd1.output = wr
|
22
|
+
cmd2.input = rd
|
23
|
+
pids << Kernel.fork do
|
24
|
+
rd.close
|
25
|
+
cmd1.exec
|
26
|
+
end
|
27
|
+
wr.close
|
28
|
+
end
|
29
|
+
pids << Kernel.fork do
|
30
|
+
@cmds.last.exec
|
31
|
+
end
|
32
|
+
pids.each { |pid| Process.waitpid pid }
|
33
|
+
end
|
34
|
+
|
35
|
+
def input= ( arg )
|
36
|
+
@cmds.first.input = arg
|
37
|
+
end
|
38
|
+
|
39
|
+
def input
|
40
|
+
@cmds.first.input
|
41
|
+
end
|
42
|
+
|
43
|
+
def output= ( arg )
|
44
|
+
@cmds.last.output = arg
|
45
|
+
end
|
46
|
+
|
47
|
+
def output
|
48
|
+
@cmds.last.output
|
49
|
+
end
|
50
|
+
|
51
|
+
def error= ( arg )
|
52
|
+
@cmds.last.error = arg
|
53
|
+
end
|
54
|
+
|
55
|
+
def error
|
56
|
+
@cmds.last.error
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_sh
|
60
|
+
strs = @cmds.map { |cmd| "(#{cmd.to_sh})" }
|
61
|
+
"(#{strs.join(' | ')})#{sh_args}"
|
62
|
+
end
|
63
|
+
|
64
|
+
end # class Pipe
|
65
|
+
|
66
|
+
end # module Commands
|
@@ -0,0 +1,16 @@
|
|
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: runners.rb 255 2005-06-01 00:08:46Z ertai $
|
5
|
+
|
6
|
+
require 'commands'
|
7
|
+
|
8
|
+
module Commands
|
9
|
+
|
10
|
+
module Runners
|
11
|
+
|
12
|
+
autoloaded_module(__FILE__, false)
|
13
|
+
|
14
|
+
end # module Runners
|
15
|
+
|
16
|
+
end # module Commands
|