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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48ef8c1448e9b199d064eb4d4040e7187ca141cc1e41d7a4abef5914c71cae59
4
- data.tar.gz: 500f0d1098da66be2c4da535061f3198177f5d6f3d314716a7154a423e6c7745
3
+ metadata.gz: e9bf5b5563e13832c4dde4f772eca02272eec81d24cbc7f65b5d04d65b2a7c72
4
+ data.tar.gz: 5cf98caf5c0deceb3b49cfb9290523f0feb5fac9959d8be9775734b1b3b05cb1
5
5
  SHA512:
6
- metadata.gz: 134d73c9bfd5f12c9379a78d30ba601c8062ee530a469e4c7febda231202d1a0e4ff7ca4db9b84843ea7ff19eebadcd3f537b439738f7fc847b26884906dfbc3
7
- data.tar.gz: 885c3d0c4898bb897cb16dcbd9bc19a7897c80fc58535dc539358ce9621f58bc1e5a183d9258715358680e2e7d77785adb790f08f3b84c2aa6bf46457ede6c84
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.2)
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.7.0)
25
+ i18n (1.8.2)
26
26
  concurrent-ruby (~> 1.0)
27
27
  method_source (0.9.2)
28
- minitest (5.13.0)
29
- nxt_registry (0.1.3)
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)
@@ -0,0 +1,11 @@
1
+ module NxtStateMachine
2
+ class Event::Names
3
+ def self.build(name)
4
+ [name, "#{name}!"].map(&:to_sym)
5
+ end
6
+
7
+ def self.set_state_method_map(name)
8
+ build(name).zip([:set_state_with, :set_state_with!])
9
+ end
10
+ end
11
+ end
@@ -2,17 +2,18 @@ module NxtStateMachine
2
2
  class Event
3
3
  include NxtRegistry
4
4
 
5
- def initialize(name, state_machine:, &block)
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, state_machine: self, &block)
85
+ event = Event.new(name, self, **options, &block)
82
86
  events.register(name, event)
83
87
 
84
- class_context.define_method name do |*args, **opts|
85
- event.state_machine.can_transition!(name, event.state_machine.current_state_name(self))
86
- transition = event.event_transitions.resolve(event.state_machine.current_state_name(self))
87
- transition.build_transition(name, self, :set_state_with, *args, **opts)
88
- end
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
@@ -1,3 +1,3 @@
1
1
  module NxtStateMachine
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -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.2
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-08 00:00:00.000000000 Z
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