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
@@ -1,49 +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/popen.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
class Popen < Fork
|
11
|
-
make Concrete
|
12
|
-
|
13
|
-
def initialize ( *a, &b )
|
14
|
-
super
|
15
|
-
@command_data_factory.command_data_class = Datas::Pipe
|
16
|
-
end
|
17
|
-
|
18
|
-
end # class Popen
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
test_section __FILE__ do
|
23
|
-
|
24
|
-
class PopenTest < Test::Unit::TestCase
|
25
|
-
|
26
|
-
def setup
|
27
|
-
assert_nothing_raised { @runner = Popen.new }
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_0_initialize
|
31
|
-
end
|
32
|
-
|
33
|
-
# FIXME
|
34
|
-
def test_simple
|
35
|
-
# TempPath.new do |tmp|
|
36
|
-
# cmd = %Q[ruby -e "sleep 0.5
|
37
|
-
# File.open('#{tmp}', 'w') { |f| f.puts :foo }"]
|
38
|
-
# @runner.run(cmd.to_cmd)
|
39
|
-
# assert(tmp.exist?)
|
40
|
-
# end
|
41
|
-
end
|
42
|
-
|
43
|
-
end # class PopenTest
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end # module Runners
|
48
|
-
|
49
|
-
end # module Commands
|
@@ -1,177 +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/runner.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
class Runner
|
11
|
-
|
12
|
-
include Abstract
|
13
|
-
include Hookable
|
14
|
-
include Hooker
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
# Accessors
|
19
|
-
#
|
20
|
-
|
21
|
-
attr_accessor :command_data_factory
|
22
|
-
|
23
|
-
|
24
|
-
#
|
25
|
-
# Hooks declaration
|
26
|
-
#
|
27
|
-
|
28
|
-
hook_declare :display_command
|
29
|
-
hook_declare :data
|
30
|
-
hook_declare :before_open
|
31
|
-
hook_declare :before_chdir
|
32
|
-
hook_declare :before_exec
|
33
|
-
hook_declare :exec
|
34
|
-
hook_declare :failure
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
# Construction methods.
|
39
|
-
#
|
40
|
-
|
41
|
-
def initialize
|
42
|
-
@command_data_factory = Datas.const_get(:Factory).new # FIXME LazyLoading
|
43
|
-
@open_mode = :w
|
44
|
-
hooker_subscribe self
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def initialize_copy ( copy )
|
49
|
-
super
|
50
|
-
if defined? @hookers
|
51
|
-
@hookers = @hookers.dup
|
52
|
-
else
|
53
|
-
@hookers = []
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
#
|
59
|
-
# Methods.
|
60
|
-
#
|
61
|
-
|
62
|
-
def run ( aCommand )
|
63
|
-
unless aCommand.is_a? Command
|
64
|
-
raise ArgumentError, "Need a #{Command}"
|
65
|
-
end
|
66
|
-
|
67
|
-
hook_trigger :display_command, aCommand
|
68
|
-
|
69
|
-
data = @command_data_factory.create
|
70
|
-
data.open_mode = @open_mode
|
71
|
-
data.input = aCommand.input unless aCommand.input.nil?
|
72
|
-
data.output = aCommand.output unless aCommand.output.nil?
|
73
|
-
data.error = aCommand.error unless aCommand.error.nil?
|
74
|
-
hook_trigger :data, aCommand, data
|
75
|
-
|
76
|
-
run_impl(aCommand, data)
|
77
|
-
|
78
|
-
data
|
79
|
-
end
|
80
|
-
|
81
|
-
def run_impl ( aCommand, data )
|
82
|
-
hook_trigger :before_open, data
|
83
|
-
aCommand = aCommand.instanciate_args
|
84
|
-
STDIN.reopen(data.input.to_io_for_commands) unless data.input.nil?
|
85
|
-
STDOUT.reopen(data.output.to_io_for_commands) unless data.output.nil?
|
86
|
-
STDERR.reopen(data.error.to_io_for_commands) unless data.error.nil?
|
87
|
-
STDOUT.flush
|
88
|
-
STDERR.flush
|
89
|
-
|
90
|
-
hook_trigger :before_chdir, data
|
91
|
-
Dir.chdir(aCommand.dir) unless aCommand.dir.nil?
|
92
|
-
|
93
|
-
hook_trigger :before_exec, aCommand, data
|
94
|
-
hook_trigger :exec, aCommand, data
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
|
-
def make_verbose
|
99
|
-
hooker_subscribe VerboseHooker.new
|
100
|
-
self
|
101
|
-
end
|
102
|
-
|
103
|
-
|
104
|
-
def make_debug
|
105
|
-
hooker_subscribe DebugHooker.new
|
106
|
-
self
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
|
-
def raise_on_failures
|
111
|
-
hooker_subscribe FailureHooker.new
|
112
|
-
self
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
#
|
117
|
-
# Hookers
|
118
|
-
#
|
119
|
-
|
120
|
-
class DebugHooker
|
121
|
-
include Hooker
|
122
|
-
|
123
|
-
def log ( m, *a )
|
124
|
-
STDERR.puts
|
125
|
-
STDERR.puts "#{m}: #{a.inspect}"
|
126
|
-
end
|
127
|
-
|
128
|
-
hook_default_method :log
|
129
|
-
|
130
|
-
end # class DebugHooker
|
131
|
-
|
132
|
-
|
133
|
-
class VerboseHooker
|
134
|
-
include Hooker
|
135
|
-
|
136
|
-
def display_command ( m )
|
137
|
-
STDERR.puts "Running: #{m.to_a.join(' ')}"
|
138
|
-
end
|
139
|
-
|
140
|
-
end # class VerboseHooker
|
141
|
-
|
142
|
-
|
143
|
-
class FailureHooker
|
144
|
-
include Hooker
|
145
|
-
|
146
|
-
class Error < Exception
|
147
|
-
end
|
148
|
-
|
149
|
-
def failure ( aCommand, data )
|
150
|
-
raise Error, { 'reason' => 'Command failed',
|
151
|
-
'command' => aCommand.to_s,
|
152
|
-
'data' => data }.to_yaml
|
153
|
-
end
|
154
|
-
|
155
|
-
end # class FailureHooker
|
156
|
-
|
157
|
-
|
158
|
-
end # class Runner
|
159
|
-
|
160
|
-
|
161
|
-
Commands::Helpers.import!
|
162
|
-
|
163
|
-
|
164
|
-
test_section __FILE__ do
|
165
|
-
|
166
|
-
class RunnerTest < Test::Unit::TestCase
|
167
|
-
|
168
|
-
def test_abstract
|
169
|
-
assert_raise(TypeError) { Runner.new }
|
170
|
-
end
|
171
|
-
|
172
|
-
end # class RunnerTest
|
173
|
-
end
|
174
|
-
|
175
|
-
end # module Runners
|
176
|
-
|
177
|
-
end # module Commands
|
@@ -1,54 +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/system.rb 8049 2005-12-31T16:01:12.162089Z ertai $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
module Runners
|
9
|
-
|
10
|
-
class WaitpidHooker
|
11
|
-
include Hooker
|
12
|
-
|
13
|
-
def waitpid ( data )
|
14
|
-
data.waitpid
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
# This version wait to reach the end of the command before returns.
|
20
|
-
class System < Fork
|
21
|
-
concrete
|
22
|
-
|
23
|
-
hooker_subscribe WaitpidHooker.new
|
24
|
-
|
25
|
-
end # class System
|
26
|
-
|
27
|
-
|
28
|
-
test_section __FILE__ do
|
29
|
-
|
30
|
-
class SystemTest < Test::Unit::TestCase
|
31
|
-
|
32
|
-
def setup
|
33
|
-
assert_nothing_raised { @runner = System.new }
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_0_initialize
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_simple
|
40
|
-
TempPath.new do |tmp|
|
41
|
-
cmd = %Q[ruby -e "sleep 0.5
|
42
|
-
File.open('#{tmp}', 'w') { |f| f.puts :foo }"]
|
43
|
-
@runner.run(cmd.to_cmd)
|
44
|
-
assert(tmp.exist?)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end # class SystemTest
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
end # module Runners
|
53
|
-
|
54
|
-
end # module Commands
|
data/lib/commands/seq.rb
DELETED
@@ -1,31 +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/seq.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
|
5
|
-
|
6
|
-
module Commands
|
7
|
-
|
8
|
-
class Seq < Command
|
9
|
-
|
10
|
-
def initialize ( *cmds )
|
11
|
-
@cmds = cmds
|
12
|
-
@input, @output, @error = nil, nil, nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def run ( *a )
|
16
|
-
datas = []
|
17
|
-
@cmds.each do |cmd|
|
18
|
-
datas.last.waitpid unless datas.empty?
|
19
|
-
datas << cmd.run(*a)
|
20
|
-
end
|
21
|
-
Datas::Composite.new(datas)
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_sh
|
25
|
-
strs = @cmds.map { |cmd| "(#{cmd.to_sh})" }
|
26
|
-
"(#{strs.join(' ; ')})#{sh_args}"
|
27
|
-
end
|
28
|
-
|
29
|
-
end # class Seq
|
30
|
-
|
31
|
-
end # module Commands
|
data/lib/hookable.rb
DELETED
@@ -1,294 +0,0 @@
|
|
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: /w/fey/ruby_ex/trunk/lib/hookable.rb 8047 2005-12-31T15:56:23.983963Z ertai $
|
5
|
-
|
6
|
-
module Hookable
|
7
|
-
|
8
|
-
def self.included ( aClass )
|
9
|
-
super
|
10
|
-
|
11
|
-
aClass.module_eval do
|
12
|
-
|
13
|
-
def self.inheritable_attributes
|
14
|
-
if @inheritable_attributes.nil? or @inheritable_attributes.empty?
|
15
|
-
@inheritable_attributes = HashWithRecursiveCloneDup.new
|
16
|
-
end
|
17
|
-
@inheritable_attributes
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
class_inheritable_array :hooks
|
22
|
-
class_inheritable_array :hookers
|
23
|
-
inheritable_attributes[:hookers] = []
|
24
|
-
inheritable_attributes[:hooks] = []
|
25
|
-
|
26
|
-
|
27
|
-
def hook_trigger ( name, *args )
|
28
|
-
return if defined? @disabled_hooks and @disabled_hooks.include? name
|
29
|
-
return if defined? @@disabled_hooks and @@disabled_hooks.include? name
|
30
|
-
self.class.hook_trigger(name, *args)
|
31
|
-
return unless defined? @hookers
|
32
|
-
@hookers.each do |hooker|
|
33
|
-
@@hook_trigger_internal[hooker, name, *args]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
def self.hook_trigger ( name, *args )
|
39
|
-
raise ArgumentError, "Unknown hook #{name}" unless hooks.include? name
|
40
|
-
return if defined? @@disabled_hooks and @@disabled_hooks.include? name
|
41
|
-
hookers.each do |hooker|
|
42
|
-
@@hook_trigger_internal[hooker, name, *args]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
def self.hooker_subscribe ( hooker )
|
48
|
-
hookers << hooker
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
def hooker_subscribe ( hooker )
|
53
|
-
@hookers ||= []
|
54
|
-
@hookers << hooker
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def self.subscribe_hook ( *hook_names, &block )
|
59
|
-
hooker_subscribe ProcHooker.new(*hook_names, &block)
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
def subscribe_hook ( *hook_names, &block )
|
64
|
-
hooker_subscribe ProcHooker.new(*hook_names, &block)
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
def disable_hook ( *hook_names )
|
69
|
-
@disabled_hooks ||= []
|
70
|
-
@disabled_hooks = @disabled_hooks + hook_names
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
def self.disable_hook ( *hook_names )
|
75
|
-
@@disabled_hooks ||= []
|
76
|
-
@@disabled_hooks = @@disabled_hooks + hook_names
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
def self.hook_declare ( name, *groups )
|
81
|
-
hooks << name
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
@@hook_trigger_internal = lambda do |hooker, name, *args|
|
86
|
-
if hooker.respond_to?(name)
|
87
|
-
hooker.send(name, *args)
|
88
|
-
else
|
89
|
-
if hooker.respond_to? :default_hook and not hooker.default_hook.nil?
|
90
|
-
hooker.send(hooker.default_hook, name, *args)
|
91
|
-
elsif hooker.respond_to?(:method_missing)
|
92
|
-
hooker.send(name, *args)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
|
102
|
-
class ProcHooker < Proc
|
103
|
-
include Hooker
|
104
|
-
def initialize ( *hook_names, &block )
|
105
|
-
hook_method :call, *hook_names
|
106
|
-
super(&block)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
|
111
|
-
class HashWithRecursiveCloneDup < Hash
|
112
|
-
|
113
|
-
def initialize_copy ( aHash )
|
114
|
-
aHash.each { |k, v| self[k] = v.dup }
|
115
|
-
end
|
116
|
-
|
117
|
-
end # class HashWithRecursiveCloneDup
|
118
|
-
|
119
|
-
end # module Hookable
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
test_section __FILE__ do
|
124
|
-
|
125
|
-
class HookableHookerTest < Test::Unit::TestCase
|
126
|
-
|
127
|
-
class HookerTest
|
128
|
-
include Hooker
|
129
|
-
|
130
|
-
attr_reader :stack
|
131
|
-
|
132
|
-
def log ( *args )
|
133
|
-
@stack ||= []
|
134
|
-
@stack << args
|
135
|
-
end
|
136
|
-
|
137
|
-
def method_missing ( *a )
|
138
|
-
log(:method_missing, *a)
|
139
|
-
end
|
140
|
-
|
141
|
-
def hook1 ( *a )
|
142
|
-
log(:hook1, *a)
|
143
|
-
end
|
144
|
-
|
145
|
-
def reset
|
146
|
-
@stack.clear if defined? @stack and @stack
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
|
151
|
-
STATIC_HOOKER_TEST = HookerTest.new
|
152
|
-
|
153
|
-
|
154
|
-
class HookableTest
|
155
|
-
include Hookable
|
156
|
-
|
157
|
-
hook_declare :hook1
|
158
|
-
|
159
|
-
hook_declare :hook2, :group1
|
160
|
-
|
161
|
-
def run
|
162
|
-
run1
|
163
|
-
run2
|
164
|
-
end
|
165
|
-
|
166
|
-
def run1
|
167
|
-
hook_trigger :hook1
|
168
|
-
end
|
169
|
-
|
170
|
-
def run2
|
171
|
-
hook_trigger :hook2, 42
|
172
|
-
suppress(ArgumentError) { hook_trigger :hook3 }
|
173
|
-
end
|
174
|
-
|
175
|
-
def << ( hooker )
|
176
|
-
hooker_subscribe hooker
|
177
|
-
end
|
178
|
-
|
179
|
-
hooker_subscribe STATIC_HOOKER_TEST
|
180
|
-
|
181
|
-
def self.ref
|
182
|
-
[
|
183
|
-
[[:hook1], [:method_missing, :hook2, 42]],
|
184
|
-
[[:hook1], [:default, :hook2, 42]],
|
185
|
-
[[:hook_1_and_2], [:hook_1_and_2, 42]],
|
186
|
-
[[:hook1], [:method_missing, :default_by_method_missing, :hook2, 42]],
|
187
|
-
[[:hook1], [:hook2, 42]],
|
188
|
-
[[:hook1], [:method_missing, :hook2_by_dynamic_hook_method, 42]]
|
189
|
-
]
|
190
|
-
end
|
191
|
-
|
192
|
-
end
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
class SubHookableTest < HookableTest
|
197
|
-
hook_declare :hook3
|
198
|
-
|
199
|
-
def self.ref
|
200
|
-
[
|
201
|
-
[[:hook1], [:method_missing, :hook2, 42], [:method_missing, :hook3]],
|
202
|
-
[[:hook1], [:default, :hook2, 42], [:default, :hook3]],
|
203
|
-
[[:hook_1_and_2], [:hook_1_and_2, 42], [:method_missing, :hook3]],
|
204
|
-
[[:hook1], [:method_missing, :default_by_method_missing, :hook2, 42],
|
205
|
-
[:method_missing, :default_by_method_missing, :hook3]],
|
206
|
-
[[:hook1], [:hook2, 42], [:default, :hook3]],
|
207
|
-
[[:hook1], [:method_missing, :hook2_by_dynamic_hook_method, 42],
|
208
|
-
[:method_missing, :hook3]]
|
209
|
-
]
|
210
|
-
end
|
211
|
-
|
212
|
-
end
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
class HookerTest1 < HookerTest
|
217
|
-
def default ( *a )
|
218
|
-
log(:default, *a)
|
219
|
-
end
|
220
|
-
hook_default_method :default
|
221
|
-
end
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
class HookerTest2 < HookerTest
|
226
|
-
def hook_1_and_2 ( *a )
|
227
|
-
log(:hook_1_and_2, *a)
|
228
|
-
end
|
229
|
-
hook_method :hook_1_and_2, :hook1, :hook2
|
230
|
-
end
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
class HookerTest3 < HookerTest
|
235
|
-
hook_default_method :default_by_method_missing
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
class HookerTest4 < HookerTest
|
241
|
-
end
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
class HookerTest21 < HookerTest1
|
246
|
-
def hook2 ( *a )
|
247
|
-
log(:hook2, *a)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
def test_hookable
|
254
|
-
hookable_checker HookableTest.new
|
255
|
-
end
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
def test_sub_hookable
|
260
|
-
hookable_checker SubHookableTest.new
|
261
|
-
end
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
def hookable_checker ( support )
|
266
|
-
hookers = []
|
267
|
-
hookers << HookerTest1.new
|
268
|
-
hookers << HookerTest2.new
|
269
|
-
hookers << HookerTest3.new
|
270
|
-
hookers << HookerTest21.new
|
271
|
-
hooker4 = HookerTest4.new
|
272
|
-
hookers << hooker4
|
273
|
-
hookers.each do |hooker|
|
274
|
-
support << hooker
|
275
|
-
end
|
276
|
-
STATIC_HOOKER_TEST.reset
|
277
|
-
hookers.unshift STATIC_HOOKER_TEST
|
278
|
-
hooker4.hook_method(:hook2_by_dynamic_hook_method, :hook2)
|
279
|
-
@a = []
|
280
|
-
support.subscribe_hook(:hook2) do |*a|
|
281
|
-
assert_nothing_raised do
|
282
|
-
@a << [:proc_hooker_call, :hook2, *a]
|
283
|
-
end
|
284
|
-
end
|
285
|
-
support.run
|
286
|
-
hookers.zip(support.class.ref).each do |hooker, ref|
|
287
|
-
assert_equal(ref, hooker.stack)
|
288
|
-
end
|
289
|
-
assert_equal([[:proc_hooker_call, :hook2, 42]], @a)
|
290
|
-
end
|
291
|
-
|
292
|
-
end
|
293
|
-
|
294
|
-
end
|