dm-is-state_machine 0.9.8 → 0.9.9
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/History.txt +8 -1
- data/lib/dm-is-state_machine/is/dsl/event_dsl.rb +1 -4
- data/lib/dm-is-state_machine/is/state_machine.rb +8 -0
- data/lib/dm-is-state_machine/is/version.rb +1 -1
- data/lib/dm-is-state_machine.rb +1 -1
- data/spec/examples/traffic_light.rb +13 -0
- data/spec/integration/traffic_light_spec.rb +36 -0
- metadata +3 -3
data/History.txt
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
+
=== 0.9.9 / 2009-01-04
|
2
|
+
|
3
|
+
* 1 minor enhancement:
|
4
|
+
|
5
|
+
* Added transition! to allow before/after hooks to execute on state
|
6
|
+
transitions.
|
7
|
+
|
1
8
|
=== 0.9.8 / 2008-12-07
|
2
9
|
|
3
10
|
* No changes this version
|
4
11
|
|
5
12
|
=== 0.9.7 / 2008-11-18
|
6
13
|
|
7
|
-
4 minor enhancements:
|
14
|
+
* 4 minor enhancements:
|
8
15
|
|
9
16
|
* Added support to pass a symbol to a transition, which will call the
|
10
17
|
corresponding method. This means you don't have to put a whole
|
@@ -42,11 +42,8 @@ module DataMapper
|
|
42
42
|
push_state_machine_context(:event)
|
43
43
|
|
44
44
|
# ===== Define methods =====
|
45
|
-
column = machine.column
|
46
45
|
define_method("#{name}!") do
|
47
|
-
|
48
|
-
machine.fire_event(name, self)
|
49
|
-
send(:"#{column}=", machine.current_state_name)
|
46
|
+
transition!(name)
|
50
47
|
end
|
51
48
|
|
52
49
|
# Possible alternative to the above:
|
@@ -103,6 +103,14 @@ module DataMapper
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
+
def transition!(event_name)
|
107
|
+
machine = self.class.instance_variable_get(:@is_state_machine)[:machine]
|
108
|
+
column = machine.column
|
109
|
+
machine.current_state_name = attribute_get(:"#{column}")
|
110
|
+
machine.fire_event(event_name, self)
|
111
|
+
attribute_set(:"#{column}", machine.current_state_name)
|
112
|
+
end
|
113
|
+
|
106
114
|
end # InstanceMethods
|
107
115
|
|
108
116
|
end # StateMachine
|
data/lib/dm-is-state_machine.rb
CHANGED
@@ -22,7 +22,20 @@ class TrafficLight
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
before :transition!, :before_hook
|
26
|
+
after :transition!, :after_hook
|
27
|
+
|
28
|
+
def before_hook
|
29
|
+
before_hook_log << attribute_get(:color)
|
30
|
+
end
|
31
|
+
|
32
|
+
def after_hook
|
33
|
+
after_hook_log << attribute_get(:color)
|
34
|
+
end
|
35
|
+
|
25
36
|
def log; @log ||= [] end
|
37
|
+
def before_hook_log; @bh_log ||= [] end
|
38
|
+
def after_hook_log; @ah_log ||= [] end
|
26
39
|
|
27
40
|
attr_reader :init
|
28
41
|
def initialize(*args)
|
@@ -147,4 +147,40 @@ describe TrafficLight do
|
|
147
147
|
|
148
148
|
end
|
149
149
|
|
150
|
+
describe "hooks" do
|
151
|
+
|
152
|
+
it "should log initial state before state is changed on a before hook" do
|
153
|
+
@t.forward!
|
154
|
+
@t.before_hook_log.should == %w(green)
|
155
|
+
@t.forward!
|
156
|
+
@t.before_hook_log.should == %w(green yellow)
|
157
|
+
@t.forward!
|
158
|
+
@t.before_hook_log.should == %w(green yellow red)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should log final state before state is changed on a before hook" do
|
162
|
+
@t.forward!
|
163
|
+
@t.after_hook_log.should == %w(yellow)
|
164
|
+
@t.forward!
|
165
|
+
@t.after_hook_log.should == %w(yellow red)
|
166
|
+
@t.forward!
|
167
|
+
@t.after_hook_log.should == %w(yellow red green)
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "overwriting event methods" do
|
173
|
+
|
174
|
+
before(:all) do
|
175
|
+
TrafficLight.class_eval "def forward!(added_param); log << added_param; transition!(:forward); end"
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should transition normally with added functionality" do
|
179
|
+
@t.color.should == "green"
|
180
|
+
@t.forward!("test")
|
181
|
+
@t.color.should == "yellow"
|
182
|
+
@t.log.should == %w(G test Y)
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
150
186
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-is-state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David James
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-04 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.
|
23
|
+
version: 0.9.9
|
24
24
|
version:
|
25
25
|
description: DataMapper plugin for creating state machines
|
26
26
|
email:
|