ruby_ex 0.1.2 → 0.2.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.
Files changed (122) hide show
  1. data/ChangeLog +693 -0
  2. data/NEWS +74 -0
  3. data/SPEC.dyn.yml +6 -6
  4. data/SPEC.gemspec +14 -0
  5. data/SPEC.yml +4 -4
  6. data/lib/abstract.rb +2 -4
  7. data/lib/abstract_node.rb +1 -2
  8. data/lib/algorithms/simulated_annealing.rb +50 -29
  9. data/lib/attributed_class.rb +50 -21
  10. data/lib/auto_object.rb +102 -0
  11. data/lib/blank_slate.rb +102 -0
  12. data/lib/cache.rb +1 -2
  13. data/lib/choose.rb +165 -163
  14. data/lib/commands.rb +2 -3
  15. data/lib/commands/command.rb +47 -20
  16. data/lib/commands/datas.rb +1 -1
  17. data/lib/commands/datas/composite.rb +5 -1
  18. data/lib/commands/datas/data.rb +102 -5
  19. data/lib/commands/datas/factory.rb +13 -6
  20. data/lib/commands/datas/temp.rb +3 -5
  21. data/lib/commands/factory.rb +1 -1
  22. data/lib/commands/helpers.rb +1 -1
  23. data/lib/commands/pipe.rb +10 -1
  24. data/lib/commands/runners.rb +1 -1
  25. data/lib/commands/runners/exec.rb +1 -1
  26. data/lib/commands/runners/fork.rb +3 -16
  27. data/lib/commands/runners/mock.rb +67 -0
  28. data/lib/commands/runners/runner.rb +5 -3
  29. data/lib/commands/runners/system.rb +1 -1
  30. data/lib/commands/seq.rb +2 -1
  31. data/lib/config_file.rb +10 -2
  32. data/lib/const_regexp.rb +1 -2
  33. data/lib/{dlogger.rb → d_logger.rb} +1 -2
  34. data/lib/daemon.rb +1 -2
  35. data/lib/diff.rb +1 -2
  36. data/lib/drb/drb_observable.rb +1 -2
  37. data/lib/drb/drb_observable_pool.rb +2 -2
  38. data/lib/drb/drb_service.rb +1 -2
  39. data/lib/drb/drb_undumped_attributes.rb +1 -2
  40. data/lib/drb/drb_undumped_indexed_object.rb +1 -2
  41. data/lib/drb/insecure_protected_methods.rb +1 -2
  42. data/lib/drb_ex.rb +2 -2
  43. data/lib/file_type.rb +466 -0
  44. data/lib/generate_id.rb +12 -6
  45. data/lib/genpasswd.rb +22 -0
  46. data/lib/hash_eval.rb +83 -0
  47. data/lib/histogram.rb +1 -2
  48. data/lib/hookable.rb +3 -4
  49. data/lib/hooker.rb +1 -3
  50. data/lib/html_encode.rb +191 -0
  51. data/lib/indexed_node.rb +0 -1
  52. data/lib/io_marshal.rb +4 -2
  53. data/lib/ioo.rb +3 -2
  54. data/lib/kill_all.rb +46 -0
  55. data/lib/labeled_node.rb +0 -1
  56. data/lib/logger_observer.rb +8 -4
  57. data/lib/md5sum.rb +3 -3
  58. data/lib/meta_factory.rb +99 -0
  59. data/lib/method_call.rb +87 -0
  60. data/lib/mocks.rb +12 -0
  61. data/lib/mocks/assertions.rb +50 -0
  62. data/lib/mocks/method_logger.rb +40 -0
  63. data/lib/mocks/mock.rb +64 -0
  64. data/lib/mocks/object.rb +47 -0
  65. data/lib/mocks/observer.rb +38 -0
  66. data/lib/module/autoload_tree.rb +30 -29
  67. data/lib/module/hierarchy.rb +176 -171
  68. data/lib/module/instance_method_visibility.rb +39 -38
  69. data/lib/node.rb +0 -1
  70. data/lib/object_monitor.rb +1 -2
  71. data/lib/object_monitor_activity.rb +1 -2
  72. data/lib/observable.rb +1 -2
  73. data/lib/observable_pool.rb +1 -2
  74. data/lib/{orderedhash.rb → ordered_hash.rb} +41 -5
  75. data/lib/pp_hierarchy.rb +7 -2
  76. data/lib/r_path.rb +307 -0
  77. data/lib/random_generators.rb +7 -20
  78. data/lib/random_generators/random_generator.rb +2 -4
  79. data/lib/random_generators/ruby.rb +4 -2
  80. data/lib/regex_path.rb +124 -0
  81. data/lib/ruby_ex.rb +28 -98
  82. data/lib/safe_eval.rb +1 -2
  83. data/lib/sendmail.rb +14 -17
  84. data/lib/service_manager.rb +1 -2
  85. data/lib/shuffle.rb +6 -2
  86. data/lib/spring.rb +1 -2
  87. data/lib/spring_set.rb +1 -2
  88. data/lib/{symtbl.rb → sym_tbl.rb} +90 -5
  89. data/lib/sym_tbl_gsub.rb +227 -0
  90. data/lib/{synflow.rb → syn_flow.rb} +1 -2
  91. data/lib/text.rb +218 -0
  92. data/lib/timeout_ex.rb +1 -2
  93. data/lib/trace.rb +9 -8
  94. data/lib/uri/druby.rb +1 -2
  95. data/lib/uri/file.rb +1 -1
  96. data/lib/uri/ftp_ex.rb +1 -1
  97. data/lib/uri/http_ex.rb +1 -1
  98. data/lib/uri/mysql.rb +121 -0
  99. data/lib/uri/pgsql.rb +19 -38
  100. data/lib/uri/svn.rb +1 -2
  101. data/lib/uri_ex.rb +45 -3
  102. data/lib/verbose_object.rb +181 -38
  103. data/lib/yaml/chop_header.rb +19 -11
  104. data/lib/yaml/transform.rb +17 -11
  105. data/lib/yaml/yregexpath.rb +11 -5
  106. data/test/algorithms/simulated_annealing_test.rb +2 -2
  107. data/test/resources/foo.tar.gz +0 -0
  108. data/test/resources/tar.gz.log +49 -0
  109. data/test/sanity-suite.yml +5 -7
  110. data/test/sanity/multiple-requires.yml +17 -7
  111. data/test/sanity/single-requires.yml +38 -20
  112. data/test/stress-tests/threads_and_exceptions.yml +13 -0
  113. data/test/test-unit-setup.rb +3 -1
  114. data/test/unit-suite.yml +7 -8
  115. metadata +42 -31
  116. data/lib/algorithms.rb +0 -12
  117. data/lib/ask.rb +0 -100
  118. data/lib/checkout.rb +0 -12
  119. data/lib/dumpable_proc.rb +0 -57
  120. data/lib/filetype.rb +0 -229
  121. data/lib/thread_mutex.rb +0 -11
  122. data/lib/yaml/basenode_ext.rb +0 -63
