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