nxt_state_machine 0.1.2 → 0.1.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -4
- data/lib/nxt_state_machine/event/names.rb +11 -0
- data/lib/nxt_state_machine/event.rb +7 -2
- data/lib/nxt_state_machine/state.rb +10 -0
- data/lib/nxt_state_machine/state_machine.rb +12 -12
- data/lib/nxt_state_machine/version.rb +1 -1
- data/lib/nxt_state_machine.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9bf5b5563e13832c4dde4f772eca02272eec81d24cbc7f65b5d04d65b2a7c72
|
4
|
+
data.tar.gz: 5cf98caf5c0deceb3b49cfb9290523f0feb5fac9959d8be9775734b1b3b05cb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b49ac744754bd5ec04521f1dce4e506c45269a5f68215a85d39f4b7304e0bb42e0b7d48bdabf2ccbbf9c3e088760b4ed820d2377e4332d2797489361b0bb4571
|
7
|
+
data.tar.gz: b712cc23c728cabc29020fbafe36b5e5cd468fe671ee698c1ba1a5906b43f1036abcfe82579965f3f1316e907a2027e2510f6d27a8196cf2ecc2ed43b4cd9cc9
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_state_machine (0.1.
|
4
|
+
nxt_state_machine (0.1.3)
|
5
5
|
activesupport
|
6
6
|
nxt_registry (~> 0.1.3)
|
7
7
|
|
@@ -22,11 +22,11 @@ GEM
|
|
22
22
|
coderay (1.1.2)
|
23
23
|
concurrent-ruby (1.1.5)
|
24
24
|
diff-lcs (1.3)
|
25
|
-
i18n (1.
|
25
|
+
i18n (1.8.2)
|
26
26
|
concurrent-ruby (~> 1.0)
|
27
27
|
method_source (0.9.2)
|
28
|
-
minitest (5.
|
29
|
-
nxt_registry (0.1.
|
28
|
+
minitest (5.14.0)
|
29
|
+
nxt_registry (0.1.4)
|
30
30
|
activesupport
|
31
31
|
pry (0.12.2)
|
32
32
|
coderay (~> 1.1.0)
|
@@ -2,17 +2,18 @@ module NxtStateMachine
|
|
2
2
|
class Event
|
3
3
|
include NxtRegistry
|
4
4
|
|
5
|
-
def initialize(name, state_machine
|
5
|
+
def initialize(name, state_machine, **options, &block)
|
6
6
|
@state_machine = state_machine
|
7
7
|
@name = name
|
8
8
|
@event_transitions = registry("#{name} event transitions")
|
9
|
+
@names = Event::Names.build(name)
|
9
10
|
|
10
11
|
configure(&block)
|
11
12
|
|
12
13
|
ensure_event_has_transitions
|
13
14
|
end
|
14
15
|
|
15
|
-
attr_reader :name, :state_machine, :event_transitions
|
16
|
+
attr_reader :name, :state_machine, :event_transitions, :names
|
16
17
|
|
17
18
|
delegate :before_transition,
|
18
19
|
:after_transition,
|
@@ -34,6 +35,10 @@ module NxtStateMachine
|
|
34
35
|
|
35
36
|
alias_method :transition, :transitions
|
36
37
|
|
38
|
+
def transitions_from?(state)
|
39
|
+
event_transitions.resolve!(state).present?
|
40
|
+
end
|
41
|
+
|
37
42
|
private
|
38
43
|
|
39
44
|
def configure(&block)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module NxtStateMachine
|
2
2
|
class State
|
3
|
+
include Comparable
|
4
|
+
|
3
5
|
def initialize(enum, state_machine, **opts)
|
4
6
|
@enum = enum
|
5
7
|
@state_machine = state_machine
|
@@ -35,6 +37,14 @@ module NxtStateMachine
|
|
35
37
|
sorted_states.first.index == index
|
36
38
|
end
|
37
39
|
|
40
|
+
def events
|
41
|
+
state_machine.events_for_state(enum)
|
42
|
+
end
|
43
|
+
|
44
|
+
def <=>(other)
|
45
|
+
index <=> other.index
|
46
|
+
end
|
47
|
+
|
38
48
|
private
|
39
49
|
|
40
50
|
def sorted_states
|
@@ -66,6 +66,10 @@ module NxtStateMachine
|
|
66
66
|
transitions.select { |transition| transition.transitions_from_to?(from, to) }
|
67
67
|
end
|
68
68
|
|
69
|
+
def events_for_state(state)
|
70
|
+
events.values.select { |event| event.transitions_from?(state) }
|
71
|
+
end
|
72
|
+
|
69
73
|
def any_state
|
70
74
|
states.values.map(&:enum)
|
71
75
|
end
|
@@ -76,21 +80,17 @@ module NxtStateMachine
|
|
76
80
|
all_states - excluded
|
77
81
|
end
|
78
82
|
|
79
|
-
def event(name, &block)
|
83
|
+
def event(name, **options, &block)
|
80
84
|
name = name.to_sym
|
81
|
-
event = Event.new(name,
|
85
|
+
event = Event.new(name, self, **options, &block)
|
82
86
|
events.register(name, event)
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
class_context.define_method "#{name}!" do |*args, **opts|
|
91
|
-
event.state_machine.can_transition!(name, event.state_machine.current_state_name(self))
|
92
|
-
transition = event.event_transitions.resolve(event.state_machine.current_state_name(self))
|
93
|
-
transition.build_transition("#{name}!".to_sym, self, :set_state_with!, *args, **opts)
|
88
|
+
Event::Names.set_state_method_map(name).each do |event_name, set_state_method|
|
89
|
+
class_context.define_method event_name do |*args, **opts|
|
90
|
+
event.state_machine.can_transition!(name, event.state_machine.current_state_name(self))
|
91
|
+
transition = event.event_transitions.resolve(event.state_machine.current_state_name(self))
|
92
|
+
transition.build_transition(event_name, self, set_state_method, *args, **opts)
|
93
|
+
end
|
94
94
|
end
|
95
95
|
|
96
96
|
class_context.define_method "can_#{name}?" do
|
data/lib/nxt_state_machine.rb
CHANGED
@@ -19,6 +19,7 @@ require "nxt_state_machine/error_callback_registry"
|
|
19
19
|
require "nxt_state_machine/event_registry"
|
20
20
|
require "nxt_state_machine/state"
|
21
21
|
require "nxt_state_machine/event"
|
22
|
+
require "nxt_state_machine/event/names"
|
22
23
|
require "nxt_state_machine/transition/interface"
|
23
24
|
require "nxt_state_machine/transition"
|
24
25
|
require "nxt_state_machine/transition/factory"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nxt_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Robecke
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2020-01-
|
14
|
+
date: 2020-01-26 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- lib/nxt_state_machine/errors/transition_not_defined.rb
|
164
164
|
- lib/nxt_state_machine/errors/unknown_state_error.rb
|
165
165
|
- lib/nxt_state_machine/event.rb
|
166
|
+
- lib/nxt_state_machine/event/names.rb
|
166
167
|
- lib/nxt_state_machine/event_registry.rb
|
167
168
|
- lib/nxt_state_machine/integrations/active_record.rb
|
168
169
|
- lib/nxt_state_machine/integrations/attr_accessor.rb
|