nxt_state_machine 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|