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 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