stealth 0.9.8 → 0.10.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -3
- data/VERSION +1 -1
- data/lib/stealth/base.rb +3 -1
- data/lib/stealth/controller/callbacks.rb +64 -0
- data/lib/stealth/controller/catch_all.rb +54 -0
- data/lib/stealth/{controller.rb → controller/controller.rb} +28 -20
- data/lib/stealth/errors.rb +6 -0
- data/lib/stealth/flow/base.rb +17 -211
- data/lib/stealth/flow/core_ext.rb +11 -0
- data/lib/stealth/flow/specification.rb +12 -45
- data/lib/stealth/flow/state.rb +49 -19
- data/lib/stealth/session.rb +50 -7
- data/spec/configuration_spec.rb +2 -2
- data/spec/controller/callbacks_spec.rb +225 -0
- data/spec/controller/state_transitions_spec.rb +108 -0
- data/spec/flow/flow_spec.rb +13 -43
- data/spec/flow/state_spec.rb +71 -0
- data/spec/session_spec.rb +116 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/sample_messages.rb +65 -0
- data/spec/{sample_services_yml → support}/services.yml +0 -0
- data/spec/{sample_services_yml → support}/services_with_erb.yml +0 -0
- data/stealth.gemspec +1 -0
- metadata +35 -15
- data/lib/stealth/flow/errors.rb +0 -25
- data/lib/stealth/flow/event.rb +0 -43
- data/lib/stealth/flow/event_collection.rb +0 -41
- data/spec/flow/custom_transitions_spec.rb +0 -99
- data/spec/flow/transition_callbacks_spec.rb +0 -228
@@ -1,228 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
-
|
5
|
-
describe "transition callbacks" do
|
6
|
-
|
7
|
-
class KonamiCodeFlow
|
8
|
-
include Stealth::Flow
|
9
|
-
|
10
|
-
attr_reader :code, :before_transition_count, :transition_count
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
@code = []
|
14
|
-
@before_transition_count = 0
|
15
|
-
@transition_count = 0
|
16
|
-
end
|
17
|
-
|
18
|
-
flow do
|
19
|
-
state :up do
|
20
|
-
event :upward, :transitions_to => :up
|
21
|
-
event :downward, :transitions_to => :down
|
22
|
-
end
|
23
|
-
|
24
|
-
state :down do
|
25
|
-
event :downward, :transitions_to => :down
|
26
|
-
event :leftward, :transitions_to => :left
|
27
|
-
end
|
28
|
-
|
29
|
-
state :left do
|
30
|
-
event :rightward, :transitions_to => :right
|
31
|
-
end
|
32
|
-
|
33
|
-
state :right do
|
34
|
-
event :leftward, :transitions_to => :left
|
35
|
-
event :bward, :transitions_to => :b
|
36
|
-
end
|
37
|
-
|
38
|
-
state :a
|
39
|
-
|
40
|
-
state :b do
|
41
|
-
event :award, :transitions_to => :a
|
42
|
-
end
|
43
|
-
|
44
|
-
before_transition do |from, to, triggering_event, *event_args|
|
45
|
-
@before_transition_count += 1
|
46
|
-
end
|
47
|
-
|
48
|
-
after_transition do |from, to, triggering_event, *event_args|
|
49
|
-
@code << to.to_s
|
50
|
-
end
|
51
|
-
|
52
|
-
on_transition {
|
53
|
-
@transition_count += 1
|
54
|
-
}
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
let(:flow) { KonamiCodeFlow.new }
|
59
|
-
|
60
|
-
before(:each) do
|
61
|
-
flow.upward!
|
62
|
-
flow.upward!
|
63
|
-
flow.downward!
|
64
|
-
flow.downward!
|
65
|
-
flow.leftward!
|
66
|
-
flow.rightward!
|
67
|
-
flow.leftward!
|
68
|
-
flow.rightward!
|
69
|
-
flow.bward!
|
70
|
-
flow.award!
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should have a correct transition count" do
|
74
|
-
expect(flow.transition_count).to eq 10
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should have a correct before_transition count" do
|
78
|
-
expect(flow.before_transition_count).to eq 10
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should have generated the correct code via after_transition" do
|
82
|
-
expect(flow.code).to eq(['up', 'up', 'down', 'down', 'left', 'right', 'left', 'right', 'b', 'a'])
|
83
|
-
end
|
84
|
-
|
85
|
-
describe "on_error callbacks" do
|
86
|
-
class ErrorFlow
|
87
|
-
include Stealth::Flow
|
88
|
-
|
89
|
-
attr_reader :errors
|
90
|
-
|
91
|
-
def initialize
|
92
|
-
@errors = {}
|
93
|
-
end
|
94
|
-
|
95
|
-
flow do
|
96
|
-
state :first do
|
97
|
-
event :advance, :transitions_to => :second do
|
98
|
-
raise "uh oh"
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
state :second
|
103
|
-
|
104
|
-
on_error do |error, from, to, event, *args|
|
105
|
-
@errors.merge!({
|
106
|
-
error: error.class,
|
107
|
-
from: from,
|
108
|
-
to: to,
|
109
|
-
event: event,
|
110
|
-
args: args
|
111
|
-
})
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
let(:error_flow) { ErrorFlow.new }
|
117
|
-
|
118
|
-
it "should not advance to the next state" do
|
119
|
-
error_flow.advance!
|
120
|
-
expect(error_flow.current_state).to eq :first
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should call the on_error block" do
|
124
|
-
error_flow.advance!
|
125
|
-
expect(error_flow.errors).to eq({ error: RuntimeError, from: :first, to: :second, event: :advance, args: [] })
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe "on_entry and on_exit callbacks" do
|
130
|
-
class PostFlow
|
131
|
-
include Stealth::Flow
|
132
|
-
|
133
|
-
attr_reader :email_reviewer, :tweet_link
|
134
|
-
|
135
|
-
def initialize
|
136
|
-
@email_reviewer = false
|
137
|
-
@tweet_link = false
|
138
|
-
end
|
139
|
-
|
140
|
-
flow do
|
141
|
-
state :draft do
|
142
|
-
event :submit_for_review, :transitions_to => :in_review
|
143
|
-
|
144
|
-
on_exit do
|
145
|
-
@email_reviewer = true
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
state :in_review do
|
150
|
-
event :approve, :transitions_to => :live
|
151
|
-
event :reject, :transitions_to => :draft
|
152
|
-
end
|
153
|
-
|
154
|
-
state :live do
|
155
|
-
on_entry do
|
156
|
-
@tweet_link = true
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
let(:post_flow) { PostFlow.new }
|
163
|
-
|
164
|
-
it "should email the reviewer when flow transitions (on_exit) to in_review" do
|
165
|
-
expect {
|
166
|
-
post_flow.submit_for_review!
|
167
|
-
}.to change(post_flow, :email_reviewer).from(false).to(true)
|
168
|
-
end
|
169
|
-
|
170
|
-
it "should tweet the post link when flow transitions (on_entry) to live" do
|
171
|
-
post_flow.submit_for_review!
|
172
|
-
|
173
|
-
expect {
|
174
|
-
post_flow.approve!
|
175
|
-
}.to change(post_flow, :tweet_link).from(false).to(true)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
describe "on_entry and on_exit method-style callbacks" do
|
180
|
-
class ConcisePostFlow
|
181
|
-
include Stealth::Flow
|
182
|
-
|
183
|
-
attr_reader :email_reviewer, :tweet_link
|
184
|
-
|
185
|
-
def initialize
|
186
|
-
@email_reviewer = false
|
187
|
-
@tweet_link = false
|
188
|
-
end
|
189
|
-
|
190
|
-
flow do
|
191
|
-
state :draft do
|
192
|
-
event :submit_for_review, :transitions_to => :in_review
|
193
|
-
end
|
194
|
-
|
195
|
-
state :in_review do
|
196
|
-
event :approve, :transitions_to => :live
|
197
|
-
event :reject, :transitions_to => :draft
|
198
|
-
end
|
199
|
-
|
200
|
-
state :live
|
201
|
-
end
|
202
|
-
|
203
|
-
def on_draft_exit(new_state, event, *args)
|
204
|
-
@email_reviewer = true
|
205
|
-
end
|
206
|
-
|
207
|
-
def on_live_entry(prior_state, event, *args)
|
208
|
-
@tweet_link = true
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
let(:post_flow) { ConcisePostFlow.new }
|
213
|
-
|
214
|
-
it "should email the reviewer when flow transitions (on_exit) to in_review" do
|
215
|
-
expect {
|
216
|
-
post_flow.submit_for_review!
|
217
|
-
}.to change(post_flow, :email_reviewer).from(false).to(true)
|
218
|
-
end
|
219
|
-
|
220
|
-
it "should tweet the post link when flow transitions (on_entry) to live" do
|
221
|
-
post_flow.submit_for_review!
|
222
|
-
|
223
|
-
expect {
|
224
|
-
post_flow.approve!
|
225
|
-
}.to change(post_flow, :tweet_link).from(false).to(true)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|