data/lib/labeled_node.rb CHANGED
@@ -6,7 +6,6 @@
6
6
  # $Id: node.rb 171 2005-03-29 09:12:47Z polrop $
7
7
 
8
8
 
9
- require 'ruby_ex'
10
9
  require 'abstract_node'
11
10
 
12
11
 
@@ -3,14 +3,12 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: logger_observer.rb 279 2005-06-05 17:46:53Z ertai $
6
+ # $Id: logger_observer.rb 339 2005-09-06 23:27:27Z ertai $
7
7
 
8
8
 
9
- require 'ruby_ex'
10
9
  require 'logger'
11
10
 
12
-
13
- class Logger
11
+ module LoggerObserver
14
12
 
15
13
  def update(*args, &block)
16
14
  severity = UNKNOWN
@@ -20,5 +18,11 @@ class Logger
20
18
  add(severity, "#{args.inspect} #{block.inspect if block}", $PROGRAME_NAME)
21
19
  end
22
20
 
21
+ end # module LoggerObserver
22
+
23
+ class Logger
24
+
25
+ include LoggerObserver
26
+
23
27
  end # class Logger
24
28
 
data/lib/md5sum.rb CHANGED
@@ -3,12 +3,13 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: md5sum.rb 279 2005-06-05 17:46:53Z ertai $
6
+ # $Id: md5sum.rb 339 2005-09-06 23:27:27Z ertai $
7
7
 
8
8
 
9
- require 'ruby_ex'
10
9
  require 'md5'
11
10
 
11
+ module Md5sum
12
+ end # module Md5sum
12
13
 
