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.
Files changed (108) hide show
  1. data/AUTHORS +51 -0
  2. data/ChangeLog +1763 -0
  3. data/NEWS +3 -0
  4. data/README +1 -0
  5. data/Rakefile +8 -0
  6. data/SPEC.dyn.yml +10 -0
  7. data/SPEC.gem.yml +269 -0
  8. data/SPEC.yml +36 -0
  9. data/src/abstract.rb +253 -0
  10. data/src/abstract_node.rb +85 -0
  11. data/src/algorithms.rb +12 -0
  12. data/src/algorithms/simulated_annealing.rb +142 -0
  13. data/src/ask.rb +100 -0
  14. data/src/attributed_class.rb +303 -0
  15. data/src/cache.rb +350 -0
  16. data/src/checkout.rb +12 -0
  17. data/src/choose.rb +271 -0
  18. data/src/commands.rb +20 -0
  19. data/src/commands/command.rb +492 -0
  20. data/src/commands/datas.rb +16 -0
  21. data/src/commands/datas/composite.rb +31 -0
  22. data/src/commands/datas/data.rb +65 -0
  23. data/src/commands/datas/factory.rb +69 -0
  24. data/src/commands/datas/temp.rb +26 -0
  25. data/src/commands/factory.rb +67 -0
  26. data/src/commands/helpers.rb +81 -0
  27. data/src/commands/pipe.rb +66 -0
  28. data/src/commands/runners.rb +16 -0
  29. data/src/commands/runners/exec.rb +50 -0
  30. data/src/commands/runners/fork.rb +130 -0
  31. data/src/commands/runners/runner.rb +140 -0
  32. data/src/commands/runners/system.rb +57 -0
  33. data/src/commands/seq.rb +32 -0
  34. data/src/config_file.rb +95 -0
  35. data/src/const_regexp.rb +57 -0
  36. data/src/daemon.rb +135 -0
  37. data/src/diff.rb +665 -0
  38. data/src/dlogger.rb +62 -0
  39. data/src/drb/drb_observable.rb +95 -0
  40. data/src/drb/drb_observable_pool.rb +27 -0
  41. data/src/drb/drb_service.rb +44 -0
  42. data/src/drb/drb_undumped_attributes.rb +56 -0
  43. data/src/drb/drb_undumped_indexed_object.rb +55 -0
  44. data/src/drb/insecure_protected_methods.rb +101 -0
  45. data/src/drb_ex.rb +12 -0
  46. data/src/dumpable_proc.rb +57 -0
  47. data/src/filetype.rb +229 -0
  48. data/src/generate_id.rb +44 -0
  49. data/src/histogram.rb +222 -0
  50. data/src/hookable.rb +283 -0
  51. data/src/hooker.rb +54 -0
  52. data/src/indexed_node.rb +65 -0
  53. data/src/io_marshal.rb +99 -0
  54. data/src/ioo.rb +193 -0
  55. data/src/labeled_node.rb +62 -0
  56. data/src/logger_observer.rb +24 -0
  57. data/src/md5sum.rb +70 -0
  58. data/src/module/autoload_tree.rb +65 -0
  59. data/src/module/hierarchy.rb +334 -0
  60. data/src/module/instance_method_visibility.rb +71 -0
  61. data/src/node.rb +81 -0
  62. data/src/object_monitor.rb +143 -0
  63. data/src/object_monitor_activity.rb +34 -0
  64. data/src/observable.rb +138 -0
  65. data/src/observable_pool.rb +291 -0
  66. data/src/orderedhash.rb +252 -0
  67. data/src/pp_hierarchy.rb +30 -0
  68. data/src/random_generators.rb +29 -0
  69. data/src/random_generators/random_generator.rb +33 -0
  70. data/src/random_generators/ruby.rb +25 -0
  71. data/src/ruby_ex.rb +124 -0
  72. data/src/safe_eval.rb +346 -0
  73. data/src/sendmail.rb +214 -0
  74. data/src/service_manager.rb +122 -0
  75. data/src/shuffle.rb +30 -0
  76. data/src/spring.rb +134 -0
  77. data/src/spring_set.rb +134 -0
  78. data/src/symtbl.rb +108 -0
  79. data/src/synflow.rb +474 -0
  80. data/src/thread_mutex.rb +11 -0
  81. data/src/timeout_ex.rb +79 -0
  82. data/src/trace.rb +26 -0
  83. data/src/uri/druby.rb +78 -0
  84. data/src/uri/file.rb +63 -0
  85. data/src/uri/ftp_ex.rb +36 -0
  86. data/src/uri/http_ex.rb +41 -0
  87. data/src/uri/pgsql.rb +136 -0
  88. data/src/uri/ssh.rb +87 -0
  89. data/src/uri/svn.rb +113 -0
  90. data/src/uri_ex.rb +71 -0
  91. data/src/verbose_object.rb +70 -0
  92. data/src/yaml/basenode_ext.rb +63 -0
  93. data/src/yaml/chop_header.rb +24 -0
  94. data/src/yaml/transform.rb +450 -0
  95. data/src/yaml/yregexpath.rb +76 -0
  96. data/test/algorithms/simulated_annealing_test.rb +102 -0
  97. data/test/check-pkg-ruby_ex.yml +15 -0
  98. data/test/check-ruby_ex.yml +12 -0
  99. data/test/resources/autoload_tree/A.rb +11 -0
  100. data/test/resources/autoload_tree/B.rb +10 -0
  101. data/test/resources/autoload_tree/foo/C.rb +18 -0
  102. data/test/resources/foo.txt +6 -0
  103. data/test/sanity-suite.yml +12 -0
  104. data/test/sanity/multiple-requires.yml +20 -0
  105. data/test/sanity/single-requires.yml +24 -0
  106. data/test/test-unit-setup.rb +6 -0
  107. data/test/unit-suite.yml +14 -0
  108. 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