finity 0.0.2 → 0.0.3
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/README.md +5 -5
- data/lib/finity.rb +0 -6
- data/lib/finity/machine.rb +9 -8
- data/lib/finity/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -48,7 +48,7 @@ class Readfile
|
|
48
48
|
|
49
49
|
event :read do
|
50
50
|
transitions :from => [:opened, :reading], :to => :reading,
|
51
|
-
:if => proc { not @file.eof? }
|
51
|
+
:if => proc { not @file.eof? },
|
52
52
|
:do => proc { log 'Reading next line of file' }
|
53
53
|
|
54
54
|
transitions :from => [:opened, :reading], :to => :reading,
|
@@ -97,10 +97,10 @@ object. Many other state machine implementations define one method for each even
|
|
97
97
|
however, **Finity** tries to be as minimally invasive as possible:
|
98
98
|
|
99
99
|
```
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
100
|
+
object = SomeClassIncludingFinity.new
|
101
|
+
if object.state? :some_state
|
102
|
+
object.event! :some_event
|
103
|
+
end
|
104
104
|
```
|
105
105
|
|
106
106
|
[transitions]: https://github.com/troessner/transitions
|
data/lib/finity.rb
CHANGED
@@ -35,12 +35,6 @@ module Finity
|
|
35
35
|
module ClassMethods
|
36
36
|
attr_accessor :machine
|
37
37
|
|
38
|
-
# When inheriting this module, pass the registered machines to the
|
39
|
-
# inheriting class after executing potential parent inheritance logic.
|
40
|
-
def inherited klass
|
41
|
-
super and klass.machine = machine
|
42
|
-
end
|
43
|
-
|
44
38
|
# Instantiate a new state machine for the including class by accepting a
|
45
39
|
# block with state and event (and subsequent transition) definitions.
|
46
40
|
def finity options = {}, &block
|
data/lib/finity/machine.rb
CHANGED
@@ -27,7 +27,7 @@ module Finity
|
|
27
27
|
# Initialize a new state machine within the provided class and define
|
28
28
|
# methods for querying the current state and initiating transitions.
|
29
29
|
def initialize klass, options = {}, &block
|
30
|
-
@klass, @states, @events, @
|
30
|
+
@klass, @states, @events, @inital = klass, {}, {}, options.delete(:inital)
|
31
31
|
@klass.send :define_method, :event! do |*args|
|
32
32
|
klass.machine.update self, *args
|
33
33
|
end
|
@@ -35,11 +35,12 @@ module Finity
|
|
35
35
|
klass.machine.current.name.eql? *args
|
36
36
|
end
|
37
37
|
instance_eval &block if block_given?
|
38
|
+
@current = inital
|
38
39
|
end
|
39
40
|
|
40
41
|
# Return the name of the initial state.
|
41
|
-
def
|
42
|
-
@
|
42
|
+
def inital
|
43
|
+
@inital ||= @states.keys.first unless @states.first.nil?
|
43
44
|
end
|
44
45
|
|
45
46
|
# Register a state.
|
@@ -55,14 +56,14 @@ module Finity
|
|
55
56
|
# An event occured, so update the state machine by evaluating the
|
56
57
|
# transition functions and notify the left and entered state.
|
57
58
|
def update object, event
|
58
|
-
|
59
|
-
if
|
59
|
+
current ||= @states[@current || inital]
|
60
|
+
if state = @events[event].handle(object, current)
|
60
61
|
if @states[state].nil?
|
61
62
|
raise InvalidState, "Invalid state '#{state}'"
|
62
63
|
end
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
current.leave object
|
65
|
+
current = @states[@current = state]
|
66
|
+
current.enter object
|
66
67
|
end
|
67
68
|
end
|
68
69
|
end
|
data/lib/finity/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: finity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|