13
14
  class File
14
15
 
@@ -44,7 +45,6 @@ end # class Pathname
44
45
  test_section __FILE__ do
45
46
 
46
47
 
47
- require 'ruby_ex'
48
48
 
49
49
 
50
50
  class MD5SumTest < Test::Unit::TestCase
@@ -0,0 +1,99 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: meta_factory.rb 349 2005-09-12 07:59:21Z ertai $
5
+
6
+
7
+ class MetaFactory
8
+
9
+ def initialize ( aClass, *a, &b )
10
+ @record = nil
11
+ @class, @args, @block = aClass, a, b
12
+ end
13
+
14
+ def create ( prefix_args=[], postfix_args=[], &block )
15
+ args = prefix_args + @args + postfix_args
16
+ block = @block if block.nil?
17
+ anObject = @class.new(*args, &block)
18
+ @record[anObject] unless @record.nil?
19
+ anObject
20
+ end
21
+
22
+ alias_method :new, :create
23
+
24
+ # Record a block of actions which will be applied on the created object
25
+ #
26
+ # Example:
27
+ # factory = MetaFactory.new(MyClass, some, args, ...)
28
+ # factory.record do |o|
29
+ # o.foo = bar
30
+ # o.flou!
31
+ # ...
32
+ # end
33
+ # factory.create([some, args, to, prepend], [some, to append])
34
+ def record ( &block )
35
+ @record = block
36
+ end
37
+
38
+ end # class MetaFactory
39
+
40
+
41
+
42
+ test_section __FILE__ do
43
+
44
+ class TestMetaFactory < ::Test::Unit::TestCase
45
+ include Mocks::Assertions
46
+
47
+ module Mocks
48
+ class Class < ::Mocks::Object # FIXME ::Mocks:: const_missing issue
49
+ def initialize ( *a, &b )
50
+ super
51
+ @objects = []
52
+ end
53
+ def new ( *a, &b )
54
+ super
55
+ obj = ::Mocks::Object.new
56
+ @objects << obj
57
+ obj
58
+ end
59
+ end # class Class
60
+ end # module Mocks
61
+
62
+ def setup
63
+ @proc = Proc.new { 42 }
64
+ @proc2 = Proc.new { 43 }
65
+ @mock_class = Mocks::Class.new
66
+ self.mock_object = @mock_class
67
+ assert_nothing_raised { @factory = MetaFactory.new(@mock_class, 42, :foo => :bar, &@proc) }
68
+ assert_empty_mock
69
+ end
70
+
71
+ def teardown
72
+ end
73
+
74
+ def test_create
75
+ 10.times do
76
+ assert_nothing_raised { @instance = @factory.create }
77
+ assert_last_mock_call [:new, [42, {:foo=>:bar}], @proc]
78
+ end
79
+ assert_mock_size 10
80
+ end
81
+
82
+ def test_create_with_args
83
+ assert_nothing_raised { @instance = @factory.create([43], [:boo]) }
84
+ assert_last_mock_call [:new, [43, 42, {:foo=>:bar}, :boo], @proc]
85
+ assert_nothing_raised { @instance = @factory.create([45], &@proc2) }
86
+ assert_last_mock_call [:new, [45, 42, {:foo=>:bar}], @proc2]
87
+ end
88
+
89
+ def test_record
90
+ assert_nothing_raised { @factory.record { |o| o.foo(:bar, :qux) } }
91
+ assert_nothing_raised { @instance = @factory.create([43], [:boo]) }
92
+ assert_last_mock_call [:new, [43, 42, {:foo=>:bar}, :boo], @proc]
93
+ self.mock_object = @instance
94
+ assert_mock_calls [[:foo, [:bar, :qux]]]
95
+ end
96
+
97
+ end # class TestMetaFactory
98
+
99
+ end
@@ -0,0 +1,87 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: method_call.rb 339 2005-09-06 23:27:27Z ertai $
5
+
6
+
7
+ class MethodCall
8
+ attr_accessor :name, :args, :block
9
+
10
+ def initialize ( name, *args, &block )
11
+ @name, @args, @block = name, args, block
12
+ end
13
+
14
+ def recall ( anObject )
15
+ anObject.__send__(@name, *@args, &@block)
16
+ end
17
+
18
+ def to_a
19
+ ary = [@name]
20
+ unless @args.empty? and @block.nil?
21
+ if @args.size == 1
22
+ ary << @args.first
23
+ else
24
+ ary << @args
25
+ end
26
+ end
27
+ ary << @block unless @block.nil?
28
+ ary
29
+ end
30
+
31
+ def to_ruby ( caller )
32
+ case @name.to_s
33
+ when /^\w/
34
+ result = "#{caller}.#@name"
35
+ unless @args.empty?
36
+ args = @args.map { |arg| arg.inspect }.join(', ')
37
+ result += "(#{args})"
38
+ end
39
+ result += " { ... }" unless @block.nil?
40
+ result
41
+ when /([><=]=[>~=]?|[-+%^*\/&|])/
42
+ raise ArgumentError, "too many arguments" if @args.size != 1
43
+ "(#{caller} #@name #{@args.first.inspect})"
44
+ else raise ArgumentError, "unhandled method #@name"
45
+ end
46
+ end
47
+
48
+ end # class MethodCall
49
+
50
+
51
+ test_section __FILE__ do
52
+
53
+ class TestMethodCall < ::Test::Unit::TestCase
54
+
55
+ def setup
56
+ @proc = proc { 42 }
57
+ assert_nothing_raised do
58
+ @obj1 = MethodCall.new(:foo, 3, [4], &@proc)
59
+ @obj2 = MethodCall.new(:split, /:/)
60
+ @obj3 = MethodCall.new(:foo)
61
+ @obj4 = MethodCall.new(:foo, &@proc)
62
+ @obj5 = MethodCall.new(:foo, :bar)
63
+ @obj6 = MethodCall.new(:foo, 3, [4])
64
+ @obj7 = MethodCall.new(:foo, :bar, &@proc)
65
+ end
66
+ end
67
+
68
+ def test_init
69
+ end
70
+
71
+ def test_recall
72
+ assert_equal(%w[a b c], @obj2.recall("a:b:c"))
73
+ end
74
+
75
+ def test_to_a
76
+ assert_equal([:foo, [3, [4]], @proc], @obj1.to_a)
77
+ assert_equal([:split, /:/], @obj2.to_a)
78
+ assert_equal([:foo], @obj3.to_a)
79
+ assert_equal([:foo, [], @proc], @obj4.to_a)
80
+ assert_equal([:foo, :bar], @obj5.to_a)
81
+ assert_equal([:foo, [3, [4]]], @obj6.to_a)
82
+ assert_equal([:foo, :bar, @proc], @obj7.to_a)
83
+ end
84
+
85
+ end # class TestMethodCall
86
+
87
+ end
data/lib/mocks.rb ADDED
@@ -0,0 +1,12 @@
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: mocks.rb 344 2005-09-08 01:44:18Z ertai $
5
+
6
+ AutoloadTree.import!
7
+
8
+ module Mocks
9
+
10
+ autoloaded_module(__FILE__, false)
11
+
12
+ end # module Mocks
@@ -0,0 +1,50 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: assertions.rb 339 2005-09-06 23:27:27Z ertai $
5
+
6
+
7
+ module Mocks
8
+
9
+ module Assertions
10
+
11
+ attr_accessor :mock_object
12
+
13
+ def assert_mock ( *ref )
14
+ if ref.size == 1 and (f = ref.first).is_a? Array and f.first.is_a? Array
15
+ ref = f
16
+ end
17
+ assert_equal(ref, mock_object.mock_args)
18
+ end
19
+
20
+ def assert_mock_calls ( ref, comment='' )
21
+ assert_equal(ref, mock_object.mock_calls_array, comment)
22
+ end
23
+
24
+ def assert_mock_args ( ref, comment='' )
25
+ assert_equal(ref, mock_object.mock_args, comment)
26
+ end
27
+
28
+ def assert_empty_mock ( comment='' )
29
+ assert_mock_calls [], (comment.empty?)? 'not empty' : comment
30
+ end
31
+
32
+ def assert_last_mock ( *ref )
33
+ assert_equal(ref, mock_object.mock_calls.last.args)
34
+ end
35
+
36
+ def assert_last_mock_args ( ref, comment='' )
37
+ assert_equal(ref, mock_object.mock_calls_array.last.args, comment)
38
+ end
39
+
40
+ def assert_last_mock_call ( ref, comment='' )
41
+ assert_equal(ref, mock_object.mock_calls_array.last, comment)
42
+ end
43
+
44
+ def assert_mock_size ( size, comment='' )
45
+ assert_equal(size, mock_object.mock_size, comment)
46
+ end
47
+
48
+ end # module Assertions
49
+
50
+ end # module Mocks
@@ -0,0 +1,40 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: method_logger.rb 339 2005-09-06 23:27:27Z ertai $
5
+
6
+ require 'mocks'
7
+
8
+ module Mocks
9
+
10
+ class MethodLogger < Mock
11
+ concrete
12
+
13
+ def log ( *args, &block )
14
+ mock_add MethodCall.new(*args, &block)
15
+ end
16
+
17
+ end # class MethodLogger
18
+
19
+ test_section __FILE__ do
20
+
21
+ class TestMethodLogger < ::Test::Unit::TestCase
22
+ include Mocks::Assertions
23
+
24
+ def setup
25
+ @proc = proc { 43 }
26
+ @mock_object = Mocks::MethodLogger.new
27
+ end
28
+
29
+ def test_simple
30
+ @mock_object.log(:foo, :bar, 42, &@proc)
31
+ @mock_object.log(:bar)
32
+ assert_mock_calls [[:foo, [:bar, 42], @proc], [:bar]]
33
+ assert_mock [:bar, 42], []
34
+ end
35
+
36
+ end # class TestMethodLogger
37
+
38
+ end
39
+
40
+ end # module Mocks
data/lib/mocks/mock.rb ADDED
@@ -0,0 +1,64 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: mock.rb 344 2005-09-08 01:44:18Z ertai $
5
+
6
+ require 'mocks'
7
+
8
+ module Mocks
9
+
10
+ class Mock
11
+ include Abstract
12
+
13
+ attr_accessor :mock_calls
14
+
15
+ def initialize
16
+ @mock_calls = []
17
+ end
18
+
19
+ def mock_recall ( anObject )
20
+ result = nil
21
+ @mock_calls.each do |call|
22
+ result = call.recall anObject
23
+ end
24
+ result
25
+ end
26
+
27
+ def mock_calls_array
28
+ @mock_calls.map { |call| call.to_a }
29
+ end
30
+
31
+ def mock_args
32
+ @mock_calls.map { |call| call.args }
33
+ end
34
+
35
+ def mock_add ( elt )
36
+ @mock_calls << elt unless @mock_calls.frozen?
37
+ end
38
+
39
+ def mock_freeze
40
+ @mock_calls.freeze
41
+ end
42
+
43
+ def mock_clear
44
+ @mock_calls.clear
45
+ end
46
+
47
+ def mock_size
48
+ @mock_calls.size
49
+ end
50
+
51
+ end # class Mock
52
+
53
+ test_section __FILE__ do
54
+ class TestMock < ::Test::Unit::TestCase
55
+
56
+ def test_abstract
57
+ assert_raise(TypeError) { Mocks::Mock.new }
58
+ end
59
+
60
+ end # class TestMock
61
+
62
+ end
63
+
64
+ end # module Mocks
@@ -0,0 +1,47 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: object.rb 339 2005-09-06 23:27:27Z ertai $
5
+
6
+ require 'mocks'
7
+ require 'blank_slate'
8
+
9
+ module Mocks
10
+
11
+ class Object < Mock
12
+ concrete
13
+
14
+ def self.blank_slate_ignore ( name )
15
+ super or name =~ /^(mock_|nil\?$)/
16
+ end
17
+
18
+ include BlankSlate
19
+
20
+ def method_missing ( meth, *args, &block )
21
+ mock_add MethodCall.new(meth, *args, &block)
22
+ end
23
+
24
+ end # class Object
25
+
26
+ test_section __FILE__ do
27
+
28
+ class TestObject < ::Test::Unit::TestCase
29
+
30
+ def setup
31
+ @proc = proc { 43 }
32
+ @obj = Mocks::Object.new
33
+ end
34
+
35
+ def test_simple
36
+ @obj.foo(:bar, 42, &@proc)
37
+ @obj.bar
38
+ @obj << 42
39
+ assert_equal([[:foo, [:bar, 42], @proc],
40
+ [:bar], [:<<, 42]], @obj.mock_calls_array)
41
+ end
42
+
43
+ end # class TestObject
44
+
45
+ end
46
+
47
+ end # module Mocks