state_machine 1.1.2 → 1.2.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/.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
|