micromachine 2.1.0 → 3.0.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/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
|