hifsm 0.4.3 → 0.4.5

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
  SHA1:
3
- metadata.gz: 2036f5f0392c1b5556c67030d1f3f4124355b725
4
- data.tar.gz: ee74be4931ceb43693bb6e32dae2cb320e6ff848
3
+ metadata.gz: 58e6687ae4f9842846c1053888058f2a900472a2
4
+ data.tar.gz: b8bd4da00022fca41f541224b09a717189395d58
5
5
  SHA512:
6
- metadata.gz: f48f8b7c4967ad34beb03b74057dc0c876df9a855b3c23194ea6a2a3fd74945884f5ef7f265d42a2c874dcd0b39c270b47d80125e63a0ad801d49c329306f3c7
7
- data.tar.gz: 6b49eac8561505a6a7a10d20024abe58c94c677b936e8f5ccf8fdff82f7c2581ca51c4dc49a5a0651e24e1a7485c36ee50781bd290de96dfe34f5d0008ac8249
6
+ metadata.gz: 01b20d9770b5a2623ed3af913de677b28e3de8110580d20781ed601d4d42c8a70ec7178d44c6050a9889cf709fd8737b0f27a234ffaa0aa413f624b58cf03ee8
7
+ data.tar.gz: 455a85c0392c5e64038f62e8b5025a282ba9657b1b0dec9f082a7e41b1ed2c685c94429ea4ed42d4f258e544f109cac954cc508f8fd52aa6b474af43643d8c47
data/README.md CHANGED
@@ -58,6 +58,7 @@ class Monster
58
58
  state :pursuing do
59
59
  before_enter do
60
60
  self.roar!
61
+ true # since roar! returns nil it would stop processing
61
62
  end
62
63
  action do
63
64
  step_towards target
data/lib/hifsm/fsm.rb CHANGED
@@ -2,8 +2,9 @@ module Hifsm
2
2
 
3
3
  # This class holds immutable state machine definition
4
4
  class FSM
5
- attr_reader :name, :states, :transitions
5
+ attr_reader :name, :transitions
6
6
 
7
+ # public API
7
8
  def initialize(name = :state, parent = nil, &block)
8
9
  @name = name
9
10
  @parent = parent
@@ -26,6 +27,10 @@ module Hifsm
26
27
  @machine_class.new(self, target, initial_state)
27
28
  end
28
29
 
30
+ def states
31
+ @states.keys
32
+ end
33
+
29
34
  #DSL
30
35
  def event(name, options = {}, &block)
31
36
  Hifsm::DSL::EventBuilder.new(options, &block).each do |ev_def|
data/lib/hifsm/machine.rb CHANGED
@@ -22,7 +22,7 @@ module Hifsm
22
22
  end
23
23
 
24
24
  def states
25
- @fsm.states.keys
25
+ @fsm.states
26
26
  end
27
27
 
28
28
  def all_states
data/lib/hifsm/state.rb CHANGED
@@ -55,9 +55,9 @@ module Hifsm
55
55
  if ev.guard?(target, *args)
56
56
  from_state = self
57
57
  to_state = ev.to
58
- if ev.trigger(target, :before, *args) &&
59
- to_state.trigger(target, :before_enter, *args) &&
60
- from_state.trigger(target, :before_exit, *args)
58
+ if ev.trigger(target, :before, *args).all? &&
59
+ to_state.trigger(target, :before_enter, *args).all? &&
60
+ from_state.trigger(target, :before_exit, *args).all?
61
61
  new_state_callback.call(to_state.enter!)
62
62
  from_state.trigger(target, :after_exit, *args)
63
63
  to_state.trigger(target, :after_enter, *args)
data/lib/hifsm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hifsm
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.5"
3
3
  end
data/test/monster.rb CHANGED
@@ -15,6 +15,7 @@ class Monster
15
15
  state :pursuing do
16
16
  before_enter do
17
17
  self.roar!
18
+ true # since roar! returns nil it would stop processing
18
19
  end
19
20
  action do
20
21
  step_towards target
@@ -0,0 +1,36 @@
1
+ require 'setup_tests'
2
+
3
+ class TestBeforeReturningFalse < Minitest::Test
4
+ class Door
5
+ include Hifsm
6
+
7
+ hifsm do
8
+ state :open
9
+ state :closed, :initial => true do
10
+ state :unlocked, :initial => true
11
+ state :locked
12
+
13
+ event :lock, :from => :unlocked, :to => :locked
14
+ end
15
+
16
+ event :open, :from => :closed, :to => :open do
17
+ before do
18
+ state != 'closed.locked'
19
+ end
20
+ end
21
+ event :close, :from => :open, :to => :closed
22
+ end
23
+ end
24
+
25
+ def setup
26
+ @door = Door.new
27
+ end
28
+
29
+ def test_opening_locked_door_does_nothing
30
+ @door.lock
31
+ @door.open
32
+ assert_equal 'closed.locked', @door.state
33
+ # assert nothing raised
34
+ end
35
+
36
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hifsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Meremyanin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-06 00:00:00.000000000 Z
11
+ date: 2014-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,6 +125,7 @@ files:
125
125
  - test/test_activerecord_adapter.rb
126
126
  - test/test_any_state_event.rb
127
127
  - test/test_basic_fsm.rb
128
+ - test/test_before_returning_false.rb
128
129
  - test/test_dynamic_initial_state.rb
129
130
  - test/test_event_guard.rb
130
131
  - test/test_groupped_transitions.rb
@@ -164,6 +165,7 @@ test_files:
164
165
  - test/test_activerecord_adapter.rb
165
166
  - test/test_any_state_event.rb
166
167
  - test/test_basic_fsm.rb
168
+ - test/test_before_returning_false.rb
167
169
  - test/test_dynamic_initial_state.rb
168
170
  - test/test_event_guard.rb
169
171
  - test/test_groupped_transitions.rb