micromachine 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -0
- data/lib/micromachine.rb +6 -6
- data/micromachine.gemspec +1 -1
- data/test/callbacks.rb +15 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4a51863f3095d478f8d824e502a59e477a9eeb2
|
4
|
+
data.tar.gz: b13a296f50c14fb37b332fff619fce2008cc9b9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4445768d0cdc3ccab91f13197e619f91713a86b28f5bd10cabc35c3ddd775be2a1dd872f73f621bd6d0601be580239255ab407b045e9ee79e686c38ab5121f53
|
7
|
+
data.tar.gz: 15737673b2f56817b9dc69b01ad6a9628354e59f7121b4a377e603ca3c6ce8bbb1fa008ae3347537c995a1286a60b70db0f6cccd0f08e850ff5167719341d102
|
data/README.md
CHANGED
@@ -89,6 +89,18 @@ end
|
|
89
89
|
Note that `:any` is a special key. Using it as a state when declaring
|
90
90
|
transitions will give you unexpected results.
|
91
91
|
|
92
|
+
You can also pass any data as the second argument for `trigger` and
|
93
|
+
`trigger!` which will be passed to every callback as the second
|
94
|
+
argument too:
|
95
|
+
|
96
|
+
``` ruby
|
97
|
+
machine.on(:any) do |_status, payload|
|
98
|
+
puts payload.inspect
|
99
|
+
end
|
100
|
+
|
101
|
+
machine.trigger(:cancel, from: :user)
|
102
|
+
```
|
103
|
+
|
92
104
|
Finally, you can list possible events or states:
|
93
105
|
|
94
106
|
``` ruby
|
data/lib/micromachine.rb
CHANGED
@@ -19,12 +19,12 @@ class MicroMachine
|
|
19
19
|
transitions_for[event] = transitions
|
20
20
|
end
|
21
21
|
|
22
|
-
def trigger(event)
|
23
|
-
trigger?(event) and change(event)
|
22
|
+
def trigger(event, payload = nil)
|
23
|
+
trigger?(event) and change(event, payload)
|
24
24
|
end
|
25
25
|
|
26
|
-
def trigger!(event)
|
27
|
-
trigger(event) or
|
26
|
+
def trigger!(event, payload = nil)
|
27
|
+
trigger(event, payload) or
|
28
28
|
raise InvalidState.new("Event '#{event}' not valid from state '#{@state}'")
|
29
29
|
end
|
30
30
|
|
@@ -47,10 +47,10 @@ class MicroMachine
|
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
-
def change(event)
|
50
|
+
def change(event, payload = nil)
|
51
51
|
@state = transitions_for[event][@state]
|
52
52
|
callbacks = @callbacks[@state] + @callbacks[:any]
|
53
|
-
callbacks.each { |callback| callback.call(event) }
|
53
|
+
callbacks.each { |callback| callback.call(event, payload) }
|
54
54
|
true
|
55
55
|
end
|
56
56
|
end
|
data/micromachine.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "micromachine"
|
3
|
-
s.version = "
|
3
|
+
s.version = "3.0.0"
|
4
4
|
s.summary = %{Minimal Finite State Machine.}
|
5
5
|
s.description = %Q{There are many finite state machine implementations for Ruby, and they all provide a nice DSL for declaring events, exceptions, callbacks, and all kinds of niceties in general.\n\nBut if all you want is a finite state machine, look no further: this has less than 50 lines of code and provides everything a finite state machine must have, and nothing more.}
|
6
6
|
s.author = ["Michel Martens"]
|
data/test/callbacks.rb
CHANGED
@@ -42,3 +42,18 @@ test "passing the event name to the callbacks" do
|
|
42
42
|
|
43
43
|
assert_equal(:confirm, event_name)
|
44
44
|
end
|
45
|
+
|
46
|
+
test "passing the payload from transition to the callbacks" do
|
47
|
+
received_payload = nil
|
48
|
+
|
49
|
+
machine = MicroMachine.new(:pending)
|
50
|
+
machine.when(:confirm, pending: :confirmed)
|
51
|
+
|
52
|
+
machine.on(:confirmed) do |_event, payload|
|
53
|
+
received_payload = payload
|
54
|
+
end
|
55
|
+
|
56
|
+
machine.trigger(:confirm, foo: :bar)
|
57
|
+
|
58
|
+
assert_equal({ foo: :bar }, received_payload)
|
59
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: micromachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Martens
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cutest
|