callback 0.1.0 → 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.
- 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
|