hifsm 0.4.3 → 0.4.5

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