ruby_valve 0.0.3 → 0.0.4
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.
- checksums.yaml +4 -4
- data/README.md +16 -3
- data/lib/ruby_valve/base.rb +2 -124
- data/lib/ruby_valve/core.rb +129 -0
- data/lib/ruby_valve/version.rb +1 -1
- data/ruby_valve.gemspec +1 -1
- data/spec/lib/ruby_valve/base_spec.rb +320 -16
- data/spec/lib/{base_spec.rb → ruby_valve/core_spec.rb} +40 -19
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4d50d81c326d8a6f9697ecca411d1c93e55e1b8
|
4
|
+
data.tar.gz: 40067d0f4e20b60631aa0a266902163ee18d12f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e50b22481aad6156bd1a24a706638874cd6a08f255353da7025c9800d7b1a0f1885a82dd2f9c77ec57b36331dcf6975cff28a59465e16a994733137a09a190b
|
7
|
+
data.tar.gz: 9daf1e21a4ee2de2e30c256b25d6f74f0a20c52cc3f271e98af945b9f5c6b399e7c45a45d1cc7c2732d48ef05d04bd837aad07605d7aef1d77c4acfa62f53024
|
data/README.md
CHANGED
@@ -21,13 +21,21 @@ Or install it yourself as:
|
|
21
21
|
## Usage
|
22
22
|
|
23
23
|
|
24
|
-
To use RubyValve you
|
24
|
+
To use RubyValve you can subclass the base class:
|
25
25
|
|
26
26
|
require 'ruby_valve'
|
27
27
|
|
28
28
|
class Foo < RubyValve::Base
|
29
29
|
end
|
30
30
|
|
31
|
+
Or, you can include RubyValve::Core
|
32
|
+
|
33
|
+
require 'ruby_valve'
|
34
|
+
|
35
|
+
class Foo
|
36
|
+
include RubyValve::Core
|
37
|
+
|
38
|
+
end
|
31
39
|
|
32
40
|
####\#step_n methods
|
33
41
|
Next you define a number steps using the naming convention of #step_n for the method name.
|
@@ -43,7 +51,7 @@ Next you define a number steps using the naming convention of #step_n for the me
|
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
46
|
-
After defining #step_n methods you can execute
|
54
|
+
After defining #step_n methods you can execute them all by running the #execute method.
|
47
55
|
|
48
56
|
Foo.new.execute
|
49
57
|
|
@@ -358,4 +366,9 @@ I would recommend encapsulating the logic of what is to be done into methods wit
|
|
358
366
|
|
359
367
|
def post_paypal_transaction
|
360
368
|
#code
|
361
|
-
end
|
369
|
+
end
|
370
|
+
|
371
|
+
###Tests
|
372
|
+
Test are implemented in Rspec and use guard as well.
|
373
|
+
|
374
|
+
ruby_valve > bundle exec rspec spec
|
data/lib/ruby_valve/base.rb
CHANGED
@@ -1,130 +1,8 @@
|
|
1
|
-
require 'ruby_valve/
|
1
|
+
require 'ruby_valve/core'
|
2
2
|
|
3
3
|
module RubyValve
|
4
4
|
class Base
|
5
|
-
|
6
|
-
|
7
|
-
def init
|
8
|
-
@skip_list = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def execute
|
12
|
-
init
|
13
|
-
|
14
|
-
if respond_to?(:after_exception)
|
15
|
-
begin
|
16
|
-
execute_methods
|
17
|
-
rescue => e
|
18
|
-
@exception = e
|
19
|
-
send(:after_exception)
|
20
|
-
end
|
21
|
-
else
|
22
|
-
execute_methods
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def response
|
28
|
-
@response
|
29
|
-
end
|
30
|
-
|
31
|
-
protected
|
32
|
-
|
33
|
-
def execute_methods
|
34
|
-
# begin
|
35
|
-
@response = {}
|
36
|
-
|
37
|
-
if respond_to?(:before_all)
|
38
|
-
send(:before_all)
|
39
|
-
log_execution(:before_all)
|
40
|
-
end
|
41
|
-
|
42
|
-
execution_order.each do |_method|
|
43
|
-
if !self.skip?(_method)
|
44
|
-
|
45
|
-
if respond_to?(:before_each)
|
46
|
-
send(:before_each)
|
47
|
-
log_execution(:before_each)
|
48
|
-
end
|
49
|
-
|
50
|
-
#create method to store step results
|
51
|
-
self.class.class_eval {attr_accessor :"#{_method}_result"}
|
52
|
-
result = send(_method)
|
53
|
-
|
54
|
-
#assign step result information
|
55
|
-
@response[:"#{_method}_result"] = result
|
56
|
-
send(:"#{_method}_result=", result)
|
57
|
-
|
58
|
-
#log step exec
|
59
|
-
log_step_execution(_method)
|
60
|
-
|
61
|
-
if respond_to?(:after_each)
|
62
|
-
send(:after_each)
|
63
|
-
log_execution(:after_each)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
if respond_to?(:after_success) && !abort_triggered?
|
69
|
-
send(:after_success)
|
70
|
-
log_execution(:after_success)
|
71
|
-
end
|
72
|
-
|
73
|
-
if respond_to?(:after_abort) && abort_triggered?
|
74
|
-
send(:after_abort)
|
75
|
-
log_execution(:after_abort)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
#=> logging methods
|
80
|
-
def log_step_execution(_method)
|
81
|
-
(@executed_steps ||= []) << _method
|
82
|
-
log_execution(_method)
|
83
|
-
end
|
84
|
-
|
85
|
-
def log_execution(_method)
|
86
|
-
(@executed ||= []) << _method
|
87
|
-
end
|
88
|
-
|
89
|
-
def abort(message, options = {})
|
90
|
-
@abort_triggered = true
|
91
|
-
@abort_message = message
|
92
|
-
raise(AbortError, @abort_message) if options[:raise]
|
93
|
-
end
|
94
|
-
|
95
|
-
#=> skip methods
|
96
|
-
def skip_all_steps?
|
97
|
-
abort_triggered?
|
98
|
-
end
|
99
|
-
|
100
|
-
def skip(*step_names)
|
101
|
-
skip_list.push *step_names
|
102
|
-
end
|
103
|
-
|
104
|
-
def skip_list
|
105
|
-
@skip_list
|
106
|
-
end
|
107
|
-
|
108
|
-
def abort_triggered?
|
109
|
-
@abort_triggered
|
110
|
-
end
|
111
|
-
|
112
|
-
def skip?(method_name)
|
113
|
-
return true if skip_all_steps?
|
114
|
-
|
115
|
-
skip_list.include?(method_name)
|
116
|
-
end
|
117
|
-
|
118
|
-
def execution_order
|
119
|
-
step_methods = methods.select {|meth| meth.to_s.match(/^step_[0-9]*$/)}
|
120
|
-
|
121
|
-
step_methods.sort do |x,y|
|
122
|
-
ordinal_x = x.to_s.split("_").last.to_i
|
123
|
-
ordinal_y = y.to_s.split("_").last.to_i
|
124
|
-
|
125
|
-
ordinal_x <=> ordinal_y
|
126
|
-
end
|
127
|
-
end
|
5
|
+
include Core
|
128
6
|
|
129
7
|
end
|
130
8
|
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'ruby_valve/errors'
|
2
|
+
|
3
|
+
module RubyValve
|
4
|
+
module Core
|
5
|
+
attr_reader :executed_steps, :executed, :exception
|
6
|
+
|
7
|
+
def init
|
8
|
+
@skip_list = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
init
|
13
|
+
|
14
|
+
if respond_to?(:after_exception)
|
15
|
+
begin
|
16
|
+
execute_methods
|
17
|
+
rescue => e
|
18
|
+
@exception = e
|
19
|
+
send(:after_exception)
|
20
|
+
end
|
21
|
+
else
|
22
|
+
execute_methods
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def response
|
28
|
+
@response
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def execute_methods
|
34
|
+
# begin
|
35
|
+
@response = {}
|
36
|
+
|
37
|
+
if respond_to?(:before_all)
|
38
|
+
send(:before_all)
|
39
|
+
log_execution(:before_all)
|
40
|
+
end
|
41
|
+
|
42
|
+
execution_order.each do |_method|
|
43
|
+
if !self.skip?(_method)
|
44
|
+
|
45
|
+
if respond_to?(:before_each)
|
46
|
+
send(:before_each)
|
47
|
+
log_execution(:before_each)
|
48
|
+
end
|
49
|
+
|
50
|
+
#create method to store step results
|
51
|
+
self.class.class_eval {attr_accessor :"#{_method}_result"}
|
52
|
+
result = send(_method)
|
53
|
+
|
54
|
+
#assign step result information
|
55
|
+
@response[:"#{_method}_result"] = result
|
56
|
+
send(:"#{_method}_result=", result)
|
57
|
+
|
58
|
+
#log step exec
|
59
|
+
log_step_execution(_method)
|
60
|
+
|
61
|
+
if respond_to?(:after_each)
|
62
|
+
send(:after_each)
|
63
|
+
log_execution(:after_each)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if respond_to?(:after_success) && !abort_triggered?
|
69
|
+
send(:after_success)
|
70
|
+
log_execution(:after_success)
|
71
|
+
end
|
72
|
+
|
73
|
+
if respond_to?(:after_abort) && abort_triggered?
|
74
|
+
send(:after_abort)
|
75
|
+
log_execution(:after_abort)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#=> logging methods
|
80
|
+
def log_step_execution(_method)
|
81
|
+
(@executed_steps ||= []) << _method
|
82
|
+
log_execution(_method)
|
83
|
+
end
|
84
|
+
|
85
|
+
def log_execution(_method)
|
86
|
+
(@executed ||= []) << _method
|
87
|
+
end
|
88
|
+
|
89
|
+
def abort(message, options = {})
|
90
|
+
@abort_triggered = true
|
91
|
+
@abort_message = message
|
92
|
+
raise(RubyValve::AbortError, @abort_message) if options[:raise]
|
93
|
+
end
|
94
|
+
|
95
|
+
#=> skip methods
|
96
|
+
def skip_all_steps?
|
97
|
+
abort_triggered?
|
98
|
+
end
|
99
|
+
|
100
|
+
def skip(*step_names)
|
101
|
+
skip_list.push *step_names
|
102
|
+
end
|
103
|
+
|
104
|
+
def skip_list
|
105
|
+
@skip_list
|
106
|
+
end
|
107
|
+
|
108
|
+
def abort_triggered?
|
109
|
+
@abort_triggered
|
110
|
+
end
|
111
|
+
|
112
|
+
def skip?(method_name)
|
113
|
+
return true if skip_all_steps?
|
114
|
+
|
115
|
+
skip_list.include?(method_name)
|
116
|
+
end
|
117
|
+
|
118
|
+
def execution_order
|
119
|
+
step_methods = methods.select {|meth| meth.to_s.match(/^step_[0-9]*$/)}
|
120
|
+
|
121
|
+
step_methods.sort do |x,y|
|
122
|
+
ordinal_x = x.to_s.split("_").last.to_i
|
123
|
+
ordinal_y = y.to_s.split("_").last.to_i
|
124
|
+
|
125
|
+
ordinal_x <=> ordinal_y
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/ruby_valve/version.rb
CHANGED
data/ruby_valve.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["necrocommit@gmail.com"]
|
11
11
|
spec.description = %q{This gem provide a mechanism for doing easy flow type code pattern}
|
12
12
|
spec.summary = %q{Programming execution flow control}
|
13
|
-
spec.homepage = "http://github.com/monochromicorn/ruby_valve
|
13
|
+
spec.homepage = "http://github.com/monochromicorn/ruby_valve"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -1,22 +1,38 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
define_method(:step_1) {}
|
5
|
-
define_method(:step_2) {}
|
6
|
-
define_method(:step_3) {}
|
7
|
-
end
|
3
|
+
|
8
4
|
|
9
5
|
describe RubyValve::Base do
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
describe "#execute" do
|
7
|
+
before(:each) do
|
8
|
+
|
9
|
+
class DummyValve
|
10
|
+
include RubyValve::Core
|
11
|
+
|
12
|
+
define_method(:step_1) {}
|
13
|
+
define_method(:step_2) {}
|
14
|
+
define_method(:step_3) {}
|
15
|
+
end
|
16
|
+
|
17
|
+
@valve = DummyValve.new
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should execute all step methods in order" do
|
21
|
+
@valve.execute
|
22
|
+
@valve.executed_steps.should eql([:step_1, :step_2, :step_3])
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not execute steps after an abort" do
|
26
|
+
def @valve.step_0
|
27
|
+
abort "Ug, I give up"
|
28
|
+
end
|
13
29
|
|
14
|
-
|
15
|
-
|
16
|
-
|
30
|
+
@valve.execute
|
31
|
+
@valve.executed_steps.should eql([:step_0])
|
32
|
+
end
|
17
33
|
end
|
18
34
|
|
19
|
-
|
35
|
+
describe "#skip" do
|
20
36
|
before(:each) do
|
21
37
|
|
22
38
|
class SkipValve < RubyValve::Base
|
@@ -32,12 +48,300 @@ describe RubyValve::Base do
|
|
32
48
|
|
33
49
|
it "should not execute skipped steps" do
|
34
50
|
@skip_valve.execute
|
35
|
-
@skip_valve.executed_steps.should eql([])
|
51
|
+
@skip_valve.executed_steps.should eql([:step_1, :step_3])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#response" do
|
56
|
+
before(:each) do
|
57
|
+
|
58
|
+
class Res < RubyValve::Base
|
59
|
+
define_method(:step_1) {"apple"}
|
60
|
+
define_method(:step_2) {"banana"}
|
61
|
+
end
|
62
|
+
|
63
|
+
@res = Res.new
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should contain the method results" do
|
67
|
+
@res.execute
|
68
|
+
@res.response.should eql({:step_1_result=>"apple", :step_2_result=>"banana"})
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#step_x_result" do
|
73
|
+
before(:each) do
|
74
|
+
|
75
|
+
class Res1 < RubyValve::Base
|
76
|
+
define_method(:step_1) {"apple"}
|
77
|
+
define_method(:step_2) {"banana"}
|
78
|
+
end
|
79
|
+
|
80
|
+
@res1 = Res1.new
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should equal the result of #step_x" do
|
84
|
+
@res1.execute
|
85
|
+
@res1.step_1_result.should eql "apple"
|
86
|
+
@res1.step_2_result.should eql "banana"
|
36
87
|
end
|
37
88
|
end
|
38
|
-
# context ".executed_steps" do
|
39
|
-
# it "should re"
|
40
|
-
# end
|
41
89
|
|
90
|
+
describe "#abort" do
|
91
|
+
before(:each) do
|
92
|
+
|
93
|
+
class AfterAbort < RubyValve::Base
|
94
|
+
define_method(:after_abort) {}
|
95
|
+
define_method(:step_1) {skip :step_2}
|
96
|
+
define_method(:step_2) {}
|
97
|
+
define_method(:step_3) {abort "Ug", :raise => true}
|
98
|
+
define_method(:step_4) {}
|
99
|
+
define_method(:step_5) {}
|
100
|
+
end
|
101
|
+
|
102
|
+
@after_abort = AfterAbort.new
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should raise AbortError when :raise => true" do
|
106
|
+
expect {@after_abort.execute}.to raise_error(RubyValve::AbortError, "Ug")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
#==> BEFORE HOOKS
|
111
|
+
describe "#before_each" do
|
112
|
+
before(:each) do
|
113
|
+
|
114
|
+
class BeforeEach < RubyValve::Base
|
115
|
+
define_method(:before_each) {}
|
116
|
+
define_method(:step_1) {skip :step_2}
|
117
|
+
define_method(:step_2) {}
|
118
|
+
define_method(:step_3) {skip :step_4, :step_5}
|
119
|
+
define_method(:step_4) {}
|
120
|
+
define_method(:step_5) {}
|
121
|
+
end
|
122
|
+
|
123
|
+
@before_each = BeforeEach.new
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should execute when defined" do
|
127
|
+
@before_each.should_receive(:before_each).exactly(2)
|
128
|
+
@before_each.execute
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should execute before each step_x" do
|
132
|
+
@before_each.execute
|
133
|
+
@before_each.executed.should eql([:before_each, :step_1, :before_each, :step_3])
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should not show up in executed_steps" do
|
137
|
+
@before_each.execute
|
138
|
+
@before_each.executed_steps.should eql([:step_1, :step_3])
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "#before_all" do
|
144
|
+
before(:each) do
|
145
|
+
|
146
|
+
class BeforeAll < RubyValve::Base
|
147
|
+
define_method(:before_all) {}
|
148
|
+
define_method(:step_1) {skip :step_2}
|
149
|
+
define_method(:step_2) {}
|
150
|
+
define_method(:step_3) {skip :step_4, :step_5}
|
151
|
+
define_method(:step_4) {}
|
152
|
+
define_method(:step_5) {}
|
153
|
+
end
|
154
|
+
|
155
|
+
@before_all = BeforeAll.new
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should execute when defined" do
|
159
|
+
@before_all.should_receive(:before_all).exactly(1)
|
160
|
+
@before_all.execute
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should execute before all steps" do
|
164
|
+
@before_all.execute
|
165
|
+
@before_all.executed.should eql([:before_all, :step_1, :step_3])
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should not show up in executed_steps" do
|
169
|
+
@before_all.execute
|
170
|
+
@before_all.executed_steps.should eql([:step_1, :step_3])
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
#==> AFTER HOOKS
|
176
|
+
describe "#after_each" do
|
177
|
+
before(:each) do
|
178
|
+
|
179
|
+
class AfterEach < RubyValve::Base
|
180
|
+
define_method(:after_each) {}
|
181
|
+
define_method(:step_1) {skip :step_2}
|
182
|
+
define_method(:step_2) {}
|
183
|
+
define_method(:step_3) {skip :step_4, :step_5}
|
184
|
+
define_method(:step_4) {}
|
185
|
+
define_method(:step_5) {}
|
186
|
+
end
|
187
|
+
|
188
|
+
@after_each = AfterEach.new
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should execute when defined" do
|
192
|
+
@after_each.should_receive(:after_each).exactly(2)
|
193
|
+
@after_each.execute
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should execute after each step_x" do
|
197
|
+
@after_each.execute
|
198
|
+
@after_each.executed.should eql([:step_1, :after_each, :step_3, :after_each])
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should not show up in executed_steps" do
|
202
|
+
@after_each.execute
|
203
|
+
@after_each.executed_steps.should eql([:step_1, :step_3])
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
describe "#after_success" do
|
209
|
+
before(:each) do
|
210
|
+
|
211
|
+
class AfterSuccess < RubyValve::Base
|
212
|
+
define_method(:after_success) {}
|
213
|
+
define_method(:step_1) {skip :step_2}
|
214
|
+
define_method(:step_2) {}
|
215
|
+
define_method(:step_3) {skip :step_4, :step_5}
|
216
|
+
define_method(:step_4) {}
|
217
|
+
define_method(:step_5) {}
|
218
|
+
end
|
219
|
+
|
220
|
+
@after_success = AfterSuccess.new
|
221
|
+
end
|
222
|
+
|
223
|
+
context "when no abort is triggered" do
|
224
|
+
|
225
|
+
it "should execute when defined" do
|
226
|
+
@after_success.should_receive(:after_success).exactly(1)
|
227
|
+
@after_success.execute
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should execute after all steps" do
|
231
|
+
@after_success.execute
|
232
|
+
@after_success.executed.should eql([:step_1, :step_3, :after_success])
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should not execute after an abort" do
|
236
|
+
def @after_success.step_1
|
237
|
+
abort "Ug"
|
238
|
+
end
|
239
|
+
|
240
|
+
@after_success.execute
|
241
|
+
@after_success.executed.should eql([:step_1])
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should not show up in executed_steps" do
|
245
|
+
@after_success.execute
|
246
|
+
@after_success.executed_steps.should eql([:step_1, :step_3])
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
context "when an abort is triggered" do
|
252
|
+
it "should not execute when defined" do
|
253
|
+
def @after_success.step_1
|
254
|
+
abort "Ug"
|
255
|
+
end
|
256
|
+
|
257
|
+
@after_success.should_receive(:after_success).exactly(0)
|
258
|
+
@after_success.execute
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe "#after_abort" do
|
264
|
+
context "after an abort is triggered" do
|
265
|
+
before(:each) do
|
266
|
+
|
267
|
+
class AfterAbort < RubyValve::Base
|
268
|
+
define_method(:after_abort) {}
|
269
|
+
define_method(:step_1) {skip :step_2}
|
270
|
+
define_method(:step_2) {}
|
271
|
+
define_method(:step_3) {abort "Ug"}
|
272
|
+
define_method(:step_4) {}
|
273
|
+
define_method(:step_5) {}
|
274
|
+
end
|
275
|
+
|
276
|
+
@after_abort = AfterAbort.new
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should execute when defined" do
|
280
|
+
@after_abort.should_receive(:after_abort).exactly(1)
|
281
|
+
@after_abort.execute
|
282
|
+
end
|
283
|
+
|
284
|
+
it "should execute after all the steps" do
|
285
|
+
@after_abort.execute
|
286
|
+
@after_abort.executed.should eql([:step_1, :step_3, :after_abort])
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should not execute steps after an abort" do
|
290
|
+
@after_abort.execute
|
291
|
+
@after_abort.executed_steps.should eql([:step_1, :step_3])
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should not show up in executed_steps" do
|
295
|
+
@after_abort.execute
|
296
|
+
@after_abort.executed_steps.should eql([:step_1, :step_3])
|
297
|
+
end
|
298
|
+
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
describe "#after_exception" do
|
303
|
+
before(:each) do
|
304
|
+
|
305
|
+
class AfterRaise < RubyValve::Base
|
306
|
+
define_method(:after_exception) {}
|
307
|
+
define_method(:step_1) {skip :step_2}
|
308
|
+
define_method(:step_2) {}
|
309
|
+
define_method(:step_3) {abort "Ug", :raise => true}
|
310
|
+
define_method(:step_4) {}
|
311
|
+
define_method(:step_5) {}
|
312
|
+
|
313
|
+
end
|
314
|
+
|
315
|
+
@after_raise = AfterRaise.new
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should not raise AbortError when :raise => true" do
|
319
|
+
expect {@after_raise.execute}.to_not raise_error
|
320
|
+
end
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
describe "#exception" do
|
325
|
+
before(:each) do
|
326
|
+
|
327
|
+
class AfterRaise < RubyValve::Base
|
328
|
+
define_method(:after_exception) {}
|
329
|
+
define_method(:step_1) {skip :step_2}
|
330
|
+
define_method(:step_2) {}
|
331
|
+
define_method(:step_3) {abort "Ug", :raise => true}
|
332
|
+
define_method(:step_4) {}
|
333
|
+
define_method(:step_5) {}
|
334
|
+
|
335
|
+
end
|
336
|
+
|
337
|
+
@after_raise = AfterRaise.new
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should contain the raised exception" do
|
341
|
+
@after_raise.execute
|
342
|
+
@after_raise.exception.should be_a_kind_of(RubyValve::AbortError)
|
343
|
+
@after_raise.exception.message.should eql("Ug")
|
344
|
+
end
|
42
345
|
|
346
|
+
end
|
43
347
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
DummyValve = Class.new(RubyValve::Base) do
|
4
|
-
define_method(:step_1) {}
|
5
|
-
define_method(:step_2) {}
|
6
|
-
define_method(:step_3) {}
|
7
|
-
end
|
8
|
-
|
9
3
|
describe RubyValve::Base do
|
10
4
|
describe "#execute" do
|
11
5
|
before(:each) do
|
6
|
+
class DummyValve
|
7
|
+
include RubyValve::Core
|
8
|
+
define_method(:step_1) {}
|
9
|
+
define_method(:step_2) {}
|
10
|
+
define_method(:step_3) {}
|
11
|
+
end
|
12
|
+
|
12
13
|
@valve = DummyValve.new
|
13
14
|
end
|
14
15
|
|
@@ -30,7 +31,8 @@ describe RubyValve::Base do
|
|
30
31
|
describe "#skip" do
|
31
32
|
before(:each) do
|
32
33
|
|
33
|
-
class SkipValve
|
34
|
+
class SkipValve
|
35
|
+
include RubyValve::Core
|
34
36
|
define_method(:step_1) {skip :step_2}
|
35
37
|
define_method(:step_2) {}
|
36
38
|
define_method(:step_3) {skip :step_4, :step_5}
|
@@ -50,7 +52,9 @@ describe RubyValve::Base do
|
|
50
52
|
describe "#response" do
|
51
53
|
before(:each) do
|
52
54
|
|
53
|
-
class Res
|
55
|
+
class Res
|
56
|
+
include RubyValve::Core
|
57
|
+
|
54
58
|
define_method(:step_1) {"apple"}
|
55
59
|
define_method(:step_2) {"banana"}
|
56
60
|
end
|
@@ -67,7 +71,9 @@ describe RubyValve::Base do
|
|
67
71
|
describe "#step_x_result" do
|
68
72
|
before(:each) do
|
69
73
|
|
70
|
-
class Res1
|
74
|
+
class Res1
|
75
|
+
include RubyValve::Core
|
76
|
+
|
71
77
|
define_method(:step_1) {"apple"}
|
72
78
|
define_method(:step_2) {"banana"}
|
73
79
|
end
|
@@ -85,7 +91,9 @@ describe RubyValve::Base do
|
|
85
91
|
describe "#abort" do
|
86
92
|
before(:each) do
|
87
93
|
|
88
|
-
class AfterAbort
|
94
|
+
class AfterAbort
|
95
|
+
include RubyValve::Core
|
96
|
+
|
89
97
|
define_method(:after_abort) {}
|
90
98
|
define_method(:step_1) {skip :step_2}
|
91
99
|
define_method(:step_2) {}
|
@@ -106,7 +114,9 @@ describe RubyValve::Base do
|
|
106
114
|
describe "#before_each" do
|
107
115
|
before(:each) do
|
108
116
|
|
109
|
-
class BeforeEach
|
117
|
+
class BeforeEach
|
118
|
+
include RubyValve::Core
|
119
|
+
|
110
120
|
define_method(:before_each) {}
|
111
121
|
define_method(:step_1) {skip :step_2}
|
112
122
|
define_method(:step_2) {}
|
@@ -138,7 +148,8 @@ describe RubyValve::Base do
|
|
138
148
|
describe "#before_all" do
|
139
149
|
before(:each) do
|
140
150
|
|
141
|
-
class BeforeAll
|
151
|
+
class BeforeAll
|
152
|
+
include RubyValve::Core
|
142
153
|
define_method(:before_all) {}
|
143
154
|
define_method(:step_1) {skip :step_2}
|
144
155
|
define_method(:step_2) {}
|
@@ -171,7 +182,9 @@ describe RubyValve::Base do
|
|
171
182
|
describe "#after_each" do
|
172
183
|
before(:each) do
|
173
184
|
|
174
|
-
class AfterEach
|
185
|
+
class AfterEach
|
186
|
+
include RubyValve::Core
|
187
|
+
|
175
188
|
define_method(:after_each) {}
|
176
189
|
define_method(:step_1) {skip :step_2}
|
177
190
|
define_method(:step_2) {}
|
@@ -203,7 +216,9 @@ describe RubyValve::Base do
|
|
203
216
|
describe "#after_success" do
|
204
217
|
before(:each) do
|
205
218
|
|
206
|
-
class AfterSuccess
|
219
|
+
class AfterSuccess
|
220
|
+
include RubyValve::Core
|
221
|
+
|
207
222
|
define_method(:after_success) {}
|
208
223
|
define_method(:step_1) {skip :step_2}
|
209
224
|
define_method(:step_2) {}
|
@@ -259,7 +274,9 @@ describe RubyValve::Base do
|
|
259
274
|
context "after an abort is triggered" do
|
260
275
|
before(:each) do
|
261
276
|
|
262
|
-
class
|
277
|
+
class AfterAbortTest
|
278
|
+
include RubyValve::Core
|
279
|
+
|
263
280
|
define_method(:after_abort) {}
|
264
281
|
define_method(:step_1) {skip :step_2}
|
265
282
|
define_method(:step_2) {}
|
@@ -268,7 +285,7 @@ describe RubyValve::Base do
|
|
268
285
|
define_method(:step_5) {}
|
269
286
|
end
|
270
287
|
|
271
|
-
@after_abort =
|
288
|
+
@after_abort = AfterAbortTest.new
|
272
289
|
end
|
273
290
|
|
274
291
|
it "should execute when defined" do
|
@@ -297,7 +314,9 @@ describe RubyValve::Base do
|
|
297
314
|
describe "#after_exception" do
|
298
315
|
before(:each) do
|
299
316
|
|
300
|
-
class AfterRaise
|
317
|
+
class AfterRaise
|
318
|
+
include RubyValve::Core
|
319
|
+
|
301
320
|
define_method(:after_exception) {}
|
302
321
|
define_method(:step_1) {skip :step_2}
|
303
322
|
define_method(:step_2) {}
|
@@ -319,7 +338,9 @@ describe RubyValve::Base do
|
|
319
338
|
describe "#exception" do
|
320
339
|
before(:each) do
|
321
340
|
|
322
|
-
class
|
341
|
+
class ExceptionTest
|
342
|
+
include RubyValve::Core
|
343
|
+
|
323
344
|
define_method(:after_exception) {}
|
324
345
|
define_method(:step_1) {skip :step_2}
|
325
346
|
define_method(:step_2) {}
|
@@ -329,7 +350,7 @@ describe RubyValve::Base do
|
|
329
350
|
|
330
351
|
end
|
331
352
|
|
332
|
-
@after_raise =
|
353
|
+
@after_raise = ExceptionTest.new
|
333
354
|
end
|
334
355
|
|
335
356
|
it "should contain the raised exception" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_valve
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- monochromicorn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,13 +96,14 @@ files:
|
|
96
96
|
- Rakefile
|
97
97
|
- lib/ruby_valve.rb
|
98
98
|
- lib/ruby_valve/base.rb
|
99
|
+
- lib/ruby_valve/core.rb
|
99
100
|
- lib/ruby_valve/errors.rb
|
100
101
|
- lib/ruby_valve/version.rb
|
101
102
|
- ruby_valve.gemspec
|
102
|
-
- spec/lib/base_spec.rb
|
103
103
|
- spec/lib/ruby_valve/base_spec.rb
|
104
|
+
- spec/lib/ruby_valve/core_spec.rb
|
104
105
|
- spec/spec_helper.rb
|
105
|
-
homepage: http://github.com/monochromicorn/ruby_valve
|
106
|
+
homepage: http://github.com/monochromicorn/ruby_valve
|
106
107
|
licenses:
|
107
108
|
- MIT
|
108
109
|
metadata: {}
|
@@ -127,7 +128,7 @@ signing_key:
|
|
127
128
|
specification_version: 4
|
128
129
|
summary: Programming execution flow control
|
129
130
|
test_files:
|
130
|
-
- spec/lib/base_spec.rb
|
131
131
|
- spec/lib/ruby_valve/base_spec.rb
|
132
|
+
- spec/lib/ruby_valve/core_spec.rb
|
132
133
|
- spec/spec_helper.rb
|
133
134
|
has_rdoc:
|