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.
Files changed (240) hide show
  1. data/.gitignore +7 -11
  2. data/.travis.yml +49 -7
  3. data/Appraisals +255 -87
  4. data/CHANGELOG.md +30 -0
  5. data/README.md +142 -21
  6. data/Rakefile +1 -11
  7. data/examples/Gemfile +5 -0
  8. data/examples/Gemfile.lock +14 -0
  9. data/examples/auto_shop.rb +2 -0
  10. data/examples/car.rb +2 -0
  11. data/examples/doc/AutoShop.html +2856 -0
  12. data/examples/doc/AutoShop_state.png +0 -0
  13. data/examples/doc/Car.html +919 -0
  14. data/examples/doc/Car_state.png +0 -0
  15. data/examples/doc/TrafficLight.html +2230 -0
  16. data/examples/doc/TrafficLight_state.png +0 -0
  17. data/examples/doc/Vehicle.html +7921 -0
  18. data/examples/doc/Vehicle_state.png +0 -0
  19. data/examples/doc/_index.html +136 -0
  20. data/examples/doc/class_list.html +47 -0
  21. data/examples/doc/css/common.css +1 -0
  22. data/examples/doc/css/full_list.css +55 -0
  23. data/examples/doc/css/style.css +322 -0
  24. data/examples/doc/file_list.html +46 -0
  25. data/examples/doc/frames.html +13 -0
  26. data/examples/doc/index.html +136 -0
  27. data/examples/doc/js/app.js +205 -0
  28. data/examples/doc/js/full_list.js +173 -0
  29. data/examples/doc/js/jquery.js +16 -0
  30. data/examples/doc/method_list.html +734 -0
  31. data/examples/doc/top-level-namespace.html +105 -0
  32. data/examples/rails-rest/migration.rb +1 -5
  33. data/examples/rails-rest/view__form.html.erb +34 -0
  34. data/examples/rails-rest/view_edit.html.erb +2 -21
  35. data/examples/rails-rest/view_index.html.erb +6 -4
  36. data/examples/rails-rest/view_new.html.erb +2 -11
  37. data/examples/rails-rest/view_show.html.erb +5 -3
  38. data/examples/traffic_light.rb +2 -0
  39. data/examples/vehicle.rb +2 -0
  40. data/gemfiles/active_model-3.0.0.gemfile.lock +9 -6
  41. data/gemfiles/active_model-3.0.5.gemfile.lock +10 -7
  42. data/gemfiles/active_model-3.1.1.gemfile.lock +12 -10
  43. data/gemfiles/{active_model-3.2.0.gemfile → active_model-3.2.1.gemfile} +1 -1
  44. data/gemfiles/{graphviz-0.9.0.gemfile → active_model-3.2.12.gemfile} +1 -1
  45. data/gemfiles/active_model-3.2.12.gemfile.lock +36 -0
  46. data/gemfiles/{active_record-3.2.0.gemfile → active_model-3.2.13.rc1.gemfile} +1 -2
  47. data/gemfiles/active_model-3.2.13.rc1.gemfile.lock +36 -0
  48. data/gemfiles/active_model-4.0.0.gemfile +9 -0
  49. data/gemfiles/active_model-4.0.0.gemfile.lock +78 -0
  50. data/gemfiles/active_record-2.0.0.gemfile +2 -1
  51. data/gemfiles/active_record-2.0.0.gemfile.lock +15 -6
  52. data/gemfiles/active_record-2.0.5.gemfile +2 -1
  53. data/gemfiles/active_record-2.0.5.gemfile.lock +15 -6
  54. data/gemfiles/active_record-2.1.0.gemfile +2 -1
  55. data/gemfiles/active_record-2.1.0.gemfile.lock +15 -6
  56. data/gemfiles/active_record-2.1.2.gemfile +2 -1
  57. data/gemfiles/active_record-2.1.2.gemfile.lock +15 -6
  58. data/gemfiles/active_record-2.2.3.gemfile +2 -1
  59. data/gemfiles/active_record-2.2.3.gemfile.lock +15 -6
  60. data/gemfiles/active_record-2.3.12.gemfile +2 -1
  61. data/gemfiles/active_record-2.3.12.gemfile.lock +15 -6
  62. data/gemfiles/active_record-2.3.5.gemfile +9 -0
  63. data/gemfiles/active_record-2.3.5.gemfile.lock +39 -0
  64. data/gemfiles/active_record-3.0.0.gemfile +2 -1
  65. data/gemfiles/active_record-3.0.0.gemfile.lock +18 -11
  66. data/gemfiles/active_record-3.0.5.gemfile +2 -1
  67. data/gemfiles/active_record-3.0.5.gemfile.lock +19 -12
  68. data/gemfiles/active_record-3.1.1.gemfile +2 -1
  69. data/gemfiles/active_record-3.1.1.gemfile.lock +22 -16
  70. data/gemfiles/active_record-3.2.12.gemfile +9 -0
  71. data/gemfiles/active_record-3.2.12.gemfile.lock +51 -0
  72. data/gemfiles/active_record-3.2.13.rc1.gemfile +9 -0
  73. data/gemfiles/active_record-3.2.13.rc1.gemfile.lock +51 -0
  74. data/gemfiles/active_record-4.0.0.gemfile +11 -0
  75. data/gemfiles/active_record-4.0.0.gemfile.lock +83 -0
  76. data/gemfiles/data_mapper-0.10.2.gemfile +1 -0
  77. data/gemfiles/data_mapper-0.10.2.gemfile.lock +13 -9
  78. data/gemfiles/data_mapper-0.9.11.gemfile +1 -0
  79. data/gemfiles/data_mapper-0.9.11.gemfile.lock +31 -7
  80. data/gemfiles/data_mapper-0.9.4.gemfile.lock +25 -14
  81. data/gemfiles/data_mapper-0.9.7.gemfile +1 -0
  82. data/gemfiles/data_mapper-0.9.7.gemfile.lock +27 -15
  83. data/gemfiles/data_mapper-1.0.0.gemfile.lock +20 -17
  84. data/gemfiles/data_mapper-1.0.1.gemfile.lock +20 -17
  85. data/gemfiles/data_mapper-1.0.2.gemfile.lock +20 -17
  86. data/gemfiles/data_mapper-1.1.0.gemfile.lock +19 -16
  87. data/gemfiles/data_mapper-1.2.0.gemfile.lock +19 -16
  88. data/gemfiles/default.gemfile.lock +8 -5
  89. data/gemfiles/graphviz-0.9.17.gemfile +7 -0
  90. data/gemfiles/graphviz-0.9.17.gemfile.lock +29 -0
  91. data/gemfiles/graphviz-0.9.21.gemfile.lock +7 -4
  92. data/gemfiles/graphviz-1.0.0.gemfile.lock +7 -4
  93. data/gemfiles/graphviz-1.0.3.gemfile +7 -0
  94. data/gemfiles/graphviz-1.0.3.gemfile.lock +29 -0
  95. data/gemfiles/graphviz-1.0.8.gemfile +7 -0
  96. data/gemfiles/graphviz-1.0.8.gemfile.lock +29 -0
  97. data/gemfiles/mongo_mapper-0.10.0.gemfile +1 -0
  98. data/gemfiles/mongo_mapper-0.10.0.gemfile.lock +14 -11
  99. data/gemfiles/mongo_mapper-0.11.1.gemfile +7 -0
  100. data/gemfiles/mongo_mapper-0.11.1.gemfile.lock +44 -0
  101. data/gemfiles/mongo_mapper-0.11.2.gemfile +9 -0
  102. data/gemfiles/mongo_mapper-0.11.2.gemfile.lock +48 -0
  103. data/gemfiles/mongo_mapper-0.12.0.gemfile +9 -0
  104. data/gemfiles/mongo_mapper-0.12.0.gemfile.lock +48 -0
  105. data/gemfiles/mongo_mapper-0.5.5.gemfile.lock +7 -4
  106. data/gemfiles/mongo_mapper-0.5.8.gemfile.lock +7 -4
  107. data/gemfiles/mongo_mapper-0.6.0.gemfile.lock +7 -4
  108. data/gemfiles/mongo_mapper-0.6.10.gemfile.lock +7 -4
  109. data/gemfiles/mongo_mapper-0.7.0.gemfile.lock +7 -4
  110. data/gemfiles/mongo_mapper-0.7.5.gemfile.lock +7 -4
  111. data/gemfiles/mongo_mapper-0.8.0.gemfile.lock +7 -4
  112. data/gemfiles/mongo_mapper-0.8.3.gemfile.lock +7 -4
  113. data/gemfiles/mongo_mapper-0.8.4.gemfile.lock +7 -4
  114. data/gemfiles/mongo_mapper-0.8.6.gemfile.lock +7 -4
  115. data/gemfiles/mongo_mapper-0.9.0.gemfile.lock +7 -4
  116. data/gemfiles/mongoid-2.0.0.gemfile +2 -0
  117. data/gemfiles/mongoid-2.0.0.gemfile.lock +22 -18
  118. data/gemfiles/mongoid-2.1.4.gemfile +2 -0
  119. data/gemfiles/mongoid-2.1.4.gemfile.lock +21 -17
  120. data/gemfiles/mongoid-2.2.4.gemfile +2 -0
  121. data/gemfiles/mongoid-2.2.4.gemfile.lock +21 -17
  122. data/gemfiles/mongoid-2.3.3.gemfile +2 -0
  123. data/gemfiles/mongoid-2.3.3.gemfile.lock +21 -17
  124. data/gemfiles/mongoid-2.4.0.gemfile +9 -0
  125. data/gemfiles/mongoid-2.4.0.gemfile.lock +47 -0
  126. data/gemfiles/mongoid-2.4.10.gemfile +9 -0
  127. data/gemfiles/mongoid-2.4.10.gemfile.lock +47 -0
  128. data/gemfiles/mongoid-2.5.2.gemfile +9 -0
  129. data/gemfiles/mongoid-2.5.2.gemfile.lock +47 -0
  130. data/gemfiles/mongoid-2.6.0.gemfile +9 -0
  131. data/gemfiles/mongoid-2.6.0.gemfile.lock +47 -0
  132. data/gemfiles/mongoid-3.0.0.gemfile +8 -0
  133. data/gemfiles/mongoid-3.0.0.gemfile.lock +45 -0
  134. data/gemfiles/mongoid-3.0.22.gemfile +8 -0
  135. data/gemfiles/mongoid-3.0.22.gemfile.lock +45 -0
  136. data/gemfiles/mongoid-3.1.0.gemfile +8 -0
  137. data/gemfiles/mongoid-3.1.0.gemfile.lock +45 -0
  138. data/gemfiles/sequel-2.11.0.gemfile +2 -1
  139. data/gemfiles/sequel-2.11.0.gemfile.lock +11 -6
  140. data/gemfiles/sequel-2.12.0.gemfile +2 -1
  141. data/gemfiles/sequel-2.12.0.gemfile.lock +11 -6
  142. data/gemfiles/sequel-2.8.0.gemfile +2 -1
  143. data/gemfiles/sequel-2.8.0.gemfile.lock +11 -6
  144. data/gemfiles/sequel-3.0.0.gemfile +2 -1
  145. data/gemfiles/sequel-3.0.0.gemfile.lock +11 -6
  146. data/gemfiles/sequel-3.10.0.gemfile +9 -0
  147. data/gemfiles/sequel-3.10.0.gemfile.lock +33 -0
  148. data/gemfiles/sequel-3.13.0.gemfile +2 -1
  149. data/gemfiles/sequel-3.13.0.gemfile.lock +11 -6
  150. data/gemfiles/sequel-3.14.0.gemfile +2 -1
  151. data/gemfiles/sequel-3.14.0.gemfile.lock +11 -6
  152. data/gemfiles/sequel-3.23.0.gemfile +2 -1
  153. data/gemfiles/sequel-3.23.0.gemfile.lock +11 -6
  154. data/gemfiles/sequel-3.24.0.gemfile +2 -1
  155. data/gemfiles/sequel-3.24.0.gemfile.lock +11 -6
  156. data/gemfiles/sequel-3.29.0.gemfile +2 -1
  157. data/gemfiles/sequel-3.29.0.gemfile.lock +11 -6
  158. data/gemfiles/sequel-3.34.0.gemfile +9 -0
  159. data/gemfiles/sequel-3.34.0.gemfile.lock +33 -0
  160. data/gemfiles/sequel-3.35.0.gemfile +9 -0
  161. data/gemfiles/sequel-3.35.0.gemfile.lock +33 -0
  162. data/gemfiles/sequel-3.4.0.gemfile +9 -0
  163. data/gemfiles/sequel-3.4.0.gemfile.lock +33 -0
  164. data/gemfiles/sequel-3.44.0.gemfile +9 -0
  165. data/gemfiles/sequel-3.44.0.gemfile.lock +33 -0
  166. data/lib/state_machine.rb +6 -0
  167. data/lib/state_machine/branch.rb +9 -8
  168. data/lib/state_machine/callback.rb +2 -2
  169. data/lib/state_machine/core.rb +10 -0
  170. data/lib/state_machine/core_ext.rb +1 -0
  171. data/lib/state_machine/eval_helpers.rb +5 -3
  172. data/lib/state_machine/event.rb +17 -6
  173. data/lib/state_machine/graph.rb +92 -0
  174. data/lib/state_machine/integrations.rb +13 -1
  175. data/lib/state_machine/integrations/active_model.rb +14 -20
  176. data/lib/state_machine/integrations/active_model/observer.rb +3 -3
  177. data/lib/state_machine/integrations/active_model/observer_update.rb +42 -0
  178. data/lib/state_machine/integrations/active_record.rb +52 -25
  179. data/lib/state_machine/integrations/active_record/locale.rb +1 -1
  180. data/lib/state_machine/integrations/active_record/versions.rb +1 -17
  181. data/lib/state_machine/integrations/base.rb +15 -6
  182. data/lib/state_machine/integrations/data_mapper.rb +98 -35
  183. data/lib/state_machine/integrations/data_mapper/versions.rb +46 -8
  184. data/lib/state_machine/integrations/mongo_mapper.rb +39 -12
  185. data/lib/state_machine/integrations/mongo_mapper/locale.rb +1 -1
  186. data/lib/state_machine/integrations/mongo_mapper/versions.rb +3 -20
  187. data/lib/state_machine/integrations/mongoid.rb +52 -14
  188. data/lib/state_machine/integrations/mongoid/locale.rb +1 -1
  189. data/lib/state_machine/integrations/mongoid/versions.rb +52 -26
  190. data/lib/state_machine/integrations/sequel.rb +82 -33
  191. data/lib/state_machine/integrations/sequel/versions.rb +19 -44
  192. data/lib/state_machine/machine.rb +99 -59
  193. data/lib/state_machine/machine_collection.rb +1 -2
  194. data/lib/state_machine/macro_methods.rb +29 -0
  195. data/lib/state_machine/node_collection.rb +1 -1
  196. data/lib/state_machine/state.rb +18 -10
  197. data/lib/state_machine/state_context.rb +2 -2
  198. data/lib/state_machine/transition.rb +8 -1
  199. data/lib/state_machine/transition_collection.rb +2 -1
  200. data/lib/state_machine/version.rb +1 -1
  201. data/lib/state_machine/yard.rb +8 -0
  202. data/lib/state_machine/yard/handlers.rb +12 -0
  203. data/lib/state_machine/yard/handlers/base.rb +32 -0
  204. data/lib/state_machine/yard/handlers/event.rb +25 -0
  205. data/lib/state_machine/yard/handlers/machine.rb +344 -0
  206. data/lib/state_machine/yard/handlers/state.rb +25 -0
  207. data/lib/state_machine/yard/handlers/transition.rb +47 -0
  208. data/lib/state_machine/yard/templates.rb +3 -0
  209. data/lib/state_machine/yard/templates/default/class/html/setup.rb +30 -0
  210. data/lib/state_machine/yard/templates/default/class/html/state_machines.erb +12 -0
  211. data/lib/tasks/state_machine.rb +2 -1
  212. data/lib/yard-state_machine.rb +2 -0
  213. data/state_machine.gemspec +4 -3
  214. data/test/files/switch.rb +4 -0
  215. data/test/test_helper.rb +5 -0
  216. data/test/unit/branch_test.rb +117 -36
  217. data/test/unit/callback_test.rb +5 -2
  218. data/test/unit/eval_helpers_test.rb +49 -1
  219. data/test/unit/event_collection_test.rb +3 -1
  220. data/test/unit/event_test.rb +182 -12
  221. data/test/unit/graph_test.rb +98 -0
  222. data/test/unit/integrations/active_model_test.rb +82 -12
  223. data/test/unit/integrations/active_record_test.rb +393 -37
  224. data/test/unit/integrations/base_test.rb +7 -2
  225. data/test/unit/integrations/data_mapper_test.rb +326 -72
  226. data/test/unit/integrations/mongo_mapper_test.rb +338 -44
  227. data/test/unit/integrations/mongoid_test.rb +606 -98
  228. data/test/unit/integrations/sequel_test.rb +429 -102
  229. data/test/unit/integrations_test.rb +28 -6
  230. data/test/unit/machine_collection_test.rb +6 -2
  231. data/test/unit/machine_test.rb +134 -82
  232. data/test/unit/node_collection_test.rb +2 -2
  233. data/test/unit/path_test.rb +1 -1
  234. data/test/unit/state_test.rb +65 -21
  235. data/test/unit/transition_collection_test.rb +43 -23
  236. data/test/unit/transition_test.rb +8 -2
  237. metadata +303 -221
  238. data/gemfiles/active_model-3.2.0.gemfile.lock +0 -32
  239. data/gemfiles/active_record-3.2.0.gemfile.lock +0 -43
  240. 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
