finite_machine 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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