finite_machine 0.0.1 → 0.1.0

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.
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe FiniteMachine, 'initialize' do
6
+
7
+ it "defaults initial state to :none" do
8
+ fsm = FiniteMachine.define do
9
+ events {
10
+ event :slow, :green => :yellow
11
+ event :stop, :yellow => :red
12
+ }
13
+ end
14
+
15
+ expect(fsm.current).to eql(:none)
16
+ end
17
+
18
+ it "allows to specify inital state" do
19
+ fsm = FiniteMachine.define do
20
+ initial :green
21
+
22
+ events {
23
+ event :slow, :green => :yellow
24
+ event :stop, :yellow => :red
25
+ }
26
+ end
27
+
28
+ expect(fsm.current).to eql(:green)
29
+ end
30
+
31
+ it "allows to specify deferred inital state" do
32
+ fsm = FiniteMachine.define do
33
+ initial state: :green, defer: true
34
+
35
+ events {
36
+ event :slow, :green => :yellow
37
+ event :stop, :yellow => :red
38
+ }
39
+ end
40
+
41
+ fsm.init
42
+ expect(fsm.current).to eql(:green)
43
+ end
44
+
45
+ it "allows to specify inital start event" do
46
+ fsm = FiniteMachine.define do
47
+ initial state: :green, event: :start
48
+
49
+ events {
50
+ event :slow, :green => :yellow
51
+ event :stop, :yellow => :red
52
+ }
53
+ end
54
+
55
+ expect(fsm.current).to eql(:none)
56
+ fsm.start
57
+ expect(fsm.current).to eql(:green)
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe FiniteMachine, 'is?' do
6
+
7
+ it "allows to check if state is reachable" do
8
+ fsm = FiniteMachine.define do
9
+ initial :green
10
+
11
+ events {
12
+ event :slow, :green => :yellow
13
+ event :stop, :yellow => :red
14
+ event :ready, :red => :yellow
15
+ event :go, :yellow => :green
16
+ }
17
+ end
18
+
19
+ expect(fsm.current).to eql(:green)
20
+
21
+ expect(fsm.is?(:green)).to be_true
22
+ expect(fsm.is?(:yellow)).to be_false
23
+ expect(fsm.is?([:green, :red])).to be_true
24
+ expect(fsm.is?([:yellow, :red])).to be_false
25
+
26
+ fsm.slow
27
+
28
+ expect(fsm.is?(:green)).to be_false
29
+ expect(fsm.is?(:yellow)).to be_true
30
+ expect(fsm.is?([:green, :red])).to be_false
31
+ expect(fsm.is?([:yellow, :red])).to be_true
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe FiniteMachine, 'states' do
6
+
7
+ it "retrieves all available states" do
8
+ fsm = FiniteMachine.define do
9
+ initial :green
10
+
11
+ events {
12
+ event :slow, :green => :yellow
13
+ event :stop, :yellow => :red
14
+ event :ready, :red => :yellow
15
+ event :go, :yellow => :green
16
+ }
17
+ end
18
+
19
+ expect(fsm.states).to eql([:none, :green, :yellow, :red])
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe FiniteMachine::Transition, 'parse_states' do
6
+
7
+ let(:object) { described_class.new(attrs) }
8
+
9
+ subject(:transition) { object.parse_states(attrs) }
10
+
11
+ context 'with :from, :to keys' do
12
+ let(:attrs) { {from: [:green, :yellow], to: :red} }
13
+
14
+ it "groups states" do
15
+ expect(transition).to eql([[:green, :yellow], :red])
16
+ end
17
+ end
18
+
19
+ context 'when from array' do
20
+ let(:attrs) { {[:green, :yellow] => :red} }
21
+
22
+ it "groups states" do
23
+ expect(transition).to eql([[:green, :yellow], :red])
24
+ end
25
+ end
26
+
27
+ context 'when hash of states' do
28
+ let(:attrs) { { :green => :red, :yellow => :red} }
29
+
30
+ it "groups states" do
31
+ expect(transition).to eql([[:green, :yellow], :red])
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finite_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Murach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-10 00:00:00.000000000 Z
11
+ date: 2014-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -60,13 +60,34 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - .gitignore
63
+ - .rspec
64
+ - .travis.yml
63
65
  - Gemfile
64
66
  - LICENSE.txt
65
67
  - README.md
66
68
  - Rakefile
67
69
  - finite_machine.gemspec
68
70
  - lib/finite_machine.rb
71
+ - lib/finite_machine/callable.rb
72
+ - lib/finite_machine/dsl.rb
73
+ - lib/finite_machine/event.rb
74
+ - lib/finite_machine/observer.rb
75
+ - lib/finite_machine/state_machine.rb
76
+ - lib/finite_machine/subscribers.rb
77
+ - lib/finite_machine/threadable.rb
78
+ - lib/finite_machine/transition.rb
69
79
  - lib/finite_machine/version.rb
80
+ - spec/spec_helper.rb
81
+ - spec/unit/callbacks_spec.rb
82
+ - spec/unit/can_spec.rb
83
+ - spec/unit/define_spec.rb
84
+ - spec/unit/events_spec.rb
85
+ - spec/unit/finished_spec.rb
86
+ - spec/unit/if_unless_spec.rb
87
+ - spec/unit/initialize_spec.rb
88
+ - spec/unit/is_spec.rb
89
+ - spec/unit/states_spec.rb
90
+ - spec/unit/transition/parse_states_spec.rb
70
91
  homepage: ''
71
92
  licenses:
72
93
  - MIT
@@ -91,4 +112,15 @@ rubygems_version: 2.0.3
91
112
  signing_key:
92
113
  specification_version: 4
93
114
  summary: A minimal finite state machine with a straightforward syntax.
94
- test_files: []
115
+ test_files:
116
+ - spec/spec_helper.rb
117
+ - spec/unit/callbacks_spec.rb
118
+ - spec/unit/can_spec.rb
119
+ - spec/unit/define_spec.rb
120
+ - spec/unit/events_spec.rb
121
+ - spec/unit/finished_spec.rb
122
+ - spec/unit/if_unless_spec.rb
123
+ - spec/unit/initialize_spec.rb
124
+ - spec/unit/is_spec.rb
125
+ - spec/unit/states_spec.rb
126
+ - spec/unit/transition/parse_states_spec.rb