state_machine 0.5.2 → 0.6.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.
- data/CHANGELOG.rdoc +9 -0
- data/README.rdoc +34 -26
- data/Rakefile +1 -1
- data/examples/auto_shop.rb +2 -2
- data/examples/car.rb +4 -4
- data/examples/traffic_light.rb +1 -3
- data/examples/vehicle.rb +7 -11
- data/lib/state_machine.rb +5 -5
- data/lib/state_machine/callback.rb +1 -1
- data/lib/state_machine/condition_proxy.rb +94 -0
- data/lib/state_machine/event.rb +92 -23
- data/lib/state_machine/guard.rb +90 -57
- data/lib/state_machine/integrations/active_record.rb +3 -3
- data/lib/state_machine/integrations/data_mapper.rb +3 -3
- data/lib/state_machine/integrations/data_mapper/observer.rb +8 -6
- data/lib/state_machine/integrations/sequel.rb +3 -3
- data/lib/state_machine/machine.rb +136 -130
- data/lib/state_machine/matcher_helpers.rb +53 -0
- data/lib/state_machine/state.rb +3 -3
- data/test/active_record.log +23221 -0
- data/test/classes/switch.rb +2 -2
- data/test/functional/state_machine_test.rb +25 -29
- data/test/sequel.log +10610 -0
- data/test/unit/callback_test.rb +36 -6
- data/test/unit/condition_proxy_test.rb +301 -0
- data/test/unit/event_test.rb +31 -17
- data/test/unit/guard_test.rb +246 -13
- data/test/unit/integrations/active_record_test.rb +29 -0
- data/test/unit/integrations/data_mapper_test.rb +45 -0
- data/test/unit/integrations/sequel_test.rb +29 -0
- data/test/unit/machine_test.rb +25 -3
- data/test/unit/matcher_helpers_test.rb +37 -0
- data/test/unit/node_collection_test.rb +0 -4
- data/test/unit/state_collection_test.rb +0 -4
- metadata +8 -2
@@ -307,6 +307,35 @@ begin
|
|
307
307
|
assert_equal [1, 2, 3], @record.callback_result
|
308
308
|
end
|
309
309
|
end
|
310
|
+
|
311
|
+
class MachineWithStateDrivenValidationsTest < BaseTestCase
|
312
|
+
def setup
|
313
|
+
@model = new_model do
|
314
|
+
attr_accessor :seatbelt
|
315
|
+
end
|
316
|
+
|
317
|
+
@machine = StateMachine::Machine.new(@model)
|
318
|
+
@machine.state :first_gear do
|
319
|
+
validates_presence_of :seatbelt
|
320
|
+
end
|
321
|
+
@machine.other_states :parked
|
322
|
+
end
|
323
|
+
|
324
|
+
def test_should_be_valid_if_validation_fails_outside_state_scope
|
325
|
+
record = @model.new(:state => 'parked', :seatbelt => nil)
|
326
|
+
assert record.valid?
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_should_be_invalid_if_validation_fails_within_state_scope
|
330
|
+
record = @model.new(:state => 'first_gear', :seatbelt => nil)
|
331
|
+
assert !record.valid?
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_should_be_valid_if_validation_succeeds_within_state_scope
|
335
|
+
record = @model.new(:state => 'first_gear', :seatbelt => true)
|
336
|
+
assert record.valid?
|
337
|
+
end
|
338
|
+
end
|
310
339
|
end
|
311
340
|
rescue LoadError
|
312
341
|
$stderr.puts 'Skipping Sequel tests. `gem install sequel` and try again.'
|
data/test/unit/machine_test.rb
CHANGED
@@ -373,6 +373,16 @@ class MachineTest < Test::Unit::TestCase
|
|
373
373
|
|
374
374
|
assert called
|
375
375
|
end
|
376
|
+
|
377
|
+
def test_should_provide_matcher_helpers_during_initialization
|
378
|
+
matchers = []
|
379
|
+
|
380
|
+
StateMachine::Machine.new(Class.new) do
|
381
|
+
matchers = [all, any, same]
|
382
|
+
end
|
383
|
+
|
384
|
+
assert_equal [StateMachine::AllMatcher.instance, StateMachine::AllMatcher.instance, StateMachine::LoopbackMatcher.instance], matchers
|
385
|
+
end
|
376
386
|
end
|
377
387
|
|
378
388
|
class MachineAfterBeingCopiedTest < Test::Unit::TestCase
|
@@ -927,6 +937,11 @@ class MachineWithEventsTest < Test::Unit::TestCase
|
|
927
937
|
assert responded
|
928
938
|
end
|
929
939
|
|
940
|
+
def test_should_be_aliased_as_on
|
941
|
+
event = @machine.on(:ignite) {}
|
942
|
+
assert_equal :ignite, event.name
|
943
|
+
end
|
944
|
+
|
930
945
|
def test_should_have_events
|
931
946
|
event = @machine.event(:ignite)
|
932
947
|
assert_equal [event], @machine.events.to_a
|
@@ -1029,9 +1044,8 @@ class MachineWithTransitionCallbacksTest < Test::Unit::TestCase
|
|
1029
1044
|
@object.callbacks = []
|
1030
1045
|
end
|
1031
1046
|
|
1032
|
-
def
|
1033
|
-
|
1034
|
-
assert_equal 'Invalid key(s): invalid', exception.message
|
1047
|
+
def test_should_not_raise_exception_if_implicit_option_specified
|
1048
|
+
assert_nothing_raised {@machine.before_transition :invalid => true, :do => lambda {}}
|
1035
1049
|
end
|
1036
1050
|
|
1037
1051
|
def test_should_raise_exception_if_do_option_not_specified
|
@@ -1095,6 +1109,14 @@ class MachineWithTransitionCallbacksTest < Test::Unit::TestCase
|
|
1095
1109
|
assert_equal [:park], @object.callbacks
|
1096
1110
|
end
|
1097
1111
|
|
1112
|
+
def test_should_support_implicit_requirement
|
1113
|
+
@machine.before_transition :parked => :idling, :do => lambda {|object| object.callbacks << :parked}
|
1114
|
+
@machine.before_transition :idling => :parked, :do => lambda {|object| object.callbacks << :idling}
|
1115
|
+
|
1116
|
+
@event.fire(@object)
|
1117
|
+
assert_equal [:parked], @object.callbacks
|
1118
|
+
end
|
1119
|
+
|
1098
1120
|
def test_should_track_states_defined_in_transition_callbacks
|
1099
1121
|
@machine.before_transition :from => :parked, :to => :idling, :do => lambda {}
|
1100
1122
|
@machine.after_transition :from => :first_gear, :to => :second_gear, :do => lambda {}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class MatcherHelpersAllTest < Test::Unit::TestCase
|
4
|
+
include StateMachine::MatcherHelpers
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@matcher = all
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_build_an_all_matcher
|
11
|
+
assert_equal StateMachine::AllMatcher.instance, @matcher
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class MatcherHelpersAnyTest < Test::Unit::TestCase
|
16
|
+
include StateMachine::MatcherHelpers
|
17
|
+
|
18
|
+
def setup
|
19
|
+
@matcher = any
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_build_an_all_matcher
|
23
|
+
assert_equal StateMachine::AllMatcher.instance, @matcher
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class MatcherHelpersSameTest < Test::Unit::TestCase
|
28
|
+
include StateMachine::MatcherHelpers
|
29
|
+
|
30
|
+
def setup
|
31
|
+
@matcher = same
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_build_a_loopback_matcher
|
35
|
+
assert_equal StateMachine::LoopbackMatcher.instance, @matcher
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Pfeifer
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-03 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/state_machine/integrations/active_record.rb
|
45
45
|
- lib/state_machine/integrations/data_mapper.rb
|
46
46
|
- lib/state_machine/eval_helpers.rb
|
47
|
+
- lib/state_machine/matcher_helpers.rb
|
47
48
|
- lib/state_machine/transition.rb
|
48
49
|
- lib/state_machine/callback.rb
|
49
50
|
- lib/state_machine/extensions.rb
|
@@ -51,6 +52,7 @@ files:
|
|
51
52
|
- lib/state_machine/state_collection.rb
|
52
53
|
- lib/state_machine/assertions.rb
|
53
54
|
- lib/state_machine/matcher.rb
|
55
|
+
- lib/state_machine/condition_proxy.rb
|
54
56
|
- lib/state_machine/machine.rb
|
55
57
|
- lib/state_machine.rb
|
56
58
|
- test/sequel.log
|
@@ -61,6 +63,7 @@ files:
|
|
61
63
|
- test/classes
|
62
64
|
- test/classes/switch.rb
|
63
65
|
- test/unit
|
66
|
+
- test/unit/matcher_helpers_test.rb
|
64
67
|
- test/unit/node_collection_test.rb
|
65
68
|
- test/unit/matcher_test.rb
|
66
69
|
- test/unit/integrations
|
@@ -77,6 +80,7 @@ files:
|
|
77
80
|
- test/unit/state_test.rb
|
78
81
|
- test/unit/guard_test.rb
|
79
82
|
- test/unit/assertions_test.rb
|
83
|
+
- test/unit/condition_proxy_test.rb
|
80
84
|
- test/unit/machine_test.rb
|
81
85
|
- test/unit/integrations_test.rb
|
82
86
|
- CHANGELOG.rdoc
|
@@ -112,6 +116,7 @@ specification_version: 2
|
|
112
116
|
summary: Adds support for creating state machines for attributes on any Ruby class
|
113
117
|
test_files:
|
114
118
|
- test/functional/state_machine_test.rb
|
119
|
+
- test/unit/matcher_helpers_test.rb
|
115
120
|
- test/unit/node_collection_test.rb
|
116
121
|
- test/unit/matcher_test.rb
|
117
122
|
- test/unit/integrations/data_mapper_test.rb
|
@@ -127,5 +132,6 @@ test_files:
|
|
127
132
|
- test/unit/state_test.rb
|
128
133
|
- test/unit/guard_test.rb
|
129
134
|
- test/unit/assertions_test.rb
|
135
|
+
- test/unit/condition_proxy_test.rb
|
130
136
|
- test/unit/machine_test.rb
|
131
137
|
- test/unit/integrations_test.rb
|