callback 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/Rakefile +1 -1
- data/lib/callback/callback.rb +10 -4
- data/lib/callback/callback_container.rb +27 -1
- data/spec/callback_spec.rb +92 -8
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
2006-11-04 (0.2.0)
|
2
|
+
* Added register_callback as an alias to define_callback. Added unregistration of callbacks in the
|
3
|
+
unregister_callback and undefine_callback methods.
|
4
|
+
|
1
5
|
2006-11-03 (0.1.0)
|
2
6
|
* Initial Rubyforge Version. Simple callback library. Supports registering and notifying callbacks.
|
3
7
|
Does not yet support unregistering callbacks.
|
data/Rakefile
CHANGED
data/lib/callback/callback.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
module Callback
|
2
|
-
def define_callback(key, &
|
3
|
-
callbacks.define(key, &
|
2
|
+
def define_callback(key, callback_proc=nil, &callback_block)
|
3
|
+
callbacks.define(key, callback_proc, &callback_block)
|
4
4
|
end
|
5
|
+
alias_method :register_callback, :define_callback
|
5
6
|
|
7
|
+
def undefine_callback(key, callback_proc)
|
8
|
+
callbacks.undefine(key, callback_proc)
|
9
|
+
end
|
10
|
+
alias_method :unregister_callback, :undefine_callback
|
11
|
+
|
12
|
+
protected
|
6
13
|
def notify_callbacks(key, *args, &error_handler)
|
7
14
|
callbacks.notify(key, *args, &error_handler)
|
8
15
|
end
|
9
|
-
protected :notify_callbacks
|
10
16
|
|
17
|
+
private
|
11
18
|
def callbacks
|
12
19
|
@callbacks ||= CallbackContainer.new
|
13
20
|
end
|
14
|
-
private :callbacks
|
15
21
|
end
|
@@ -6,8 +6,20 @@ module Callback
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
def define(key, &
|
9
|
+
def define(key, callback_proc=nil, &callback_block)
|
10
|
+
callback = extract_callback(callback_block, callback_proc) do
|
11
|
+
raise "You must define the callback that accepts the call method."
|
12
|
+
end
|
10
13
|
@callback_registry[key] << callback
|
14
|
+
callback
|
15
|
+
end
|
16
|
+
|
17
|
+
def undefine(key, callback_proc)
|
18
|
+
callback = extract_callback(callback_proc) do
|
19
|
+
raise "You may only undefine callbacks that use the call method."
|
20
|
+
end
|
21
|
+
@callback_registry[key].delete callback
|
22
|
+
callback
|
11
23
|
end
|
12
24
|
|
13
25
|
def notify(key, *args, &error_handler)
|
@@ -19,5 +31,19 @@ module Callback
|
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
def extract_callback(first_choice_callback, second_choice_callback = nil)
|
37
|
+
callback = nil
|
38
|
+
if first_choice_callback
|
39
|
+
callback = first_choice_callback
|
40
|
+
elsif second_choice_callback
|
41
|
+
callback = second_choice_callback
|
42
|
+
end
|
43
|
+
unless callback.respond_to? :call
|
44
|
+
yield
|
45
|
+
end
|
46
|
+
return callback
|
47
|
+
end
|
22
48
|
end
|
23
49
|
end
|
data/spec/callback_spec.rb
CHANGED
@@ -10,18 +10,74 @@ context "A Callback" do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
specify "should be notified" do
|
14
|
-
callback_key
|
15
|
-
|
16
|
-
@callback_object.define_callback(callback_key) do |callback_argument|
|
17
|
-
passed_callback_argument = callback_argument
|
13
|
+
specify "should be registered as a block and notified" do
|
14
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
15
|
+
@callback_object.register_callback(callback_key, &expected_callback)
|
18
16
|
end
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
specify "should be defined as a block and notified" do
|
20
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
21
|
+
@callback_object.define_callback(callback_key, &expected_callback)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
specify "should be registered as a proc and notified" do
|
26
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
27
|
+
@callback_object.register_callback(callback_key, expected_callback)
|
28
|
+
end
|
23
29
|
end
|
24
30
|
|
31
|
+
specify "should be defined as a proc and notified" do
|
32
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
33
|
+
@callback_object.define_callback(callback_key, expected_callback)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "define should require callback with the call method" do
|
38
|
+
proc do
|
39
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
40
|
+
@callback_object.define_callback(callback_key)
|
41
|
+
end
|
42
|
+
end.should_raise(RuntimeError, "You must define the callback that accepts the call method.")
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "register should require callback with the call method" do
|
46
|
+
proc do
|
47
|
+
specify_registration_and_notification do |callback_key, expected_callback|
|
48
|
+
@callback_object.register_callback(callback_key)
|
49
|
+
end
|
50
|
+
end.should_raise(RuntimeError, "You must define the callback that accepts the call method.")
|
51
|
+
end
|
52
|
+
|
53
|
+
specify "should unregister a proc" do
|
54
|
+
specify_unregistration do |callback_key, callback|
|
55
|
+
@callback_object.unregister_callback callback_key, callback
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "should undefine a proc" do
|
60
|
+
specify_unregistration do |callback_key, callback|
|
61
|
+
@callback_object.undefine_callback callback_key, callback
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
specify "undefine should require callback with the call method" do
|
66
|
+
proc do
|
67
|
+
specify_unregistration do |callback_key, expected_callback|
|
68
|
+
@callback_object.undefine_callback(callback_key, nil)
|
69
|
+
end
|
70
|
+
end.should_raise(RuntimeError, "You may only undefine callbacks that use the call method.")
|
71
|
+
end
|
72
|
+
|
73
|
+
specify "unregister should require callback with the call method" do
|
74
|
+
proc do
|
75
|
+
specify_unregistration do |callback_key, expected_callback|
|
76
|
+
@callback_object.unregister_callback(callback_key, nil)
|
77
|
+
end
|
78
|
+
end.should_raise(RuntimeError, "You may only undefine callbacks that use the call method.")
|
79
|
+
end
|
80
|
+
|
25
81
|
specify "should handle errors" do
|
26
82
|
@callback_object.define_callback(:error_callback) do
|
27
83
|
raise "First Error"
|
@@ -42,4 +98,32 @@ context "A Callback" do
|
|
42
98
|
specify "should not fail with nothing to notify" do
|
43
99
|
@callback_object.notify_callbacks(:foobar, :argument)
|
44
100
|
end
|
101
|
+
|
102
|
+
protected
|
103
|
+
def specify_registration_and_notification
|
104
|
+
callback_key = :create
|
105
|
+
passed_callback_argument = nil
|
106
|
+
expected_callback = proc do |callback_argument|
|
107
|
+
passed_callback_argument = callback_argument
|
108
|
+
end
|
109
|
+
|
110
|
+
returned_callback = yield(callback_key, expected_callback)
|
111
|
+
returned_callback.should_equal expected_callback
|
112
|
+
|
113
|
+
expected_argument = Object.new
|
114
|
+
@callback_object.notify_callbacks(callback_key, expected_argument)
|
115
|
+
passed_callback_argument.should_equal expected_argument
|
116
|
+
end
|
117
|
+
|
118
|
+
def specify_unregistration
|
119
|
+
callback_key = :create
|
120
|
+
callback_called = false
|
121
|
+
callback = @callback_object.define_callback(callback_key) do
|
122
|
+
callback_called = true
|
123
|
+
end
|
124
|
+
|
125
|
+
yield(callback_key, callback)
|
126
|
+
@callback_object.notify_callbacks(callback_key)
|
127
|
+
callback_called.should_equal false
|
128
|
+
end
|
45
129
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: callback
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-11-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2006-11-04 00:00:00 -08:00
|
8
8
|
summary: A simple callback library for ruby objects.
|
9
9
|
require_paths:
|
10
10
|
- lib
|