baby_bots 0.0.5 → 0.0.6

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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -24,7 +24,8 @@ module BabyBots
24
24
  # Accepts an optional hash of states.
25
25
  def initialize(states={})
26
26
  # Hash of state names to state objects
27
- @states = states
27
+ @states = {}
28
+ if !states.empty? then build states end
28
29
  # Initial state
29
30
  @start = nil
30
31
  # Current state
@@ -97,7 +98,7 @@ module BabyBots
97
98
  end
98
99
 
99
100
  # calculate the next state
100
- if cooked_event
101
+ if !cooked_event.nil?
101
102
  next_state = @states[curr.table[cooked_event]]
102
103
  else
103
104
  next_state = @states[curr.table[event]]
@@ -139,6 +140,20 @@ module BabyBots
139
140
  @curr = @start
140
141
  end
141
142
 
143
+ # Equality is based on if all the states are the same, and if
144
+ # the machines are currently in the same state.
145
+ def ==(another_baby)
146
+ if @curr != another_baby.curr
147
+ return false
148
+ end
149
+
150
+ @states.keys.each do |k|
151
+ if @states[k] != another_baby.states[k] then return false end
152
+ end
153
+
154
+ return true
155
+ end
156
+
142
157
  private
143
158
 
144
159
  # A wrapper around send, using the arity restrictions assumed by BabyBots.
@@ -21,7 +21,6 @@ module BabyBots
21
21
 
22
22
  # Adds a transition to the transition table. Table format is
23
23
  # event => transition, where event is the "input" into the state.
24
- #
25
24
  # Transitions are allowed to be deleted by being set to NOWHERE.
26
25
  def add_transition(event, transition)
27
26
  if transition == NOWHERE
@@ -44,6 +43,11 @@ module BabyBots
44
43
  def remove_transition(event)
45
44
  @table.delete(event)
46
45
  end
46
+
47
+ # Equality is based on the same transition table.
48
+ def ==(another_state)
49
+ if @table == another_state.table then return true else return false end
50
+ end
47
51
  end
48
52
 
49
53
  end
@@ -1,4 +1,4 @@
1
1
  module BabyBots
2
2
  # Current development version
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
@@ -59,7 +59,7 @@ describe BabyBots::BabyBot do
59
59
 
60
60
  it "should be able to be initialized with a state table" do
61
61
  test = BabyBots::BabyBot.new(TEST_MACHINE1)
62
- test.states.should == TEST_MACHINE1
62
+ test.states.should == {:loading => $loading, :ready => $ready, :run => $run}
63
63
  end
64
64
 
65
65
  it "should have states be able to be added using add_state" do
@@ -72,6 +72,21 @@ describe BabyBots::BabyBot do
72
72
  test.states.should == {:loading => $loading, :ready => $ready, :run => $run}
73
73
  end
74
74
 
75
+ it "should be able to have states built using the build method" do
76
+ test = BabyBots::BabyBot.new
77
+ test.build(TEST_MACHINE1)
78
+ end
79
+
80
+ it "should allow states to be overwritten using build" do
81
+ test = BabyBots::BabyBot.new(TEST_MACHINE1)
82
+ test.build({ :loading => {1 => :run, 2 => :loading} })
83
+
84
+ test2 = BabyBots::BabyBot.new({ :loading => {1 => :run, 2 => :loading},
85
+ :ready => {1 => :run, :else => :loading},
86
+ :run => {:else => :run} })
87
+ test.states.should == test2.states
88
+ end
89
+
75
90
  it "should run the example, with the starting state being loading" do
76
91
  test = BB.new
77
92
  test.start.state.should == :loading
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: baby_bots
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-02 00:00:00.000000000Z
12
+ date: 2012-05-07 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: A tiny finite-state automata library.
15
15
  email: justinanthonyhamilton@gmail.com
@@ -17,6 +17,7 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - .gitignore
20
21
  - Gemfile
21
22
  - LICENSE
22
23
  - README.md