statemachine 2.2.0 → 2.3.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 +6 -0
- data/README.rdoc +2 -2
- data/Rakefile +3 -3
- data/lib/statemachine/builder.rb +7 -0
- data/lib/statemachine/statemachine.rb +11 -4
- data/lib/statemachine/version.rb +1 -1
- data/spec/sm_state_change_action_spec.rb +25 -0
- metadata +5 -3
data/CHANGES
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
= Statemachine Changelog
|
2
2
|
|
3
|
+
== Version 2.3.0
|
4
|
+
|
5
|
+
* Introduce on_state_change for building persistent states from @godfat (https://github.com/slagyr/statemachine/pull/13)
|
6
|
+
* Update rake tasks according to it's deprecation messages from @godfat (https://github.com/slagyr/statemachine/pull/14)
|
7
|
+
* Base Exceptions on StandardError from @Asmod4n (https://github.com/slagyr/statemachine/pull/15)
|
8
|
+
|
3
9
|
== Version 2.2.0
|
4
10
|
|
5
11
|
* applied dotfile improvements from @wsobel (https://github.com/slagyr/statemachine/pull/12)
|
data/README.rdoc
CHANGED
@@ -17,11 +17,11 @@ Some documentation is available here in this RDOC documentation.
|
|
17
17
|
You may also find useful documentation on the Statemachine website: http://slagyr.github.com/statemachine
|
18
18
|
|
19
19
|
A detailed tutorial and overview of Finite State Machines and this library can be found
|
20
|
-
at http://blog.8thlight.com/
|
20
|
+
at http://blog.8thlight.com/micah-martin/2006/11/17/understanding-statemachines-part-1-states-and-transitions.html
|
21
21
|
|
22
22
|
== License
|
23
23
|
|
24
|
-
Copyright (C) 2006-
|
24
|
+
Copyright (C) 2006-2014 Micah Martin
|
25
25
|
|
26
26
|
This library is free software; you can redistribute it and/or
|
27
27
|
modify it under the terms of the GNU Lesser General Public
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
$:.unshift('lib')
|
2
2
|
require 'rubygems'
|
3
|
-
require '
|
3
|
+
require 'rubygems/package_task'
|
4
4
|
require 'rake/clean'
|
5
|
-
require '
|
5
|
+
require 'rdoc/task'
|
6
6
|
require 'rspec/core/rake_task'
|
7
7
|
require 'statemachine'
|
8
8
|
require "bundler/gem_tasks"
|
@@ -85,4 +85,4 @@ end
|
|
85
85
|
|
86
86
|
task :verify_password do
|
87
87
|
raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
|
88
|
-
end
|
88
|
+
end
|
data/lib/statemachine/builder.rb
CHANGED
@@ -276,6 +276,13 @@ module Statemachine
|
|
276
276
|
require 'statemachine/stub_context'
|
277
277
|
context StubContext.new(options)
|
278
278
|
end
|
279
|
+
|
280
|
+
# This callback would be called whenever the statemachine is changing the state.
|
281
|
+
# This is useful whenever we want to make the state persistent and store into
|
282
|
+
# some database.
|
283
|
+
def on_state_change(action=nil, &block)
|
284
|
+
@statemachine.state_change_action = action || block
|
285
|
+
end
|
279
286
|
end
|
280
287
|
|
281
288
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Statemachine
|
2
2
|
|
3
|
-
class StatemachineException <
|
3
|
+
class StatemachineException < StandardError
|
4
4
|
end
|
5
5
|
|
6
|
-
class TransitionMissingException <
|
6
|
+
class TransitionMissingException < StandardError
|
7
7
|
end
|
8
8
|
|
9
9
|
# Used at runtime to execute the behavior of the statemachine.
|
@@ -38,6 +38,11 @@ module Statemachine
|
|
38
38
|
# so that they can be matched to the correct statemachine.
|
39
39
|
attr_accessor :name
|
40
40
|
|
41
|
+
# This callback would be called whenever the statemachine is changing the state.
|
42
|
+
# This is useful whenever we want to make the state persistent and store into
|
43
|
+
# some database.
|
44
|
+
attr_accessor :state_change_action
|
45
|
+
|
41
46
|
attr_reader :root #:nodoc:
|
42
47
|
|
43
48
|
# Should not be called directly. Instances of Statemachine::Statemachine are created
|
@@ -55,9 +60,9 @@ module Statemachine
|
|
55
60
|
|
56
61
|
# Resets the statemachine back to its starting state.
|
57
62
|
def reset
|
58
|
-
|
63
|
+
self.state = get_state(@root.startstate_id)
|
59
64
|
while @state and not @state.concrete?
|
60
|
-
|
65
|
+
self.state = get_state(@state.startstate_id)
|
61
66
|
end
|
62
67
|
raise StatemachineException.new("The state machine doesn't know where to start. Try setting the startstate.") if @state == nil
|
63
68
|
@state.enter
|
@@ -80,6 +85,8 @@ module Statemachine
|
|
80
85
|
elsif value and @states[value.to_sym]
|
81
86
|
@state = @states[value.to_sym]
|
82
87
|
end
|
88
|
+
|
89
|
+
invoke_action(state_change_action, [@state], "state change action to #{@state}") if state_change_action
|
83
90
|
end
|
84
91
|
|
85
92
|
# The key method to exercise the statemachine. Any extra arguments supplied will be passed into
|
data/lib/statemachine/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
|
+
|
3
|
+
describe "State Machine State Change Action" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
me = self
|
7
|
+
@sm = Statemachine.build do
|
8
|
+
trans :default_state, :start, :test_state
|
9
|
+
|
10
|
+
context me
|
11
|
+
|
12
|
+
sm = statemachine
|
13
|
+
on_state_change do
|
14
|
+
@state = sm.state
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "would call on_state_change when the state was changed" do
|
20
|
+
@state.should eql(:default_state)
|
21
|
+
@sm.start
|
22
|
+
@state.should eql(:test_state)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statemachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire: statemachine
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-08-18 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Statemachine is a ruby library for building Finite State Machines (FSM),
|
15
15
|
also known as Finite State Automata (FSA).
|
@@ -177,6 +177,7 @@ files:
|
|
177
177
|
- spec/sm_entry_exit_actions_spec.rb
|
178
178
|
- spec/sm_odds_n_ends_spec.rb
|
179
179
|
- spec/sm_simple_spec.rb
|
180
|
+
- spec/sm_state_change_action_spec.rb
|
180
181
|
- spec/sm_super_state_spec.rb
|
181
182
|
- spec/sm_turnstile_spec.rb
|
182
183
|
- spec/spec_helper.rb
|
@@ -205,7 +206,7 @@ rubyforge_project: statemachine
|
|
205
206
|
rubygems_version: 1.8.24
|
206
207
|
signing_key:
|
207
208
|
specification_version: 3
|
208
|
-
summary: Statemachine-2.
|
209
|
+
summary: Statemachine-2.3.0 - Statemachine Library for Ruby http://slagyr.github.com/statemachine
|
209
210
|
test_files:
|
210
211
|
- spec/action_invokation_spec.rb
|
211
212
|
- spec/builder_spec.rb
|
@@ -217,6 +218,7 @@ test_files:
|
|
217
218
|
- spec/sm_entry_exit_actions_spec.rb
|
218
219
|
- spec/sm_odds_n_ends_spec.rb
|
219
220
|
- spec/sm_simple_spec.rb
|
221
|
+
- spec/sm_state_change_action_spec.rb
|
220
222
|
- spec/sm_super_state_spec.rb
|
221
223
|
- spec/sm_turnstile_spec.rb
|
222
224
|
- spec/spec_helper.rb
|