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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82b235594232cccbcac8ea901232262324cd7748
4
- data.tar.gz: 3c6c8d2b2cbcbdc5d435a30e30bf6ed2f078bddf
3
+ metadata.gz: a4a51863f3095d478f8d824e502a59e477a9eeb2
4
+ data.tar.gz: b13a296f50c14fb37b332fff619fce2008cc9b9f
5
5
  SHA512:
6
- metadata.gz: 0c15ea016bf6bec45f30cc52e17369476be9503361bc935b85b3c4b7999bd980b9b8fd60f36dd6c5d7a5d2cda85fc68b9cd6166055c268ae9f74b84aee23e7da
7
- data.tar.gz: fbdf2e41392c293b9afd9433dad03d672aa196cd97a4efcd286801d8b8c92ffac611efc46031de3e6dafde83f7588f665df39cd7f53299b1a6691cfd1c138616
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
@@ -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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "micromachine"
3
- s.version = "2.1.0"
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"]
@@ -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: 2.1.0
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-07-07 00:00:00.000000000 Z
11
+ date: 2017-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cutest