ruby_ext 0.4.25 → 0.5.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.
- data/Rakefile +2 -0
- data/lib/rake_ext/project.rb +19 -19
- data/lib/rake_ext.rb +18 -18
- data/lib/rspec_ext/xhtml.rb +6 -6
- data/lib/rspec_ext.rb +40 -25
- data/lib/ruby_ext/core/array.rb +7 -7
- data/lib/ruby_ext/core/basic_object.rb +1 -1
- data/lib/ruby_ext/core/deep_clone.rb +2 -2
- data/lib/ruby_ext/core/enumerable.rb +1 -1
- data/lib/ruby_ext/core/hash.rb +4 -4
- data/lib/ruby_ext/core/module.rb +20 -30
- data/lib/ruby_ext/core/multiple_inheritance.rb +24 -24
- data/lib/ruby_ext/core/must.rb +39 -39
- data/lib/ruby_ext/core/object.rb +15 -3
- data/lib/ruby_ext/core/open_object.rb +22 -20
- data/lib/ruby_ext/core/string.rb +19 -19
- data/lib/ruby_ext/core/symbol.rb +1 -13
- data/lib/ruby_ext/core.rb +4 -8
- data/lib/ruby_ext/more/callbacks.rb +172 -0
- data/lib/ruby_ext/more/declarative_cache.rb +20 -22
- data/lib/ruby_ext/more/miscellaneous.rb +1 -46
- data/lib/ruby_ext/more/{observable2.rb → observable.rb} +8 -8
- data/lib/ruby_ext/more/open_constructor.rb +10 -10
- data/lib/ruby_ext/more/tuple.rb +1 -1
- data/lib/ruby_ext/more.rb +5 -3
- data/lib/ruby_ext.rb +0 -3
- data/lib/yaml_fix.rb +2 -2
- data/readme.md +51 -50
- data/spec/core/deep_clone_spec.rb +8 -8
- data/spec/core/module_spec.rb +29 -36
- data/spec/core/multiple_inheritance_spec.rb +32 -32
- data/spec/core/must_spec.rb +6 -6
- data/spec/core/object_spec.rb +15 -0
- data/spec/core/open_object_spec.rb +6 -6
- data/spec/more/callbacks_spec.rb +155 -0
- data/spec/more/declarative_cache_spec.rb +33 -33
- data/spec/more/{observable2_spec.rb → observable_spec.rb} +7 -7
- data/spec/more/open_constructor_spec.rb +5 -5
- metadata +7 -15
- data/lib/ruby_ext/core/class.rb +0 -0
- data/lib/ruby_ext/core/file.rb +0 -23
- data/lib/ruby_ext/core/kernel.rb +0 -69
- data/lib/ruby_ext/core/miscellaneous.rb +0 -14
- data/lib/ruby_ext/more/synchronize.rb +0 -26
- data/spec/core/kernel_spec/TheNamespace/ClassA.rb +0 -7
- data/spec/core/kernel_spec/another_class.rb +0 -5
- data/spec/core/kernel_spec/the_namespace/class_b.rb +0 -11
- data/spec/core/kernel_spec.rb +0 -51
- data/spec/more/miscellaneous_spec.rb +0 -14
- data/spec/more/synchronize_spec.rb +0 -79
data/spec/core/module_spec.rb
CHANGED
@@ -12,7 +12,7 @@ describe "Module" do
|
|
12
12
|
InheritableAccessorB
|
13
13
|
)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "Namespace" do
|
17
17
|
class A
|
18
18
|
class B
|
@@ -21,19 +21,19 @@ describe "Module" do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
File.namespace.should == nil
|
26
26
|
A::B::C.namespace.should == A::B
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
# class AnonymousClass
|
30
30
|
# class << self
|
31
31
|
# def anonymous_name
|
32
32
|
# self.name
|
33
33
|
# end
|
34
34
|
# end
|
35
|
-
# end
|
36
|
-
|
35
|
+
# end
|
36
|
+
|
37
37
|
it "name" do
|
38
38
|
class A
|
39
39
|
class B
|
@@ -42,15 +42,15 @@ describe "Module" do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
A::B::C.name.should == "A::B::C"
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "each_ancestor" do
|
50
50
|
class X; end
|
51
51
|
class Y < X; end
|
52
52
|
class Z < Y; end
|
53
|
-
|
53
|
+
|
54
54
|
list = []
|
55
55
|
Z.each_ancestor{|a| list << a}
|
56
56
|
list.should include Y
|
@@ -58,7 +58,7 @@ describe "Module" do
|
|
58
58
|
list.should_not include Z
|
59
59
|
list.should_not include Object
|
60
60
|
list.should_not include Kernel
|
61
|
-
|
61
|
+
|
62
62
|
list = []
|
63
63
|
Z.each_ancestor(true){|a| list << a}
|
64
64
|
list.should include Y
|
@@ -67,7 +67,7 @@ describe "Module" do
|
|
67
67
|
list.should include Object
|
68
68
|
list.should include Kernel
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
it "each_namespace" do
|
72
72
|
class A
|
73
73
|
class B
|
@@ -76,33 +76,26 @@ describe "Module" do
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
list = []
|
81
81
|
A::B::C.each_namespace{|n| list << n}
|
82
82
|
list.should == [A::B, A]
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
it "is?" do
|
86
86
|
File.is?(IO).should be_true
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
class WrapMethod
|
90
90
|
def method_name value
|
91
91
|
10*value
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
95
|
-
it "wrap_method" do
|
96
|
-
WrapMethod.wrap_method :method_name do |old, value|
|
97
|
-
send(old, value)*value
|
98
|
-
end
|
99
|
-
WrapMethod.new.method_name(10).should == 1000
|
100
|
-
end
|
101
|
-
|
94
|
+
|
102
95
|
it "escape_method" do
|
103
96
|
Object.escape_method("><=?")
|
104
97
|
end
|
105
|
-
|
98
|
+
|
106
99
|
it "inheritable_accessor" do
|
107
100
|
module InheritableAccessorForModule
|
108
101
|
module ClassMethods
|
@@ -110,48 +103,48 @@ describe "Module" do
|
|
110
103
|
inheritable_accessor :layout, "for_module"
|
111
104
|
end
|
112
105
|
end
|
113
|
-
|
106
|
+
|
114
107
|
class InheritableAccessorForClass
|
115
108
|
class << self
|
116
|
-
inheritable_accessor :callbacks2, []
|
117
|
-
inheritable_accessor :layout2, "for_class"
|
109
|
+
inheritable_accessor :callbacks2, []
|
110
|
+
inheritable_accessor :layout2, "for_class"
|
118
111
|
end
|
119
|
-
callbacks2 << :set_user
|
112
|
+
callbacks2 << :set_user
|
120
113
|
end
|
121
|
-
|
114
|
+
|
122
115
|
class InheritableAccessor < InheritableAccessorForClass
|
123
116
|
inherit InheritableAccessorForModule
|
124
117
|
callbacks << :set_model
|
125
|
-
callbacks2 << :set_model
|
126
|
-
self.layout2 = "anoter_layout"
|
127
|
-
end
|
128
|
-
|
118
|
+
callbacks2 << :set_model
|
119
|
+
self.layout2 = "anoter_layout"
|
120
|
+
end
|
121
|
+
|
129
122
|
InheritableAccessorForClass.callbacks2.should == [:set_user]
|
130
123
|
InheritableAccessor.callbacks.should == [:set_user, :set_model]
|
131
124
|
InheritableAccessor.callbacks2.should == [:set_user, :set_model]
|
132
|
-
|
125
|
+
|
133
126
|
InheritableAccessorForClass.layout2.should == "for_class"
|
134
127
|
InheritableAccessor.layout2.should == "anoter_layout"
|
135
128
|
InheritableAccessor.layout.should == "for_module"
|
136
129
|
end
|
137
|
-
|
130
|
+
|
138
131
|
it "inheritable_accessor (from error)" do
|
139
132
|
module InheritableAccessorBase
|
140
133
|
module ClassMethods
|
141
134
|
inheritable_accessor :callbacks, []
|
142
135
|
end
|
143
136
|
end
|
144
|
-
|
137
|
+
|
145
138
|
class InheritableAccessorA
|
146
139
|
inherit InheritableAccessorBase
|
147
140
|
callbacks << :a
|
148
141
|
end
|
149
|
-
|
142
|
+
|
150
143
|
class InheritableAccessorB
|
151
144
|
inherit InheritableAccessorBase
|
152
145
|
callbacks << :b
|
153
146
|
end
|
154
|
-
|
147
|
+
|
155
148
|
InheritableAccessorA.callbacks.should == [:a]
|
156
149
|
InheritableAccessorB.callbacks.should == [:b]
|
157
150
|
end
|
@@ -4,7 +4,7 @@ describe "Multiple Inheritance" do
|
|
4
4
|
after do
|
5
5
|
remove_constants %w(M A M2 B AddedAfterInheritance)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
it "showcase" do
|
9
9
|
module M
|
10
10
|
def instance_method; end
|
@@ -16,30 +16,30 @@ describe "Multiple Inheritance" do
|
|
16
16
|
inherited do
|
17
17
|
attr_accessor :some_accessor
|
18
18
|
end
|
19
|
-
end
|
20
|
-
|
19
|
+
end
|
20
|
+
|
21
21
|
M.should respond_to(:class_method)
|
22
22
|
|
23
23
|
class A
|
24
24
|
inherit M
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
A.should respond_to(:class_method)
|
28
28
|
A.new.should respond_to(:instance_method)
|
29
29
|
A.new.should respond_to(:some_accessor)
|
30
|
-
|
31
|
-
M.directly_included_by.should == [A].to_set
|
32
|
-
end
|
30
|
+
|
31
|
+
M.directly_included_by.should == [A].to_set
|
32
|
+
end
|
33
33
|
|
34
34
|
it "should inherit all ancestors class methods" do
|
35
35
|
module M
|
36
36
|
def instance_method; end
|
37
37
|
|
38
|
-
class_methods do
|
38
|
+
class_methods do
|
39
39
|
def class_method; end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
module M2
|
44
44
|
inherit M
|
45
45
|
|
@@ -51,24 +51,24 @@ describe "Multiple Inheritance" do
|
|
51
51
|
class B
|
52
52
|
inherit M2
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
M2.should respond_to(:class_method)
|
56
|
-
|
56
|
+
|
57
57
|
B.should respond_to(:class_method)
|
58
58
|
B.should respond_to(:class_method2)
|
59
59
|
B.new.should respond_to(:instance_method)
|
60
|
-
|
60
|
+
|
61
61
|
M.directly_included_by.should == [M2].to_set
|
62
62
|
M2.directly_included_by.should == [B].to_set
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
it "shouldn't redefine ancestors class methods" do
|
66
66
|
module M
|
67
67
|
class_methods do
|
68
68
|
def class_method; end
|
69
69
|
end
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
module M2
|
73
73
|
inherit M
|
74
74
|
|
@@ -76,71 +76,71 @@ describe "Multiple Inheritance" do
|
|
76
76
|
def class_method2; end
|
77
77
|
end
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
class A
|
81
81
|
inherit M
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
A.should_not respond_to(:class_method2)
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
it "should also allow to explicitly use ClassMethods prototype (from error)" do
|
88
88
|
module A
|
89
89
|
module ClassMethods
|
90
90
|
attr_accessor :callbacks
|
91
91
|
end
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
class B
|
95
95
|
inherit A
|
96
96
|
end
|
97
|
-
|
97
|
+
|
98
98
|
B.should respond_to(:callbacks)
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
it "methods defined on base class after inheritance must be propagated to all descendants" do
|
102
|
-
module M; end
|
103
|
-
|
102
|
+
module M; end
|
103
|
+
|
104
104
|
class A
|
105
105
|
inherit M
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
A.instance_methods.should_not include(:method_added_after_inheritance)
|
109
109
|
M.send(:define_method, :method_added_after_inheritance){}
|
110
110
|
M.instance_methods.should include(:method_added_after_inheritance)
|
111
111
|
A.instance_methods.should include(:method_added_after_inheritance)
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
it "modules included in base class after inheritance must be propagated to all descendants" do
|
115
115
|
module M; end
|
116
|
-
|
116
|
+
|
117
117
|
class A
|
118
118
|
inherit M
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
module AddedAfterInheritance
|
122
122
|
def module_added_after_inheritance; end
|
123
123
|
end
|
124
|
-
|
124
|
+
|
125
125
|
M.instance_methods.should_not include(:module_added_after_inheritance)
|
126
126
|
M.inherit AddedAfterInheritance
|
127
127
|
M.instance_methods.should include(:module_added_after_inheritance)
|
128
128
|
A.instance_methods.should include(:module_added_after_inheritance)
|
129
129
|
end
|
130
|
-
|
130
|
+
|
131
131
|
it "use case from error" do
|
132
132
|
class ItemSpec
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
135
|
class PageSpec < ItemSpec
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
module ::ItemSpecHelper
|
139
139
|
end
|
140
|
-
|
140
|
+
|
141
141
|
module ::PageSpecHelper
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
ItemSpec.inherit ItemSpecHelper
|
145
145
|
PageSpec.inherit PageSpecHelper
|
146
146
|
end
|
data/spec/core/must_spec.rb
CHANGED
@@ -13,19 +13,19 @@ describe 'Assert' do
|
|
13
13
|
"".must_be.a String
|
14
14
|
"".must_be.a String, Symbol
|
15
15
|
1.must_be.< 2
|
16
|
-
|
16
|
+
|
17
17
|
1.must_be.defined
|
18
18
|
-> {nil.must_be.defined}.should raise_error(/must be defined/)
|
19
|
-
end
|
20
|
-
|
19
|
+
end
|
20
|
+
|
21
21
|
it 'must_be & must_not_be' do
|
22
|
-
[].must_be.empty
|
22
|
+
[].must_be.empty
|
23
23
|
[''].must_not_be.empty
|
24
|
-
|
24
|
+
|
25
25
|
-> {[''].must_be.empty}.should raise_error(/must be/)
|
26
26
|
-> {[].must_not_be.empty}.should raise_error(/must not be/)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
it "should return result" do
|
30
30
|
[].must_be.empty.should == []
|
31
31
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "core/spec_helper"
|
2
|
+
|
3
|
+
describe 'Object' do
|
4
|
+
after(:all){remove_constants :RespondTest}
|
5
|
+
|
6
|
+
it "respond_to" do
|
7
|
+
class RespondTest
|
8
|
+
def test; 2 end
|
9
|
+
end
|
10
|
+
|
11
|
+
r = RespondTest.new
|
12
|
+
r.respond_to(:not_exist).should be_nil
|
13
|
+
r.respond_to(:test).should == 2
|
14
|
+
end
|
15
|
+
end
|
@@ -4,25 +4,25 @@ describe 'OpenObject' do
|
|
4
4
|
it 'should be comparable with hashes' do
|
5
5
|
{}.to_openobject.should == {}
|
6
6
|
{}.should == {}.to_openobject
|
7
|
-
|
7
|
+
|
8
8
|
{a: :b}.to_openobject.should == {a: :b}
|
9
9
|
{'a' => :b}.to_openobject.should == {a: :b}
|
10
|
-
|
10
|
+
|
11
11
|
{a: :b}.to_openobject.should == {'a' => :b}
|
12
12
|
{'a' => :b}.to_openobject.should == {'a' => :b}
|
13
|
-
|
13
|
+
|
14
14
|
{a: :b}.to_openobject.should_not == {a: :c}
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "must be hash (from error)" do
|
18
18
|
{}.to_openobject.is_a?(Hash).should be_true
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
it 'merge! should be indifferent to string and symbol' do
|
22
22
|
oo = OpenObject.new
|
23
23
|
oo.merge! a: true
|
24
24
|
oo.a.should be_true
|
25
|
-
oo.merge! 'b' => true
|
25
|
+
oo.merge! 'b' => true
|
26
26
|
oo.b.should be_true
|
27
27
|
end
|
28
28
|
end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'more/spec_helper'
|
2
|
+
|
3
|
+
describe "Callbacks" do
|
4
|
+
before :all do
|
5
|
+
class BasicCallbacksSpec
|
6
|
+
inherit RubyExt::Callbacks
|
7
|
+
|
8
|
+
set_callback :callback_name, :before, :before_callback
|
9
|
+
set_callback :callback_name, :after, :after_callback
|
10
|
+
set_callback :callback_name, :around, :around_callback
|
11
|
+
|
12
|
+
protected
|
13
|
+
def around_callback
|
14
|
+
around_callback_called
|
15
|
+
yield
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "basic" do
|
21
|
+
o = BasicCallbacksSpec.new
|
22
|
+
o.should_receive :before_callback
|
23
|
+
o.should_receive :around_callback_called
|
24
|
+
o.should_receive :after_callback
|
25
|
+
o.run_callbacks(:callback_name){"result"}.should == "result"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "blocks" do
|
29
|
+
class BlockCallbacksSpec
|
30
|
+
inherit RubyExt::Callbacks
|
31
|
+
|
32
|
+
set_callback(:callback_name, :before){|controller| controller.result << :before}
|
33
|
+
set_callback :callback_name, :around do |controller, block|
|
34
|
+
begin
|
35
|
+
controller.result << :around_begin
|
36
|
+
block.call
|
37
|
+
ensure
|
38
|
+
controller.result << :around_end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
set_callback(:callback_name, :after){|controller| controller.result << :after}
|
42
|
+
|
43
|
+
def result
|
44
|
+
@result ||= []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
o = BlockCallbacksSpec.new
|
49
|
+
o.run_callbacks(:callback_name){"result"}.should == "result"
|
50
|
+
o.result.should == [:before, :around_begin, :after, :around_end]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "inheritance" do
|
54
|
+
class InheritedCallbacksSpec < BasicCallbacksSpec
|
55
|
+
set_callback :callback_name, :before, :before_callback2
|
56
|
+
end
|
57
|
+
|
58
|
+
o = InheritedCallbacksSpec.new
|
59
|
+
o.should_receive :before_callback
|
60
|
+
o.should_receive :before_callback2
|
61
|
+
o.should_receive :around_callback_called
|
62
|
+
o.should_receive :after_callback
|
63
|
+
o.run_callbacks(:callback_name){"result"}.should == "result"
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'terminator' do
|
67
|
+
class CallbackTerminatorSpec
|
68
|
+
inherit RubyExt::Callbacks
|
69
|
+
|
70
|
+
set_callback :callback_name, :before, :before_callback, terminator: false
|
71
|
+
set_callback :callback_name, :before, :before_callback2
|
72
|
+
|
73
|
+
def method
|
74
|
+
run_callbacks :callback_name do
|
75
|
+
"result"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
protected
|
80
|
+
def before_callback
|
81
|
+
false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
o = CallbackTerminatorSpec.new
|
86
|
+
o.should_not_receive :before_callback2
|
87
|
+
o.run_callbacks(:callback_name){"result"}.should_not == "result"
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'conditions' do
|
91
|
+
class CallbackConditionsSpec
|
92
|
+
inherit RubyExt::Callbacks
|
93
|
+
|
94
|
+
set_callback :callback_name, :before, :before_callback, only: :another_method
|
95
|
+
end
|
96
|
+
|
97
|
+
o = CallbackConditionsSpec.new
|
98
|
+
o.should_not_receive :before_callback
|
99
|
+
o.run_callbacks(:callback_name, method: :method){"result"}.should == 'result'
|
100
|
+
|
101
|
+
o = CallbackConditionsSpec.new
|
102
|
+
o.should_receive :before_callback
|
103
|
+
o.run_callbacks(:callback_name, method: :another_method){"result"}.should == 'result'
|
104
|
+
end
|
105
|
+
|
106
|
+
it "if, unless conditions" do
|
107
|
+
c = RubyExt::Callbacks::AbstractCallback.new
|
108
|
+
c.conditions = {if: lambda{|target, inf| true}}
|
109
|
+
c.run?(nil, {}).should be_true
|
110
|
+
|
111
|
+
c.conditions = {if: lambda{|target, inf| false}}
|
112
|
+
c.run?(nil, {}).should be_false
|
113
|
+
|
114
|
+
c.conditions = {unless: lambda{|target, inf| true}}
|
115
|
+
c.run?(nil, {}).should be_false
|
116
|
+
|
117
|
+
c.conditions = {unless: lambda{|target, inf| false}}
|
118
|
+
c.run?(nil, {}).should be_true
|
119
|
+
end
|
120
|
+
|
121
|
+
it "only, except conditions" do
|
122
|
+
c = RubyExt::Callbacks::AbstractCallback.new
|
123
|
+
c.conditions = {only: :a}
|
124
|
+
c.run?(nil, {method: :a}).should be_true
|
125
|
+
|
126
|
+
c.conditions = {only: :b}
|
127
|
+
c.run?(nil, {method: :a}).should be_false
|
128
|
+
|
129
|
+
c.conditions = {except: :a}
|
130
|
+
c.run?(nil, {method: :a}).should be_false
|
131
|
+
|
132
|
+
c.conditions = {except: :b}
|
133
|
+
c.run?(nil, {method: :a}).should be_true
|
134
|
+
|
135
|
+
c.conditions = {only: :a}
|
136
|
+
c.run?(nil, {method: :a}).should be_true
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
it "around callback should be able to change result value" do
|
141
|
+
class ChangeResultValueSpec
|
142
|
+
inherit RubyExt::Callbacks
|
143
|
+
|
144
|
+
set_callback :callback_name, :around, :around_callback
|
145
|
+
|
146
|
+
def around_callback
|
147
|
+
yield
|
148
|
+
'another result'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
o = ChangeResultValueSpec.new
|
153
|
+
o.run_callbacks(:callback_name){"result"}.should == 'another result'
|
154
|
+
end
|
155
|
+
end
|