- version1 = @integration.version '1.0' do
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
- version2 = @integration.version '2.0' do
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?(::DataMapper::VERSION)
4
+ require 'dm-core/version' unless defined?(DataMapper::VERSION)
5
5
  require 'dm-observer'
6
6
 
7
- if Gem::Version.new(::DataMapper::VERSION) >= Gem::Version.new('0.10.3')
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", :info)
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
- @resources.uniq.each {|resource| DataMapperTest.send(:remove_const, resource)} if @resources
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
- table_name = create_table || :foo
28
- name = table_name.to_s.capitalize
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 e = {:action => :save, :use_transactions => false}, StateMachine::Integrations::DataMapper.defaults
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 {|property| property.name == :status}
119
+ property = @resource.properties.detect {|p| p.name == :status}
118
120
  assert_not_nil property
119
121
 
120
- if Gem::Version.new(::DataMapper::VERSION) >= Gem::Version.new('1.0.0')
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 {|property| property.name == :status}
139
+ property = @resource.properties.detect {|p| p.name == :status}
138
140
  assert_not_nil property
139
141
 
140
- if Gem::Version.new(::DataMapper::VERSION) >= Gem::Version.new('1.0.0')
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
- record = @resource.new do |*args|
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
- record = @resource.new do |*args|
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 MachineWithColumnDefaultTest < BaseTestCase
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 /^Instance method "state\?" is already defined in DataMapperTest::Foo :state instance helpers, use generic helper instead.*\n$/, $stderr.string
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 test_should_not_output_warning_with_same_machine_name
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
- assert_equal '', $stderr.string
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
- exception = assert_raise(ArgumentError) { @record.state? }
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(::DataMapper::VERSION) >= Gem::Version.new('0.9.8')
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 e = {@resource.properties[:state] => 'idling'}, @record.dirty_attributes
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
603
- assert_equal e = {@resource.properties[:state] => 'parked'}, @record.original_attributes
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 e = {:state => 'parked'}, @record.original_values
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
614
- assert_equal e = {@resource.properties[:state] => 'parked'}, @record.original_attributes
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 e = {:state => 'parked'}, @record.original_values
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 e = {}, @record.dirty_attributes
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, :default => 'idling'
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 e = {@resource.properties[:status] => 'idling'}, @record.dirty_attributes
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
664
- assert_equal e = {@resource.properties[:status] => 'parked'}, @record.original_attributes
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 e = {:status => 'parked'}, @record.original_values
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
675
- assert_equal e = {@resource.properties[:status] => 'parked'}, @record.original_attributes
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 e = {:status => 'parked'}, @record.original_values
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, :default => 'idling'
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 e = {}, @record.dirty_attributes
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 e = {}, @record.dirty_attributes
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
717
- assert_equal e = {}, @record.original_attributes
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 e = {}, @record.original_values
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.3')
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 = [false]
852
- @machine.around_transition {|block| before_called = true; block.call; after_called[0] = true}
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[0]
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
- def setup
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(::DataMapper::VERSION) > Gem::Version.new('0.9.6')
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
- @record.valid?
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
- @record.valid?
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
- @record.valid?
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(::DataMapper::VERSION) >= Gem::Version.new('0.10.0')
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(::DataMapper::VERSION) > Gem::Version.new('0.9.6')
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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 test_should_not_call_after_transition_callback_if_requirements_do_not_match
1873
+ def test_should_not_call_around_transition_callback_if_requirements_do_not_match
1619
1874
  called = false
1620
1875
 
1621
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- observer = new_observer(@resource) do
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
- attributes = []
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
- observer = new_observer(@resource) do
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
- idling = @resource.create :state => 'idling'
2070
+ @resource.create :state => 'idling'
1817
2071
 
1818
2072
  assert_equal [parked], @resource.with_state(:parked)
1819
2073
  end