state_machine 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -11
- data/.travis.yml +49 -7
- data/Appraisals +255 -87
- data/CHANGELOG.md +30 -0
- data/README.md +142 -21
- data/Rakefile +1 -11
- data/examples/Gemfile +5 -0
- data/examples/Gemfile.lock +14 -0
- data/examples/auto_shop.rb +2 -0
- data/examples/car.rb +2 -0
- data/examples/doc/AutoShop.html +2856 -0
- data/examples/doc/AutoShop_state.png +0 -0
- data/examples/doc/Car.html +919 -0
- data/examples/doc/Car_state.png +0 -0
- data/examples/doc/TrafficLight.html +2230 -0
- data/examples/doc/TrafficLight_state.png +0 -0
- data/examples/doc/Vehicle.html +7921 -0
- data/examples/doc/Vehicle_state.png +0 -0
- data/examples/doc/_index.html +136 -0
- data/examples/doc/class_list.html +47 -0
- data/examples/doc/css/common.css +1 -0
- data/examples/doc/css/full_list.css +55 -0
- data/examples/doc/css/style.css +322 -0
- data/examples/doc/file_list.html +46 -0
- data/examples/doc/frames.html +13 -0
- data/examples/doc/index.html +136 -0
- data/examples/doc/js/app.js +205 -0
- data/examples/doc/js/full_list.js +173 -0
- data/examples/doc/js/jquery.js +16 -0
- data/examples/doc/method_list.html +734 -0
- data/examples/doc/top-level-namespace.html +105 -0
- data/examples/rails-rest/migration.rb +1 -5
- data/examples/rails-rest/view__form.html.erb +34 -0
- data/examples/rails-rest/view_edit.html.erb +2 -21
- data/examples/rails-rest/view_index.html.erb +6 -4
- data/examples/rails-rest/view_new.html.erb +2 -11
- data/examples/rails-rest/view_show.html.erb +5 -3
- data/examples/traffic_light.rb +2 -0
- data/examples/vehicle.rb +2 -0
- data/gemfiles/active_model-3.0.0.gemfile.lock +9 -6
- data/gemfiles/active_model-3.0.5.gemfile.lock +10 -7
- data/gemfiles/active_model-3.1.1.gemfile.lock +12 -10
- data/gemfiles/{active_model-3.2.0.gemfile → active_model-3.2.1.gemfile} +1 -1
- data/gemfiles/{graphviz-0.9.0.gemfile → active_model-3.2.12.gemfile} +1 -1
- data/gemfiles/active_model-3.2.12.gemfile.lock +36 -0
- data/gemfiles/{active_record-3.2.0.gemfile → active_model-3.2.13.rc1.gemfile} +1 -2
- data/gemfiles/active_model-3.2.13.rc1.gemfile.lock +36 -0
- data/gemfiles/active_model-4.0.0.gemfile +9 -0
- data/gemfiles/active_model-4.0.0.gemfile.lock +78 -0
- data/gemfiles/active_record-2.0.0.gemfile +2 -1
- data/gemfiles/active_record-2.0.0.gemfile.lock +15 -6
- data/gemfiles/active_record-2.0.5.gemfile +2 -1
- data/gemfiles/active_record-2.0.5.gemfile.lock +15 -6
- data/gemfiles/active_record-2.1.0.gemfile +2 -1
- data/gemfiles/active_record-2.1.0.gemfile.lock +15 -6
- data/gemfiles/active_record-2.1.2.gemfile +2 -1
- data/gemfiles/active_record-2.1.2.gemfile.lock +15 -6
- data/gemfiles/active_record-2.2.3.gemfile +2 -1
- data/gemfiles/active_record-2.2.3.gemfile.lock +15 -6
- data/gemfiles/active_record-2.3.12.gemfile +2 -1
- data/gemfiles/active_record-2.3.12.gemfile.lock +15 -6
- data/gemfiles/active_record-2.3.5.gemfile +9 -0
- data/gemfiles/active_record-2.3.5.gemfile.lock +39 -0
- data/gemfiles/active_record-3.0.0.gemfile +2 -1
- data/gemfiles/active_record-3.0.0.gemfile.lock +18 -11
- data/gemfiles/active_record-3.0.5.gemfile +2 -1
- data/gemfiles/active_record-3.0.5.gemfile.lock +19 -12
- data/gemfiles/active_record-3.1.1.gemfile +2 -1
- data/gemfiles/active_record-3.1.1.gemfile.lock +22 -16
- data/gemfiles/active_record-3.2.12.gemfile +9 -0
- data/gemfiles/active_record-3.2.12.gemfile.lock +51 -0
- data/gemfiles/active_record-3.2.13.rc1.gemfile +9 -0
- data/gemfiles/active_record-3.2.13.rc1.gemfile.lock +51 -0
- data/gemfiles/active_record-4.0.0.gemfile +11 -0
- data/gemfiles/active_record-4.0.0.gemfile.lock +83 -0
- data/gemfiles/data_mapper-0.10.2.gemfile +1 -0
- data/gemfiles/data_mapper-0.10.2.gemfile.lock +13 -9
- data/gemfiles/data_mapper-0.9.11.gemfile +1 -0
- data/gemfiles/data_mapper-0.9.11.gemfile.lock +31 -7
- data/gemfiles/data_mapper-0.9.4.gemfile.lock +25 -14
- data/gemfiles/data_mapper-0.9.7.gemfile +1 -0
- data/gemfiles/data_mapper-0.9.7.gemfile.lock +27 -15
- data/gemfiles/data_mapper-1.0.0.gemfile.lock +20 -17
- data/gemfiles/data_mapper-1.0.1.gemfile.lock +20 -17
- data/gemfiles/data_mapper-1.0.2.gemfile.lock +20 -17
- data/gemfiles/data_mapper-1.1.0.gemfile.lock +19 -16
- data/gemfiles/data_mapper-1.2.0.gemfile.lock +19 -16
- data/gemfiles/default.gemfile.lock +8 -5
- data/gemfiles/graphviz-0.9.17.gemfile +7 -0
- data/gemfiles/graphviz-0.9.17.gemfile.lock +29 -0
- data/gemfiles/graphviz-0.9.21.gemfile.lock +7 -4
- data/gemfiles/graphviz-1.0.0.gemfile.lock +7 -4
- data/gemfiles/graphviz-1.0.3.gemfile +7 -0
- data/gemfiles/graphviz-1.0.3.gemfile.lock +29 -0
- data/gemfiles/graphviz-1.0.8.gemfile +7 -0
- data/gemfiles/graphviz-1.0.8.gemfile.lock +29 -0
- data/gemfiles/mongo_mapper-0.10.0.gemfile +1 -0
- data/gemfiles/mongo_mapper-0.10.0.gemfile.lock +14 -11
- data/gemfiles/mongo_mapper-0.11.1.gemfile +7 -0
- data/gemfiles/mongo_mapper-0.11.1.gemfile.lock +44 -0
- data/gemfiles/mongo_mapper-0.11.2.gemfile +9 -0
- data/gemfiles/mongo_mapper-0.11.2.gemfile.lock +48 -0
- data/gemfiles/mongo_mapper-0.12.0.gemfile +9 -0
- data/gemfiles/mongo_mapper-0.12.0.gemfile.lock +48 -0
- data/gemfiles/mongo_mapper-0.5.5.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.5.8.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.6.0.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.6.10.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.7.0.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.7.5.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.8.0.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.8.3.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.8.4.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.8.6.gemfile.lock +7 -4
- data/gemfiles/mongo_mapper-0.9.0.gemfile.lock +7 -4
- data/gemfiles/mongoid-2.0.0.gemfile +2 -0
- data/gemfiles/mongoid-2.0.0.gemfile.lock +22 -18
- data/gemfiles/mongoid-2.1.4.gemfile +2 -0
- data/gemfiles/mongoid-2.1.4.gemfile.lock +21 -17
- data/gemfiles/mongoid-2.2.4.gemfile +2 -0
- data/gemfiles/mongoid-2.2.4.gemfile.lock +21 -17
- data/gemfiles/mongoid-2.3.3.gemfile +2 -0
- data/gemfiles/mongoid-2.3.3.gemfile.lock +21 -17
- data/gemfiles/mongoid-2.4.0.gemfile +9 -0
- data/gemfiles/mongoid-2.4.0.gemfile.lock +47 -0
- data/gemfiles/mongoid-2.4.10.gemfile +9 -0
- data/gemfiles/mongoid-2.4.10.gemfile.lock +47 -0
- data/gemfiles/mongoid-2.5.2.gemfile +9 -0
- data/gemfiles/mongoid-2.5.2.gemfile.lock +47 -0
- data/gemfiles/mongoid-2.6.0.gemfile +9 -0
- data/gemfiles/mongoid-2.6.0.gemfile.lock +47 -0
- data/gemfiles/mongoid-3.0.0.gemfile +8 -0
- data/gemfiles/mongoid-3.0.0.gemfile.lock +45 -0
- data/gemfiles/mongoid-3.0.22.gemfile +8 -0
- data/gemfiles/mongoid-3.0.22.gemfile.lock +45 -0
- data/gemfiles/mongoid-3.1.0.gemfile +8 -0
- data/gemfiles/mongoid-3.1.0.gemfile.lock +45 -0
- data/gemfiles/sequel-2.11.0.gemfile +2 -1
- data/gemfiles/sequel-2.11.0.gemfile.lock +11 -6
- data/gemfiles/sequel-2.12.0.gemfile +2 -1
- data/gemfiles/sequel-2.12.0.gemfile.lock +11 -6
- data/gemfiles/sequel-2.8.0.gemfile +2 -1
- data/gemfiles/sequel-2.8.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.0.0.gemfile +2 -1
- data/gemfiles/sequel-3.0.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.10.0.gemfile +9 -0
- data/gemfiles/sequel-3.10.0.gemfile.lock +33 -0
- data/gemfiles/sequel-3.13.0.gemfile +2 -1
- data/gemfiles/sequel-3.13.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.14.0.gemfile +2 -1
- data/gemfiles/sequel-3.14.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.23.0.gemfile +2 -1
- data/gemfiles/sequel-3.23.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.24.0.gemfile +2 -1
- data/gemfiles/sequel-3.24.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.29.0.gemfile +2 -1
- data/gemfiles/sequel-3.29.0.gemfile.lock +11 -6
- data/gemfiles/sequel-3.34.0.gemfile +9 -0
- data/gemfiles/sequel-3.34.0.gemfile.lock +33 -0
- data/gemfiles/sequel-3.35.0.gemfile +9 -0
- data/gemfiles/sequel-3.35.0.gemfile.lock +33 -0
- data/gemfiles/sequel-3.4.0.gemfile +9 -0
- data/gemfiles/sequel-3.4.0.gemfile.lock +33 -0
- data/gemfiles/sequel-3.44.0.gemfile +9 -0
- data/gemfiles/sequel-3.44.0.gemfile.lock +33 -0
- data/lib/state_machine.rb +6 -0
- data/lib/state_machine/branch.rb +9 -8
- data/lib/state_machine/callback.rb +2 -2
- data/lib/state_machine/core.rb +10 -0
- data/lib/state_machine/core_ext.rb +1 -0
- data/lib/state_machine/eval_helpers.rb +5 -3
- data/lib/state_machine/event.rb +17 -6
- data/lib/state_machine/graph.rb +92 -0
- data/lib/state_machine/integrations.rb +13 -1
- data/lib/state_machine/integrations/active_model.rb +14 -20
- data/lib/state_machine/integrations/active_model/observer.rb +3 -3
- data/lib/state_machine/integrations/active_model/observer_update.rb +42 -0
- data/lib/state_machine/integrations/active_record.rb +52 -25
- data/lib/state_machine/integrations/active_record/locale.rb +1 -1
- data/lib/state_machine/integrations/active_record/versions.rb +1 -17
- data/lib/state_machine/integrations/base.rb +15 -6
- data/lib/state_machine/integrations/data_mapper.rb +98 -35
- data/lib/state_machine/integrations/data_mapper/versions.rb +46 -8
- data/lib/state_machine/integrations/mongo_mapper.rb +39 -12
- data/lib/state_machine/integrations/mongo_mapper/locale.rb +1 -1
- data/lib/state_machine/integrations/mongo_mapper/versions.rb +3 -20
- data/lib/state_machine/integrations/mongoid.rb +52 -14
- data/lib/state_machine/integrations/mongoid/locale.rb +1 -1
- data/lib/state_machine/integrations/mongoid/versions.rb +52 -26
- data/lib/state_machine/integrations/sequel.rb +82 -33
- data/lib/state_machine/integrations/sequel/versions.rb +19 -44
- data/lib/state_machine/machine.rb +99 -59
- data/lib/state_machine/machine_collection.rb +1 -2
- data/lib/state_machine/macro_methods.rb +29 -0
- data/lib/state_machine/node_collection.rb +1 -1
- data/lib/state_machine/state.rb +18 -10
- data/lib/state_machine/state_context.rb +2 -2
- data/lib/state_machine/transition.rb +8 -1
- data/lib/state_machine/transition_collection.rb +2 -1
- data/lib/state_machine/version.rb +1 -1
- data/lib/state_machine/yard.rb +8 -0
- data/lib/state_machine/yard/handlers.rb +12 -0
- data/lib/state_machine/yard/handlers/base.rb +32 -0
- data/lib/state_machine/yard/handlers/event.rb +25 -0
- data/lib/state_machine/yard/handlers/machine.rb +344 -0
- data/lib/state_machine/yard/handlers/state.rb +25 -0
- data/lib/state_machine/yard/handlers/transition.rb +47 -0
- data/lib/state_machine/yard/templates.rb +3 -0
- data/lib/state_machine/yard/templates/default/class/html/setup.rb +30 -0
- data/lib/state_machine/yard/templates/default/class/html/state_machines.erb +12 -0
- data/lib/tasks/state_machine.rb +2 -1
- data/lib/yard-state_machine.rb +2 -0
- data/state_machine.gemspec +4 -3
- data/test/files/switch.rb +4 -0
- data/test/test_helper.rb +5 -0
- data/test/unit/branch_test.rb +117 -36
- data/test/unit/callback_test.rb +5 -2
- data/test/unit/eval_helpers_test.rb +49 -1
- data/test/unit/event_collection_test.rb +3 -1
- data/test/unit/event_test.rb +182 -12
- data/test/unit/graph_test.rb +98 -0
- data/test/unit/integrations/active_model_test.rb +82 -12
- data/test/unit/integrations/active_record_test.rb +393 -37
- data/test/unit/integrations/base_test.rb +7 -2
- data/test/unit/integrations/data_mapper_test.rb +326 -72
- data/test/unit/integrations/mongo_mapper_test.rb +338 -44
- data/test/unit/integrations/mongoid_test.rb +606 -98
- data/test/unit/integrations/sequel_test.rb +429 -102
- data/test/unit/integrations_test.rb +28 -6
- data/test/unit/machine_collection_test.rb +6 -2
- data/test/unit/machine_test.rb +134 -82
- data/test/unit/node_collection_test.rb +2 -2
- data/test/unit/path_test.rb +1 -1
- data/test/unit/state_test.rb +65 -21
- data/test/unit/transition_collection_test.rb +43 -23
- data/test/unit/transition_test.rb +8 -2
- metadata +303 -221
- data/gemfiles/active_model-3.2.0.gemfile.lock +0 -32
- data/gemfiles/active_record-3.2.0.gemfile.lock +0 -43
- data/gemfiles/graphviz-0.9.0.gemfile.lock +0 -26
@@ -13,6 +13,10 @@ module BaseTest
|
|
13
13
|
assert !StateMachine::Integrations::Base.available?
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_should_not_have_any_matching_ancestors
|
17
|
+
assert_equal [], StateMachine::Integrations::Base.matching_ancestors
|
18
|
+
end
|
19
|
+
|
16
20
|
def test_should_not_match_any_classes
|
17
21
|
assert !StateMachine::Integrations::Base.matches?(Class.new)
|
18
22
|
end
|
@@ -67,7 +71,7 @@ module BaseTest
|
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
70
|
-
|
74
|
+
@integration.version '1.0' do
|
71
75
|
def self.active?
|
72
76
|
true
|
73
77
|
end
|
@@ -77,7 +81,7 @@ module BaseTest
|
|
77
81
|
end
|
78
82
|
end
|
79
83
|
|
80
|
-
|
84
|
+
@integration.version '2.0' do
|
81
85
|
def self.active?
|
82
86
|
false
|
83
87
|
end
|
@@ -94,6 +98,7 @@ module BaseTest
|
|
94
98
|
|
95
99
|
def teardown
|
96
100
|
StateMachine::Integrations.send(:remove_const, 'Custom')
|
101
|
+
super
|
97
102
|
end
|
98
103
|
end
|
99
104
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
2
|
|
3
3
|
require 'dm-core'
|
4
|
-
require 'dm-core/version' unless defined?(
|
4
|
+
require 'dm-core/version' unless defined?(DataMapper::VERSION)
|
5
5
|
require 'dm-observer'
|
6
6
|
|
7
|
-
if Gem::Version.new(
|
7
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.3')
|
8
8
|
require 'dm-migrations'
|
9
9
|
end
|
10
10
|
|
11
11
|
# Establish database connection
|
12
12
|
DataMapper.setup(:default, 'sqlite3::memory:')
|
13
|
-
DataObjects::Sqlite3.logger = DataObjects::Logger.new("#{File.dirname(__FILE__)}/../../data_mapper.log", :
|
13
|
+
DataObjects::Sqlite3.logger = DataObjects::Logger.new("#{File.dirname(__FILE__)}/../../data_mapper.log", :debug)
|
14
14
|
|
15
15
|
module DataMapperTest
|
16
16
|
class BaseTestCase < Test::Unit::TestCase
|
@@ -18,14 +18,16 @@ module DataMapperTest
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def teardown
|
21
|
-
|
21
|
+
super
|
22
|
+
@resources.uniq.each {|resource| DataMapperTest.send(:remove_const, resource)} if instance_variable_defined?('@resources')
|
22
23
|
end
|
23
24
|
|
24
25
|
protected
|
25
26
|
# Creates a new DataMapper resource (and the associated table)
|
26
27
|
def new_resource(create_table = :foo, &block)
|
27
|
-
|
28
|
-
name =
|
28
|
+
base_table_name = create_table || :foo
|
29
|
+
name = base_table_name.to_s.capitalize
|
30
|
+
table_name = "#{base_table_name}_#{rand(1000000)}"
|
29
31
|
|
30
32
|
resource = Class.new
|
31
33
|
DataMapperTest.send(:remove_const, name) if DataMapperTest.const_defined?(name)
|
@@ -74,7 +76,7 @@ module DataMapperTest
|
|
74
76
|
end
|
75
77
|
|
76
78
|
def test_should_have_defaults
|
77
|
-
assert_equal
|
79
|
+
assert_equal({:action => :save, :use_transactions => false}, StateMachine::Integrations::DataMapper.defaults)
|
78
80
|
end
|
79
81
|
|
80
82
|
def test_should_not_have_a_locale_path
|
@@ -114,10 +116,10 @@ module DataMapperTest
|
|
114
116
|
end
|
115
117
|
|
116
118
|
def test_should_define_field_with_string_type
|
117
|
-
property = @resource.properties.detect {|
|
119
|
+
property = @resource.properties.detect {|p| p.name == :status}
|
118
120
|
assert_not_nil property
|
119
121
|
|
120
|
-
if Gem::Version.new(
|
122
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('1.0.0')
|
121
123
|
assert_instance_of DataMapper::Property::String, property
|
122
124
|
else
|
123
125
|
assert_equal String, property.type
|
@@ -134,10 +136,10 @@ module DataMapperTest
|
|
134
136
|
end
|
135
137
|
|
136
138
|
def test_should_not_redefine_field
|
137
|
-
property = @resource.properties.detect {|
|
139
|
+
property = @resource.properties.detect {|p| p.name == :status}
|
138
140
|
assert_not_nil property
|
139
141
|
|
140
|
-
if Gem::Version.new(
|
142
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('1.0.0')
|
141
143
|
assert_instance_of DataMapper::Property::Integer, property
|
142
144
|
else
|
143
145
|
assert_equal Integer, property.type
|
@@ -182,7 +184,7 @@ module DataMapperTest
|
|
182
184
|
|
183
185
|
class MachineWithStaticInitialStateTest < BaseTestCase
|
184
186
|
def setup
|
185
|
-
@resource = new_resource do
|
187
|
+
@resource = new_resource(:vehicle) do
|
186
188
|
attr_accessor :value
|
187
189
|
end
|
188
190
|
@machine = StateMachine::Machine.new(@resource, :initial => :parked)
|
@@ -211,7 +213,7 @@ module DataMapperTest
|
|
211
213
|
|
212
214
|
def test_should_not_allow_initialize_blocks
|
213
215
|
block_args = nil
|
214
|
-
|
216
|
+
@resource.new do |*args|
|
215
217
|
block_args = args
|
216
218
|
end
|
217
219
|
|
@@ -222,6 +224,7 @@ module DataMapperTest
|
|
222
224
|
@resource.class_eval do
|
223
225
|
attr_accessor :state_during_setter
|
224
226
|
|
227
|
+
remove_method :value=
|
225
228
|
define_method(:value=) do |value|
|
226
229
|
self.state_during_setter = state
|
227
230
|
end
|
@@ -240,6 +243,20 @@ module DataMapperTest
|
|
240
243
|
assert_equal 'idling', record.state
|
241
244
|
end
|
242
245
|
|
246
|
+
def test_should_persist_initial_state
|
247
|
+
record = @resource.new
|
248
|
+
record.save
|
249
|
+
record.reload
|
250
|
+
assert_equal 'parked', record.state
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_should_persist_initial_state_on_dup
|
254
|
+
record = @resource.create.dup
|
255
|
+
record.save
|
256
|
+
record.reload
|
257
|
+
assert_equal 'parked', record.state
|
258
|
+
end
|
259
|
+
|
243
260
|
def test_should_use_stored_values_when_loading_from_database
|
244
261
|
@machine.state :idling
|
245
262
|
|
@@ -253,6 +270,52 @@ module DataMapperTest
|
|
253
270
|
record = @resource.get(@resource.create(:state => nil).id)
|
254
271
|
assert_nil record.state
|
255
272
|
end
|
273
|
+
|
274
|
+
def test_should_use_stored_values_when_loading_for_many_association
|
275
|
+
@machine.state :idling
|
276
|
+
|
277
|
+
@resource.property :owner_id, Integer
|
278
|
+
@resource.auto_migrate!
|
279
|
+
|
280
|
+
owner_resource = new_resource(:owner) do
|
281
|
+
has n, :vehicles
|
282
|
+
end
|
283
|
+
|
284
|
+
owner = owner_resource.create
|
285
|
+
record = @resource.new(:state => 'idling')
|
286
|
+
record.owner_id = owner.id
|
287
|
+
record.save
|
288
|
+
assert_equal 'idling', owner.vehicles[0].state
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_should_use_stored_values_when_loading_for_one_association
|
292
|
+
@machine.state :idling
|
293
|
+
|
294
|
+
@resource.property :owner_id, Integer
|
295
|
+
@resource.auto_migrate!
|
296
|
+
|
297
|
+
owner_resource = new_resource(:owner) do
|
298
|
+
has 1, :vehicle
|
299
|
+
end
|
300
|
+
|
301
|
+
owner = owner_resource.create
|
302
|
+
record = @resource.new(:state => 'idling')
|
303
|
+
record.owner_id = owner.id
|
304
|
+
record.save
|
305
|
+
assert_equal 'idling', owner.vehicle.state
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_should_use_stored_values_when_loading_for_belongs_to_association
|
309
|
+
@machine.state :idling
|
310
|
+
|
311
|
+
driver_resource = new_resource(:driver) do
|
312
|
+
belongs_to :vehicle
|
313
|
+
end
|
314
|
+
|
315
|
+
record = @resource.create(:state => 'idling')
|
316
|
+
driver = driver_resource.create(:vehicle_id => record.id)
|
317
|
+
assert_equal 'idling', driver.vehicle.state
|
318
|
+
end
|
256
319
|
end
|
257
320
|
|
258
321
|
class MachineWithDynamicInitialStateTest < BaseTestCase
|
@@ -276,7 +339,7 @@ module DataMapperTest
|
|
276
339
|
|
277
340
|
def test_should_not_allow_initialize_blocks
|
278
341
|
block_args = nil
|
279
|
-
|
342
|
+
@resource.new do |*args|
|
280
343
|
block_args = args
|
281
344
|
end
|
282
345
|
|
@@ -287,6 +350,7 @@ module DataMapperTest
|
|
287
350
|
@resource.class_eval do
|
288
351
|
attr_accessor :state_during_setter
|
289
352
|
|
353
|
+
remove_method :value=
|
290
354
|
define_method(:value=) do |value|
|
291
355
|
self.state_during_setter = state || 'nil'
|
292
356
|
end
|
@@ -305,6 +369,20 @@ module DataMapperTest
|
|
305
369
|
assert_equal 'idling', record.state
|
306
370
|
end
|
307
371
|
|
372
|
+
def test_should_persist_initial_state
|
373
|
+
record = @resource.new
|
374
|
+
record.save
|
375
|
+
record.reload
|
376
|
+
assert_equal 'parked', record.state
|
377
|
+
end
|
378
|
+
|
379
|
+
def test_should_persist_initial_state_on_dup
|
380
|
+
record = @resource.create.dup
|
381
|
+
record.save
|
382
|
+
record.reload
|
383
|
+
assert_equal 'parked', record.state
|
384
|
+
end
|
385
|
+
|
308
386
|
def test_should_use_stored_values_when_loading_from_database
|
309
387
|
@machine.state :idling
|
310
388
|
|
@@ -332,8 +410,35 @@ module DataMapperTest
|
|
332
410
|
end
|
333
411
|
end
|
334
412
|
|
335
|
-
class
|
413
|
+
class MachineWithSameColumnDefaultTest < BaseTestCase
|
336
414
|
def setup
|
415
|
+
@original_stderr, $stderr = $stderr, StringIO.new
|
416
|
+
|
417
|
+
@resource = new_resource do
|
418
|
+
property :status, String, :default => 'parked'
|
419
|
+
end
|
420
|
+
@machine = StateMachine::Machine.new(@resource, :status, :initial => :parked)
|
421
|
+
@record = @resource.new
|
422
|
+
end
|
423
|
+
|
424
|
+
def test_should_use_machine_default
|
425
|
+
assert_equal 'parked', @record.status
|
426
|
+
end
|
427
|
+
|
428
|
+
def test_should_not_generate_a_warning
|
429
|
+
assert_no_match(/have defined a different default/, $stderr.string)
|
430
|
+
end
|
431
|
+
|
432
|
+
def teardown
|
433
|
+
$stderr = @original_stderr
|
434
|
+
super
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
class MachineWithDifferentColumnDefaultTest < BaseTestCase
|
439
|
+
def setup
|
440
|
+
@original_stderr, $stderr = $stderr, StringIO.new
|
441
|
+
|
337
442
|
@resource = new_resource do
|
338
443
|
property :status, String, :default => 'idling'
|
339
444
|
end
|
@@ -344,6 +449,41 @@ module DataMapperTest
|
|
344
449
|
def test_should_use_machine_default
|
345
450
|
assert_equal 'parked', @record.status
|
346
451
|
end
|
452
|
+
|
453
|
+
def test_should_generate_a_warning
|
454
|
+
assert_match(/Both DataMapperTest::Foo and its :status machine have defined a different default for "status". Use only one or the other for defining defaults to avoid unexpected behaviors\./, $stderr.string)
|
455
|
+
end
|
456
|
+
|
457
|
+
def teardown
|
458
|
+
$stderr = @original_stderr
|
459
|
+
super
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
class MachineWithDifferentIntegerColumnDefaultTest < BaseTestCase
|
464
|
+
def setup
|
465
|
+
@original_stderr, $stderr = $stderr, StringIO.new
|
466
|
+
|
467
|
+
@resource = new_resource do
|
468
|
+
property :status, Integer, :default => 0
|
469
|
+
end
|
470
|
+
@machine = StateMachine::Machine.new(@resource, :status, :initial => :parked)
|
471
|
+
@machine.state :parked, :value => 1
|
472
|
+
@record = @resource.new
|
473
|
+
end
|
474
|
+
|
475
|
+
def test_should_use_machine_default
|
476
|
+
assert_equal 1, @record.status
|
477
|
+
end
|
478
|
+
|
479
|
+
def test_should_generate_a_warning
|
480
|
+
assert_match(/Both DataMapperTest::Foo and its :status machine have defined a different default for "status". Use only one or the other for defining defaults to avoid unexpected behaviors\./, $stderr.string)
|
481
|
+
end
|
482
|
+
|
483
|
+
def teardown
|
484
|
+
$stderr = @original_stderr
|
485
|
+
super
|
486
|
+
end
|
347
487
|
end
|
348
488
|
|
349
489
|
class MachineWithConflictingPredicateTest < BaseTestCase
|
@@ -375,14 +515,14 @@ module DataMapperTest
|
|
375
515
|
@machine = StateMachine::Machine.new(@resource)
|
376
516
|
@machine.state :state
|
377
517
|
|
378
|
-
assert_match
|
518
|
+
assert_match(/^Instance method "state\?" is already defined in DataMapperTest::Foo :state instance helpers, use generic helper instead.*\n$/, $stderr.string)
|
379
519
|
end
|
380
520
|
|
381
|
-
def
|
521
|
+
def test_should_not_output_warning_with_same_machine_attribute
|
382
522
|
@machine = StateMachine::Machine.new(@resource, :public_state, :attribute => :state)
|
383
523
|
@machine.state :state
|
384
524
|
|
385
|
-
|
525
|
+
assert_no_match(/^Instance method "state\?" is already defined.*\n$/, $stderr.string)
|
386
526
|
end
|
387
527
|
|
388
528
|
def teardown
|
@@ -415,8 +555,7 @@ module DataMapperTest
|
|
415
555
|
end
|
416
556
|
|
417
557
|
def test_should_raise_exception_for_predicate_without_parameters
|
418
|
-
|
419
|
-
assert_equal 'wrong number of arguments (1 for 2)', exception.message
|
558
|
+
assert_raise(ArgumentError) { @record.state? }
|
420
559
|
end
|
421
560
|
|
422
561
|
def test_should_return_false_for_predicate_if_does_not_match_current_value
|
@@ -524,7 +663,7 @@ module DataMapperTest
|
|
524
663
|
assert_equal 'idling', record.state
|
525
664
|
end
|
526
665
|
|
527
|
-
if Gem::Version.new(
|
666
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.9.8')
|
528
667
|
def test_should_raise_exception_if_protected
|
529
668
|
resource = new_resource do
|
530
669
|
protected :state=
|
@@ -595,14 +734,14 @@ module DataMapperTest
|
|
595
734
|
end
|
596
735
|
|
597
736
|
def test_should_include_state_in_changed_attributes
|
598
|
-
assert_equal
|
737
|
+
assert_equal({@resource.properties[:state] => 'idling'}, @record.dirty_attributes)
|
599
738
|
end
|
600
739
|
|
601
740
|
def test_should_track_attribute_change
|
602
|
-
if Gem::Version.new(
|
603
|
-
assert_equal
|
741
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
742
|
+
assert_equal({@resource.properties[:state] => 'parked'}, @record.original_attributes)
|
604
743
|
else
|
605
|
-
assert_equal
|
744
|
+
assert_equal({:state => 'parked'}, @record.original_values)
|
606
745
|
end
|
607
746
|
end
|
608
747
|
|
@@ -610,10 +749,10 @@ module DataMapperTest
|
|
610
749
|
transition = StateMachine::Transition.new(@record, @machine, :ignite, :idling, :idling)
|
611
750
|
transition.perform(false)
|
612
751
|
|
613
|
-
if Gem::Version.new(
|
614
|
-
assert_equal
|
752
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
753
|
+
assert_equal({@resource.properties[:state] => 'parked'}, @record.original_attributes)
|
615
754
|
else
|
616
|
-
assert_equal
|
755
|
+
assert_equal({:state => 'parked'}, @record.original_values)
|
617
756
|
end
|
618
757
|
end
|
619
758
|
|
@@ -636,14 +775,14 @@ module DataMapperTest
|
|
636
775
|
end
|
637
776
|
|
638
777
|
def test_should_not_include_state_in_changed_attributes
|
639
|
-
assert_equal
|
778
|
+
assert_equal({}, @record.dirty_attributes)
|
640
779
|
end
|
641
780
|
end
|
642
781
|
|
643
782
|
class MachineWithDirtyAttributesAndCustomAttributeTest < BaseTestCase
|
644
783
|
def setup
|
645
784
|
@resource = new_resource do
|
646
|
-
property :status, String
|
785
|
+
property :status, String
|
647
786
|
end
|
648
787
|
@machine = StateMachine::Machine.new(@resource, :status, :initial => :parked)
|
649
788
|
@machine.event :ignite
|
@@ -656,14 +795,14 @@ module DataMapperTest
|
|
656
795
|
end
|
657
796
|
|
658
797
|
def test_should_include_state_in_changed_attributes
|
659
|
-
assert_equal
|
798
|
+
assert_equal({@resource.properties[:status] => 'idling'}, @record.dirty_attributes)
|
660
799
|
end
|
661
800
|
|
662
801
|
def test_should_track_attribute_change
|
663
|
-
if Gem::Version.new(
|
664
|
-
assert_equal
|
802
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
803
|
+
assert_equal({@resource.properties[:status] => 'parked'}, @record.original_attributes)
|
665
804
|
else
|
666
|
-
assert_equal
|
805
|
+
assert_equal({:status => 'parked'}, @record.original_values)
|
667
806
|
end
|
668
807
|
end
|
669
808
|
|
@@ -671,10 +810,10 @@ module DataMapperTest
|
|
671
810
|
transition = StateMachine::Transition.new(@record, @machine, :ignite, :idling, :idling)
|
672
811
|
transition.perform(false)
|
673
812
|
|
674
|
-
if Gem::Version.new(
|
675
|
-
assert_equal
|
813
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
814
|
+
assert_equal({@resource.properties[:status] => 'parked'}, @record.original_attributes)
|
676
815
|
else
|
677
|
-
assert_equal
|
816
|
+
assert_equal({:status => 'parked'}, @record.original_values)
|
678
817
|
end
|
679
818
|
end
|
680
819
|
end
|
@@ -682,7 +821,7 @@ module DataMapperTest
|
|
682
821
|
class MachineWithDirtyAttributeAndCustomAttributesDuringLoopbackTest < BaseTestCase
|
683
822
|
def setup
|
684
823
|
@resource = new_resource do
|
685
|
-
property :status, String
|
824
|
+
property :status, String
|
686
825
|
end
|
687
826
|
@machine = StateMachine::Machine.new(@resource, :status, :initial => :parked)
|
688
827
|
@machine.event :park
|
@@ -694,7 +833,7 @@ module DataMapperTest
|
|
694
833
|
end
|
695
834
|
|
696
835
|
def test_should_not_include_state_in_changed_attributes
|
697
|
-
assert_equal
|
836
|
+
assert_equal({}, @record.dirty_attributes)
|
698
837
|
end
|
699
838
|
end
|
700
839
|
|
@@ -709,14 +848,14 @@ module DataMapperTest
|
|
709
848
|
end
|
710
849
|
|
711
850
|
def test_should_not_include_state_in_changed_attributes
|
712
|
-
assert_equal
|
851
|
+
assert_equal({}, @record.dirty_attributes)
|
713
852
|
end
|
714
853
|
|
715
854
|
def test_should_not_track_attribute_change
|
716
|
-
if Gem::Version.new(
|
717
|
-
assert_equal
|
855
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
856
|
+
assert_equal({}, @record.original_attributes)
|
718
857
|
else
|
719
|
-
assert_equal
|
858
|
+
assert_equal({}, @record.original_values)
|
720
859
|
end
|
721
860
|
end
|
722
861
|
end
|
@@ -747,7 +886,7 @@ module DataMapperTest
|
|
747
886
|
end
|
748
887
|
|
749
888
|
begin
|
750
|
-
if Gem::Version.new(
|
889
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.3')
|
751
890
|
require 'dm-transactions'
|
752
891
|
end
|
753
892
|
|
@@ -848,12 +987,22 @@ module DataMapperTest
|
|
848
987
|
|
849
988
|
def test_should_run_around_callbacks
|
850
989
|
before_called = false
|
851
|
-
after_called =
|
852
|
-
|
990
|
+
after_called = false
|
991
|
+
ensure_called = 0
|
992
|
+
@machine.around_transition do |block|
|
993
|
+
before_called = true
|
994
|
+
begin
|
995
|
+
block.call
|
996
|
+
ensure
|
997
|
+
ensure_called += 1
|
998
|
+
end
|
999
|
+
after_called = true
|
1000
|
+
end
|
853
1001
|
|
854
1002
|
@transition.perform
|
855
1003
|
assert before_called
|
856
|
-
assert after_called
|
1004
|
+
assert after_called
|
1005
|
+
assert_equal ensure_called, 1
|
857
1006
|
end
|
858
1007
|
|
859
1008
|
def test_should_run_around_callbacks_with_the_context_of_the_record
|
@@ -888,6 +1037,36 @@ module DataMapperTest
|
|
888
1037
|
|
889
1038
|
assert_equal [1, 2, 3], @record.callback_result
|
890
1039
|
end
|
1040
|
+
|
1041
|
+
def test_should_run_in_expected_order
|
1042
|
+
# Avoid Ruby 2.0.0 stack too deep issues
|
1043
|
+
@resource.class_eval do
|
1044
|
+
def valid?(*)
|
1045
|
+
super
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
expected = [
|
1050
|
+
:before_transition, :before_validation, :after_validation,
|
1051
|
+
:before_save, :before_create, :after_create, :after_save,
|
1052
|
+
:after_transition
|
1053
|
+
]
|
1054
|
+
|
1055
|
+
callbacks = []
|
1056
|
+
@resource.before(:valid?) { callbacks << :before_validation }
|
1057
|
+
@resource.after(:valid?) { callbacks << :after_validation }
|
1058
|
+
@resource.before(:save) { callbacks << :before_save }
|
1059
|
+
@resource.before(:create) { callbacks << :before_create }
|
1060
|
+
@resource.after(:create) { callbacks << :after_create }
|
1061
|
+
@resource.after(:save) { callbacks << :after_save }
|
1062
|
+
|
1063
|
+
@machine.before_transition { callbacks << :before_transition }
|
1064
|
+
@machine.after_transition { callbacks << :after_transition }
|
1065
|
+
|
1066
|
+
@transition.perform
|
1067
|
+
|
1068
|
+
assert_equal expected, callbacks
|
1069
|
+
end
|
891
1070
|
end
|
892
1071
|
|
893
1072
|
class MachineWithFailedBeforeCallbacksTest < BaseTestCase
|
@@ -927,6 +1106,42 @@ module DataMapperTest
|
|
927
1106
|
end
|
928
1107
|
end
|
929
1108
|
|
1109
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('1.0.0')
|
1110
|
+
class MachineNestedActionTest < BaseTestCase
|
1111
|
+
def setup
|
1112
|
+
@callbacks = []
|
1113
|
+
|
1114
|
+
@resource = new_resource
|
1115
|
+
@machine = StateMachine::Machine.new(@resource)
|
1116
|
+
@machine.event :ignite do
|
1117
|
+
transition :parked => :idling
|
1118
|
+
end
|
1119
|
+
|
1120
|
+
@record = @resource.new(:state => 'parked')
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
def test_should_allow_transition_prior_to_creation_if_skipping_action
|
1124
|
+
record = @record
|
1125
|
+
@resource.before(:create) { record.ignite }
|
1126
|
+
result = @record.save
|
1127
|
+
|
1128
|
+
assert_equal true, result
|
1129
|
+
assert_equal "idling", @record.state
|
1130
|
+
@record.reload
|
1131
|
+
assert_equal "idling", @record.state
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
def test_should_not_allow_transition_after_creation
|
1135
|
+
record = @record
|
1136
|
+
@resource.after(:create) { record.ignite(false) }
|
1137
|
+
|
1138
|
+
result = @record.save
|
1139
|
+
|
1140
|
+
assert_equal false, result
|
1141
|
+
end
|
1142
|
+
end
|
1143
|
+
end
|
1144
|
+
|
930
1145
|
class MachineWithFailedActionTest < BaseTestCase
|
931
1146
|
def setup
|
932
1147
|
@resource = new_resource do
|
@@ -968,7 +1183,7 @@ module DataMapperTest
|
|
968
1183
|
end
|
969
1184
|
|
970
1185
|
class MachineWithFailedAfterCallbacksTest < BaseTestCase
|
971
|
-
|
1186
|
+
def setup
|
972
1187
|
callbacks = []
|
973
1188
|
|
974
1189
|
@resource = new_resource
|
@@ -1122,7 +1337,7 @@ module DataMapperTest
|
|
1122
1337
|
end
|
1123
1338
|
|
1124
1339
|
# See README caveats
|
1125
|
-
if Gem::Version.new(
|
1340
|
+
if Gem::Version.new(DataMapper::VERSION) > Gem::Version.new('0.9.6')
|
1126
1341
|
class MachineWithEventAttributesOnValidationTest < BaseTestCase
|
1127
1342
|
def setup
|
1128
1343
|
@resource = new_resource
|
@@ -1164,7 +1379,11 @@ module DataMapperTest
|
|
1164
1379
|
ran_callback = false
|
1165
1380
|
@machine.around_transition {|block| ran_callback = true; block.call }
|
1166
1381
|
|
1167
|
-
|
1382
|
+
begin
|
1383
|
+
@record.valid?
|
1384
|
+
rescue ArgumentError
|
1385
|
+
raise if StateMachine::Transition.pause_supported?
|
1386
|
+
end
|
1168
1387
|
assert ran_callback
|
1169
1388
|
end
|
1170
1389
|
|
@@ -1219,7 +1438,11 @@ module DataMapperTest
|
|
1219
1438
|
ran_callback = [false]
|
1220
1439
|
@machine.around_transition {|block| block.call; ran_callback[0] = true }
|
1221
1440
|
|
1222
|
-
|
1441
|
+
begin
|
1442
|
+
@record.valid?
|
1443
|
+
rescue ArgumentError
|
1444
|
+
raise if StateMachine::Transition.pause_supported?
|
1445
|
+
end
|
1223
1446
|
assert !ran_callback[0]
|
1224
1447
|
end
|
1225
1448
|
|
@@ -1236,7 +1459,11 @@ module DataMapperTest
|
|
1236
1459
|
ran_callback = [false]
|
1237
1460
|
@machine.around_transition {|block| block.call; ran_callback[0] = true }
|
1238
1461
|
|
1239
|
-
|
1462
|
+
begin
|
1463
|
+
@record.valid?
|
1464
|
+
rescue ArgumentError
|
1465
|
+
raise if StateMachine::Transition.pause_supported?
|
1466
|
+
end
|
1240
1467
|
assert !ran_callback[0]
|
1241
1468
|
end
|
1242
1469
|
|
@@ -1378,10 +1605,38 @@ module DataMapperTest
|
|
1378
1605
|
assert_equal false, @record.save
|
1379
1606
|
assert_equal 1, @resource.all.size
|
1380
1607
|
end
|
1608
|
+
|
1609
|
+
def test_should_allow_additional_transitions_to_new_state_in_after_transitions
|
1610
|
+
@machine.event :park do
|
1611
|
+
transition :idling => :parked
|
1612
|
+
end
|
1613
|
+
|
1614
|
+
@machine.after_transition(:on => :ignite) { park }
|
1615
|
+
|
1616
|
+
@record.save
|
1617
|
+
assert_equal 'parked', @record.state
|
1618
|
+
|
1619
|
+
@record.reload
|
1620
|
+
assert_equal 'parked', @record.state
|
1621
|
+
end
|
1622
|
+
|
1623
|
+
def test_should_allow_additional_transitions_to_previous_state_in_after_transitions
|
1624
|
+
@machine.event :shift_up do
|
1625
|
+
transition :idling => :first_gear
|
1626
|
+
end
|
1627
|
+
|
1628
|
+
@machine.after_transition(:on => :ignite) { shift_up }
|
1629
|
+
|
1630
|
+
@record.save
|
1631
|
+
assert_equal 'first_gear', @record.state
|
1632
|
+
|
1633
|
+
@record.reload
|
1634
|
+
assert_equal 'first_gear', @record.state
|
1635
|
+
end
|
1381
1636
|
end
|
1382
1637
|
end
|
1383
1638
|
|
1384
|
-
if Gem::Version.new(
|
1639
|
+
if Gem::Version.new(DataMapper::VERSION) >= Gem::Version.new('0.10.0')
|
1385
1640
|
class MachineWithEventAttributesOnSaveBangTest < BaseTestCase
|
1386
1641
|
def setup
|
1387
1642
|
@resource = new_resource
|
@@ -1464,7 +1719,7 @@ module DataMapperTest
|
|
1464
1719
|
end
|
1465
1720
|
end
|
1466
1721
|
|
1467
|
-
if Gem::Version.new(
|
1722
|
+
if Gem::Version.new(DataMapper::VERSION) > Gem::Version.new('0.9.6')
|
1468
1723
|
class MachineWithEventAttributesOnCustomActionTest < BaseTestCase
|
1469
1724
|
def setup
|
1470
1725
|
@superclass = new_resource do
|
@@ -1526,7 +1781,7 @@ module DataMapperTest
|
|
1526
1781
|
def test_should_call_before_transition_callback_if_requirements_match
|
1527
1782
|
called = false
|
1528
1783
|
|
1529
|
-
|
1784
|
+
new_observer(@resource) do
|
1530
1785
|
before_transition :from => :parked do
|
1531
1786
|
called = true
|
1532
1787
|
end
|
@@ -1539,7 +1794,7 @@ module DataMapperTest
|
|
1539
1794
|
def test_should_not_call_before_transition_callback_if_requirements_do_not_match
|
1540
1795
|
called = false
|
1541
1796
|
|
1542
|
-
|
1797
|
+
new_observer(@resource) do
|
1543
1798
|
before_transition :from => :idling do
|
1544
1799
|
called = true
|
1545
1800
|
end
|
@@ -1552,7 +1807,7 @@ module DataMapperTest
|
|
1552
1807
|
def test_should_pass_transition_to_before_callbacks
|
1553
1808
|
callback_args = nil
|
1554
1809
|
|
1555
|
-
|
1810
|
+
new_observer(@resource) do
|
1556
1811
|
before_transition do |*args|
|
1557
1812
|
callback_args = args
|
1558
1813
|
end
|
@@ -1565,7 +1820,7 @@ module DataMapperTest
|
|
1565
1820
|
def test_should_call_after_transition_callback_if_requirements_match
|
1566
1821
|
called = false
|
1567
1822
|
|
1568
|
-
|
1823
|
+
new_observer(@resource) do
|
1569
1824
|
after_transition :from => :parked do
|
1570
1825
|
called = true
|
1571
1826
|
end
|
@@ -1578,7 +1833,7 @@ module DataMapperTest
|
|
1578
1833
|
def test_should_not_call_after_transition_callback_if_requirements_do_not_match
|
1579
1834
|
called = false
|
1580
1835
|
|
1581
|
-
|
1836
|
+
new_observer(@resource) do
|
1582
1837
|
after_transition :from => :idling do
|
1583
1838
|
called = true
|
1584
1839
|
end
|
@@ -1591,7 +1846,7 @@ module DataMapperTest
|
|
1591
1846
|
def test_should_pass_transition_to_after_callbacks
|
1592
1847
|
callback_args = nil
|
1593
1848
|
|
1594
|
-
|
1849
|
+
new_observer(@resource) do
|
1595
1850
|
after_transition do |*args|
|
1596
1851
|
callback_args = args
|
1597
1852
|
end
|
@@ -1604,7 +1859,7 @@ module DataMapperTest
|
|
1604
1859
|
def test_should_call_around_transition_callback_if_requirements_match
|
1605
1860
|
called = false
|
1606
1861
|
|
1607
|
-
|
1862
|
+
new_observer(@resource) do
|
1608
1863
|
around_transition :from => :parked do |block|
|
1609
1864
|
called = true
|
1610
1865
|
block.call
|
@@ -1615,10 +1870,10 @@ module DataMapperTest
|
|
1615
1870
|
assert called
|
1616
1871
|
end
|
1617
1872
|
|
1618
|
-
def
|
1873
|
+
def test_should_not_call_around_transition_callback_if_requirements_do_not_match
|
1619
1874
|
called = false
|
1620
1875
|
|
1621
|
-
|
1876
|
+
new_observer(@resource) do
|
1622
1877
|
around_transition :from => :idling do |block|
|
1623
1878
|
called = true
|
1624
1879
|
block.call
|
@@ -1632,7 +1887,7 @@ module DataMapperTest
|
|
1632
1887
|
def test_should_pass_transition_to_around_callbacks
|
1633
1888
|
callback_args = nil
|
1634
1889
|
|
1635
|
-
|
1890
|
+
new_observer(@resource) do
|
1636
1891
|
around_transition do |*args|
|
1637
1892
|
block = args.pop
|
1638
1893
|
callback_args = args
|
@@ -1649,7 +1904,7 @@ module DataMapperTest
|
|
1649
1904
|
|
1650
1905
|
called = false
|
1651
1906
|
|
1652
|
-
|
1907
|
+
new_observer(@resource) do
|
1653
1908
|
after_transition_failure :on => :ignite do
|
1654
1909
|
called = true
|
1655
1910
|
end
|
@@ -1664,7 +1919,7 @@ module DataMapperTest
|
|
1664
1919
|
|
1665
1920
|
called = false
|
1666
1921
|
|
1667
|
-
|
1922
|
+
new_observer(@resource) do
|
1668
1923
|
after_transition_failure :on => :park do
|
1669
1924
|
called = true
|
1670
1925
|
end
|
@@ -1679,7 +1934,7 @@ module DataMapperTest
|
|
1679
1934
|
|
1680
1935
|
callback_args = nil
|
1681
1936
|
|
1682
|
-
|
1937
|
+
new_observer(@resource) do
|
1683
1938
|
after_transition_failure do |*args|
|
1684
1939
|
callback_args = args
|
1685
1940
|
end
|
@@ -1705,7 +1960,7 @@ module DataMapperTest
|
|
1705
1960
|
called_state = false
|
1706
1961
|
called_status = false
|
1707
1962
|
|
1708
|
-
|
1963
|
+
new_observer(@resource) do
|
1709
1964
|
before_transition :state, :from => :parked do
|
1710
1965
|
called_state = true
|
1711
1966
|
end
|
@@ -1729,8 +1984,7 @@ module DataMapperTest
|
|
1729
1984
|
|
1730
1985
|
called_attribute = nil
|
1731
1986
|
|
1732
|
-
|
1733
|
-
observer = new_observer(@resource) do
|
1987
|
+
new_observer(@resource) do
|
1734
1988
|
before_transition :state, :status, :from => :parked do |transition|
|
1735
1989
|
called_attribute = transition.attribute
|
1736
1990
|
end
|
@@ -1764,7 +2018,7 @@ module DataMapperTest
|
|
1764
2018
|
notifications << :callback_around_after_transition
|
1765
2019
|
end
|
1766
2020
|
|
1767
|
-
|
2021
|
+
new_observer(@resource) do
|
1768
2022
|
before_transition do
|
1769
2023
|
notifications << :observer_before_transition
|
1770
2024
|
end
|
@@ -1813,7 +2067,7 @@ module DataMapperTest
|
|
1813
2067
|
|
1814
2068
|
def test_should_only_include_records_with_state_in_singular_with_scope
|
1815
2069
|
parked = @resource.create :state => 'parked'
|
1816
|
-
|
2070
|
+
@resource.create :state => 'idling'
|
1817
2071
|
|
1818
2072
|
assert_equal [parked], @resource.with_state(:parked)
|
1819
2073
|
end
|