state_machine 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.gitignore +11 -0
  2. data/.travis.yml +16 -0
  3. data/.yardopts +5 -0
  4. data/Appraisals +260 -0
  5. data/CHANGELOG.rdoc +15 -0
  6. data/Gemfile +3 -0
  7. data/README.rdoc +156 -29
  8. data/Rakefile +31 -57
  9. data/gemfiles/active_model-3.0.0.gemfile +7 -0
  10. data/gemfiles/active_model-3.0.0.gemfile.lock +32 -0
  11. data/gemfiles/active_model-3.0.5.gemfile +7 -0
  12. data/gemfiles/active_model-3.0.5.gemfile.lock +32 -0
  13. data/gemfiles/active_record-2.0.0.gemfile +8 -0
  14. data/gemfiles/active_record-2.0.0.gemfile.lock +30 -0
  15. data/gemfiles/active_record-2.0.5.gemfile +8 -0
  16. data/gemfiles/active_record-2.0.5.gemfile.lock +30 -0
  17. data/gemfiles/active_record-2.1.0.gemfile +8 -0
  18. data/gemfiles/active_record-2.1.0.gemfile.lock +30 -0
  19. data/gemfiles/active_record-2.1.2.gemfile +8 -0
  20. data/gemfiles/active_record-2.1.2.gemfile.lock +30 -0
  21. data/gemfiles/active_record-2.2.3.gemfile +8 -0
  22. data/gemfiles/active_record-2.2.3.gemfile.lock +30 -0
  23. data/gemfiles/active_record-2.3.12.gemfile +8 -0
  24. data/gemfiles/active_record-2.3.12.gemfile.lock +30 -0
  25. data/gemfiles/active_record-3.0.0.gemfile +8 -0
  26. data/gemfiles/active_record-3.0.0.gemfile.lock +44 -0
  27. data/gemfiles/active_record-3.0.5.gemfile +8 -0
  28. data/gemfiles/active_record-3.0.5.gemfile.lock +43 -0
  29. data/gemfiles/data_mapper-0.10.2.gemfile +12 -0
  30. data/gemfiles/data_mapper-0.10.2.gemfile.lock +45 -0
  31. data/gemfiles/data_mapper-0.9.11.gemfile +12 -0
  32. data/gemfiles/data_mapper-0.9.11.gemfile.lock +47 -0
  33. data/gemfiles/data_mapper-0.9.4.gemfile +12 -0
  34. data/gemfiles/data_mapper-0.9.4.gemfile.lock +61 -0
  35. data/gemfiles/data_mapper-0.9.7.gemfile +12 -0
  36. data/gemfiles/data_mapper-0.9.7.gemfile.lock +57 -0
  37. data/gemfiles/data_mapper-1.0.0.gemfile +12 -0
  38. data/gemfiles/data_mapper-1.0.0.gemfile.lock +53 -0
  39. data/gemfiles/data_mapper-1.0.1.gemfile +12 -0
  40. data/gemfiles/data_mapper-1.0.1.gemfile.lock +53 -0
  41. data/gemfiles/data_mapper-1.0.2.gemfile +12 -0
  42. data/gemfiles/data_mapper-1.0.2.gemfile.lock +53 -0
  43. data/gemfiles/data_mapper-1.1.0.gemfile +12 -0
  44. data/gemfiles/data_mapper-1.1.0.gemfile.lock +51 -0
  45. data/gemfiles/default.gemfile +7 -0
  46. data/gemfiles/default.gemfile.lock +24 -0
  47. data/gemfiles/mongo_mapper-0.5.5.gemfile +8 -0
  48. data/gemfiles/mongo_mapper-0.5.5.gemfile.lock +33 -0
  49. data/gemfiles/mongo_mapper-0.5.8.gemfile +8 -0
  50. data/gemfiles/mongo_mapper-0.5.8.gemfile.lock +33 -0
  51. data/gemfiles/mongo_mapper-0.6.0.gemfile +8 -0
  52. data/gemfiles/mongo_mapper-0.6.0.gemfile.lock +33 -0
  53. data/gemfiles/mongo_mapper-0.6.10.gemfile +8 -0
  54. data/gemfiles/mongo_mapper-0.6.10.gemfile.lock +33 -0
  55. data/gemfiles/mongo_mapper-0.7.0.gemfile +8 -0
  56. data/gemfiles/mongo_mapper-0.7.0.gemfile.lock +33 -0
  57. data/gemfiles/mongo_mapper-0.7.5.gemfile +8 -0
  58. data/gemfiles/mongo_mapper-0.7.5.gemfile.lock +36 -0
  59. data/gemfiles/mongo_mapper-0.8.0.gemfile +10 -0
  60. data/gemfiles/mongo_mapper-0.8.0.gemfile.lock +40 -0
  61. data/gemfiles/mongo_mapper-0.8.3.gemfile +10 -0
  62. data/gemfiles/mongo_mapper-0.8.3.gemfile.lock +40 -0
  63. data/gemfiles/mongo_mapper-0.8.4.gemfile +8 -0
  64. data/gemfiles/mongo_mapper-0.8.4.gemfile.lock +38 -0
  65. data/gemfiles/mongo_mapper-0.8.6.gemfile +8 -0
  66. data/gemfiles/mongo_mapper-0.8.6.gemfile.lock +38 -0
  67. data/gemfiles/mongo_mapper-0.9.0.gemfile +7 -0
  68. data/gemfiles/mongo_mapper-0.9.0.gemfile.lock +41 -0
  69. data/gemfiles/mongoid-2.0.0.gemfile +7 -0
  70. data/gemfiles/mongoid-2.0.0.gemfile.lock +42 -0
  71. data/gemfiles/mongoid-2.1.4.gemfile +7 -0
  72. data/gemfiles/mongoid-2.1.4.gemfile.lock +40 -0
  73. data/gemfiles/sequel-2.11.0.gemfile +8 -0
  74. data/gemfiles/sequel-2.11.0.gemfile.lock +28 -0
  75. data/gemfiles/sequel-2.12.0.gemfile +8 -0
  76. data/gemfiles/sequel-2.12.0.gemfile.lock +28 -0
  77. data/gemfiles/sequel-2.8.0.gemfile +8 -0
  78. data/gemfiles/sequel-2.8.0.gemfile.lock +28 -0
  79. data/gemfiles/sequel-3.0.0.gemfile +8 -0
  80. data/gemfiles/sequel-3.0.0.gemfile.lock +28 -0
  81. data/gemfiles/sequel-3.13.0.gemfile +8 -0
  82. data/gemfiles/sequel-3.13.0.gemfile.lock +28 -0
  83. data/gemfiles/sequel-3.14.0.gemfile +8 -0
  84. data/gemfiles/sequel-3.14.0.gemfile.lock +28 -0
  85. data/gemfiles/sequel-3.23.0.gemfile +8 -0
  86. data/gemfiles/sequel-3.23.0.gemfile.lock +28 -0
  87. data/gemfiles/sequel-3.24.0.gemfile +8 -0
  88. data/gemfiles/sequel-3.24.0.gemfile.lock +28 -0
  89. data/lib/state_machine/event.rb +13 -90
  90. data/lib/state_machine/helper_module.rb +17 -0
  91. data/lib/state_machine/integrations/active_model.rb +35 -0
  92. data/lib/state_machine/integrations/active_record.rb +41 -2
  93. data/lib/state_machine/integrations/data_mapper.rb +17 -2
  94. data/lib/state_machine/integrations/mongo_mapper.rb +34 -7
  95. data/lib/state_machine/integrations/mongoid.rb +34 -26
  96. data/lib/state_machine/integrations/mongoid/versions.rb +29 -3
  97. data/lib/state_machine/integrations/sequel.rb +22 -72
  98. data/lib/state_machine/integrations/sequel/versions.rb +87 -6
  99. data/lib/state_machine/machine.rb +279 -19
  100. data/lib/state_machine/state.rb +2 -2
  101. data/lib/state_machine/state_context.rb +133 -0
  102. data/lib/state_machine/version.rb +3 -0
  103. data/state_machine.gemspec +22 -0
  104. data/test/test_helper.rb +1 -3
  105. data/test/unit/branch_test.rb +1 -3
  106. data/test/unit/event_collection_test.rb +3 -3
  107. data/test/unit/event_test.rb +1 -3
  108. data/test/unit/helper_module_test.rb +17 -0
  109. data/test/unit/integrations/active_model_test.rb +0 -4
  110. data/test/unit/integrations/active_record_test.rb +50 -9
  111. data/test/unit/integrations/data_mapper_test.rb +267 -253
  112. data/test/unit/integrations/mongo_mapper_test.rb +47 -15
  113. data/test/unit/integrations/mongoid_test.rb +50 -8
  114. data/test/unit/integrations/sequel_test.rb +10 -6
  115. data/test/unit/machine_test.rb +206 -25
  116. data/test/unit/state_context_test.rb +421 -0
  117. data/test/unit/state_test.rb +20 -3
  118. metadata +303 -128
  119. data/lib/state_machine/condition_proxy.rb +0 -94
  120. data/test/unit/condition_proxy_test.rb +0 -328
@@ -0,0 +1,3 @@
1
+ module StateMachine
2
+ VERSION = '1.0.2'
3
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'state_machine/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "state_machine"
6
+ s.version = StateMachine::VERSION
7
+ s.authors = ["Aaron Pfeifer"]
8
+ s.email = "aaron@pluginaweek.org"
9
+ s.homepage = "http://www.pluginaweek.org"
10
+ s.description = "Adds support for creating state machines for attributes on any Ruby class"
11
+ s.summary = "State machines for attributes"
12
+ s.require_paths = ["lib"]
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- test/*`.split("\n")
15
+ s.rdoc_options = %w(--line-numbers --inline-source --title state_machine --main README.rdoc)
16
+ s.extra_rdoc_files = %w(README.rdoc CHANGELOG.rdoc LICENSE)
17
+
18
+ s.add_development_dependency("rake")
19
+ s.add_development_dependency("rcov")
20
+ s.add_development_dependency("appraisal", "~> 0.3.8")
21
+ s.add_development_dependency("ruby-graphviz", "~> 1.0")
22
+ end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,2 @@
1
1
  require 'test/unit'
2
-
3
- $:.unshift(File.dirname(__FILE__) + '/../lib')
4
- require File.dirname(__FILE__) + '/../init'
2
+ require 'state_machine'
@@ -756,8 +756,6 @@ end
756
756
 
757
757
  begin
758
758
  # Load library
759
- require 'rubygems'
760
- gem 'ruby-graphviz', '>=0.9.0'
761
759
  require 'graphviz'
762
760
 
763
761
  class BranchDrawingTest < Test::Unit::TestCase
@@ -887,4 +885,4 @@ begin
887
885
  end
888
886
  rescue LoadError
889
887
  $stderr.puts 'Skipping GraphViz StateMachine::Branch tests. `gem install ruby-graphviz` >= v0.9.0 and try again.'
890
- end
888
+ end unless ENV['TRAVIS']
@@ -127,12 +127,12 @@ class EventCollectionWithMultipleEventsTest < Test::Unit::TestCase
127
127
  @events = StateMachine::EventCollection.new(@machine)
128
128
 
129
129
  @machine.state :first_gear
130
- @machine.event :park, :shift_down
130
+ @park, @shift_down = @machine.event :park, :shift_down
131
131
 
132
- @events << @park = StateMachine::Event.new(@machine, :park)
132
+ @events << @park
133
133
  @park.transition :first_gear => :parked
134
134
 
135
- @events << @shift_down = StateMachine::Event.new(@machine, :shift_down)
135
+ @events << @shift_down
136
136
  @shift_down.transition :first_gear => :parked
137
137
 
138
138
  @machine.events.concat(@events)
@@ -950,8 +950,6 @@ end
950
950
 
951
951
  begin
952
952
  # Load library
953
- require 'rubygems'
954
- gem 'ruby-graphviz', '>=0.9.0'
955
953
  require 'graphviz'
956
954
 
957
955
  class EventDrawingTest < Test::Unit::TestCase
@@ -982,4 +980,4 @@ begin
982
980
  end
983
981
  rescue LoadError
984
982
  $stderr.puts 'Skipping GraphViz StateMachine::Event tests. `gem install ruby-graphviz` >= v0.9.0 and try again.'
985
- end
983
+ end unless ENV['TRAVIS']
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class HelperModuleTest < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachine::Machine.new(@klass)
7
+ @helper_module = StateMachine::HelperModule.new(@machine, :instance)
8
+ end
9
+
10
+ def test_should_not_have_a_name
11
+ assert_equal '', @helper_module.name.to_s
12
+ end
13
+
14
+ def test_should_provide_human_readable_to_s
15
+ assert_equal "#{@klass} :state instance helpers", @helper_module.to_s
16
+ end
17
+ end
@@ -1,9 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
- # Load library
4
- require 'rubygems'
5
-
6
- gem 'activemodel', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=3.0.0.beta'
7
3
  require 'active_model'
8
4
  require 'active_model/observing'
9
5
  require 'active_support/all'
@@ -1,10 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
- # Load library
4
- require 'rubygems'
5
-
6
- gem 'i18n', '<0.5' if ENV['VERSION'] && ENV['VERSION'] >= '2.3.5' && ENV['VERSION'] < '3.0.0'
7
- gem 'activerecord', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=2.0.0'
8
3
  require 'active_record'
9
4
 
10
5
  FIXTURES_ROOT = File.dirname(__FILE__) + '/../../fixtures/'
@@ -359,6 +354,33 @@ module ActiveRecordTest
359
354
  end
360
355
  end
361
356
 
357
+ class MachineWithConflictingStateNameTest < BaseTestCase
358
+ def setup
359
+ require 'stringio'
360
+ @original_stderr, $stderr = $stderr, StringIO.new
361
+
362
+ @model = new_model
363
+ end
364
+
365
+ def test_should_output_warning_with_same_machine_name
366
+ @machine = StateMachine::Machine.new(@model)
367
+ @machine.state :state
368
+
369
+ assert_equal "Instance method \"state?\" is already defined in ActiveRecordTest::Foo, use generic helper instead.\n", $stderr.string
370
+ end
371
+
372
+ def test_should_output_warning_with_same_machine_attribute
373
+ @machine = StateMachine::Machine.new(@model, :public_state, :attribute => :state)
374
+ @machine.state :state
375
+
376
+ assert_equal "Instance method \"state?\" is already defined in ActiveRecordTest::Foo, use generic helper instead.\n", $stderr.string
377
+ end
378
+
379
+ def teardown
380
+ $stderr = @original_stderr
381
+ end
382
+ end
383
+
362
384
  class MachineWithColumnStateAttributeTest < BaseTestCase
363
385
  def setup
364
386
  @model = new_model
@@ -489,6 +511,25 @@ module ActiveRecordTest
489
511
  end
490
512
  end
491
513
 
514
+ class MachineWithCustomAttributeTest < BaseTestCase
515
+ def setup
516
+ require 'stringio'
517
+ @original_stderr, $stderr = $stderr, StringIO.new
518
+
519
+ @model = new_model
520
+ @machine = StateMachine::Machine.new(@model, :public_state, :attribute => :state)
521
+ @record = @model.new
522
+ end
523
+
524
+ def test_should_not_delegate_attribute_predicate_with_different_attribute
525
+ assert_raise(ArgumentError) { @record.public_state? }
526
+ end
527
+
528
+ def teardown
529
+ $stderr = @original_stderr
530
+ end
531
+ end
532
+
492
533
  class MachineWithInitializedStateTest < BaseTestCase
493
534
  def setup
494
535
  @model = new_model
@@ -710,7 +751,7 @@ module ActiveRecordTest
710
751
  end
711
752
  end
712
753
  else
713
- $stderr.puts 'Skipping ActiveRecord Dirty tests. `gem install active_record` >= v2.1.0 and try again.'
754
+ $stderr.puts 'Skipping ActiveRecord Dirty tests.'
714
755
  end
715
756
 
716
757
  class MachineWithoutTransactionsTest < BaseTestCase
@@ -1828,7 +1869,7 @@ module ActiveRecordTest
1828
1869
  end
1829
1870
  end
1830
1871
  else
1831
- $stderr.puts 'Skipping ActiveRecord Scope tests. `gem install active_record` >= v2.1.0 and try again.'
1872
+ $stderr.puts 'Skipping ActiveRecord Scope tests.'
1832
1873
  end
1833
1874
 
1834
1875
  if ActiveRecord.const_defined?(:Relation)
@@ -1849,7 +1890,7 @@ module ActiveRecordTest
1849
1890
  end
1850
1891
  end
1851
1892
  else
1852
- $stderr.puts 'Skipping ActiveRecord Default Scope tests. `gem install active_record` >= v3.0.0 and try again.'
1893
+ $stderr.puts 'Skipping ActiveRecord Default Scope tests.'
1853
1894
  end
1854
1895
 
1855
1896
  if Object.const_defined?(:I18n)
@@ -2016,6 +2057,6 @@ module ActiveRecordTest
2016
2057
  end
2017
2058
  end
2018
2059
  else
2019
- $stderr.puts 'Skipping ActiveRecord I18n tests. `gem install active_record` >= v2.2.0 and try again.'
2060
+ $stderr.puts 'Skipping ActiveRecord I18n tests.'
2020
2061
  end
2021
2062
  end
@@ -1,14 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
- # Load library
4
- require 'rubygems'
5
-
6
- gem 'dm-core', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=0.9.4'
7
3
  require 'dm-core'
8
4
  require 'dm-core/version' unless defined?(::DataMapper::VERSION)
5
+ require 'dm-observer'
9
6
 
10
7
  if Gem::Version.new(::DataMapper::VERSION) >= Gem::Version.new('0.10.3')
11
- gem 'dm-migrations', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=0.10.3'
12
8
  require 'dm-migrations'
13
9
  end
14
10
 
@@ -327,6 +323,33 @@ module DataMapperTest
327
323
  end
328
324
  end
329
325
 
326
+ class MachineWithConflictingStateNameTest < BaseTestCase
327
+ def setup
328
+ require 'stringio'
329
+ @original_stderr, $stderr = $stderr, StringIO.new
330
+
331
+ @resource = new_resource
332
+ end
333
+
334
+ def test_should_output_warning_with_same_machine_name
335
+ @machine = StateMachine::Machine.new(@resource)
336
+ @machine.state :state
337
+
338
+ assert_equal "Instance method \"state?\" is already defined in DataMapperTest::Foo :state instance helpers, use generic helper instead.\n", $stderr.string
339
+ end
340
+
341
+ def test_should_not_output_warning_with_same_machine_name
342
+ @machine = StateMachine::Machine.new(@resource, :public_state, :attribute => :state)
343
+ @machine.state :state
344
+
345
+ assert_equal '', $stderr.string
346
+ end
347
+
348
+ def teardown
349
+ $stderr = @original_stderr
350
+ end
351
+ end
352
+
330
353
  class MachineWithColumnStateAttributeTest < BaseTestCase
331
354
  def setup
332
355
  @resource = new_resource
@@ -726,7 +749,6 @@ module DataMapperTest
726
749
 
727
750
  begin
728
751
  if Gem::Version.new(::DataMapper::VERSION) >= Gem::Version.new('0.10.3')
729
- gem 'dm-transactions', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=0.10.3'
730
752
  require 'dm-transactions'
731
753
  end
732
754
 
@@ -755,7 +777,7 @@ module DataMapperTest
755
777
  end
756
778
  end
757
779
  rescue LoadError
758
- $stderr.puts "Skipping DataMapper Transaction tests. `gem install dm-transactions#{" -v #{ENV['VERSION']}" if ENV['VERSION']}` and try again."
780
+ $stderr.puts "Skipping DataMapper Transaction tests."
759
781
  end
760
782
 
761
783
  class MachineWithCallbacksTest < BaseTestCase
@@ -983,7 +1005,6 @@ module DataMapperTest
983
1005
  end
984
1006
 
985
1007
  begin
986
- gem 'dm-validations', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=0.9.4'
987
1008
  require 'dm-validations'
988
1009
 
989
1010
  class MachineWithValidationsTest < BaseTestCase
@@ -1462,310 +1483,303 @@ module DataMapperTest
1462
1483
  end
1463
1484
  end
1464
1485
  rescue LoadError
1465
- $stderr.puts "Skipping DataMapper Validation tests. `gem install dm-validations#{" -v #{ENV['VERSION']}" if ENV['VERSION']}` and try again."
1486
+ $stderr.puts "Skipping DataMapper Validation tests."
1466
1487
  end
1467
1488
 
1468
- begin
1469
- gem 'dm-observer', ENV['VERSION'] ? "=#{ENV['VERSION']}" : '>=0.9.4'
1470
- require 'dm-observer'
1489
+ class MachineWithObserversTest < BaseTestCase
1490
+ def setup
1491
+ @resource = new_resource
1492
+ @machine = StateMachine::Machine.new(@resource)
1493
+ @machine.state :parked, :idling
1494
+ @machine.event :ignite
1495
+ @record = @resource.new(:state => 'parked')
1496
+ @transition = StateMachine::Transition.new(@record, @machine, :ignite, :parked, :idling)
1497
+ end
1471
1498
 
1472
- class MachineWithObserversTest < BaseTestCase
1473
- def setup
1474
- @resource = new_resource
1475
- @machine = StateMachine::Machine.new(@resource)
1476
- @machine.state :parked, :idling
1477
- @machine.event :ignite
1478
- @record = @resource.new(:state => 'parked')
1479
- @transition = StateMachine::Transition.new(@record, @machine, :ignite, :parked, :idling)
1480
- end
1499
+ def test_should_provide_matcher_helpers
1500
+ matchers = []
1481
1501
 
1482
- def test_should_provide_matcher_helpers
1483
- matchers = []
1484
-
1485
- new_observer(@resource) do
1486
- matchers = [all, any, same]
1487
- end
1488
-
1489
- assert_equal [StateMachine::AllMatcher.instance, StateMachine::AllMatcher.instance, StateMachine::LoopbackMatcher.instance], matchers
1502
+ new_observer(@resource) do
1503
+ matchers = [all, any, same]
1490
1504
  end
1491
1505
 
1492
- def test_should_call_before_transition_callback_if_requirements_match
1493
- called = false
1494
-
1495
- observer = new_observer(@resource) do
1496
- before_transition :from => :parked do
1497
- called = true
1498
- end
1506
+ assert_equal [StateMachine::AllMatcher.instance, StateMachine::AllMatcher.instance, StateMachine::LoopbackMatcher.instance], matchers
1507
+ end
1508
+
1509
+ def test_should_call_before_transition_callback_if_requirements_match
1510
+ called = false
1511
+
1512
+ observer = new_observer(@resource) do
1513
+ before_transition :from => :parked do
1514
+ called = true
1499
1515
  end
1500
-
1501
- @transition.perform
1502
- assert called
1503
1516
  end
1504
1517
 
1505
- def test_should_not_call_before_transition_callback_if_requirements_do_not_match
1506
- called = false
1507
-
1508
- observer = new_observer(@resource) do
1509
- before_transition :from => :idling do
1510
- called = true
1511
- end
1518
+ @transition.perform
1519
+ assert called
1520
+ end
1521
+
1522
+ def test_should_not_call_before_transition_callback_if_requirements_do_not_match
1523
+ called = false
1524
+
1525
+ observer = new_observer(@resource) do
1526
+ before_transition :from => :idling do
1527
+ called = true
1512
1528
  end
1513
-
1514
- @transition.perform
1515
- assert !called
1516
1529
  end
1517
1530
 
1518
- def test_should_pass_transition_to_before_callbacks
1519
- callback_args = nil
1520
-
1521
- observer = new_observer(@resource) do
1522
- before_transition do |*args|
1523
- callback_args = args
1524
- end
1531
+ @transition.perform
1532
+ assert !called
1533
+ end
1534
+
1535
+ def test_should_pass_transition_to_before_callbacks
1536
+ callback_args = nil
1537
+
1538
+ observer = new_observer(@resource) do
1539
+ before_transition do |*args|
1540
+ callback_args = args
1525
1541
  end
1526
-
1527
- @transition.perform
1528
- assert_equal [@transition], callback_args
1529
1542
  end
1530
1543
 
1531
- def test_should_call_after_transition_callback_if_requirements_match
1532
- called = false
1533
-
1534
- observer = new_observer(@resource) do
1535
- after_transition :from => :parked do
1536
- called = true
1537
- end
1544
+ @transition.perform
1545
+ assert_equal [@transition], callback_args
1546
+ end
1547
+
1548
+ def test_should_call_after_transition_callback_if_requirements_match
1549
+ called = false
1550
+
1551
+ observer = new_observer(@resource) do
1552
+ after_transition :from => :parked do
1553
+ called = true
1538
1554
  end
1539
-
1540
- @transition.perform
1541
- assert called
1542
1555
  end
1543
1556
 
1544
- def test_should_not_call_after_transition_callback_if_requirements_do_not_match
1545
- called = false
1546
-
1547
- observer = new_observer(@resource) do
1548
- after_transition :from => :idling do
1549
- called = true
1550
- end
1557
+ @transition.perform
1558
+ assert called
1559
+ end
1560
+
1561
+ def test_should_not_call_after_transition_callback_if_requirements_do_not_match
1562
+ called = false
1563
+
1564
+ observer = new_observer(@resource) do
1565
+ after_transition :from => :idling do
1566
+ called = true
1551
1567
  end
1552
-
1553
- @transition.perform
1554
- assert !called
1555
1568
  end
1556
1569
 
1557
- def test_should_pass_transition_to_after_callbacks
1558
- callback_args = nil
1559
-
1560
- observer = new_observer(@resource) do
1561
- after_transition do |*args|
1562
- callback_args = args
1563
- end
1570
+ @transition.perform
1571
+ assert !called
1572
+ end
1573
+
1574
+ def test_should_pass_transition_to_after_callbacks
1575
+ callback_args = nil
1576
+
1577
+ observer = new_observer(@resource) do
1578
+ after_transition do |*args|
1579
+ callback_args = args
1564
1580
  end
1565
-
1566
- @transition.perform
1567
- assert_equal [@transition], callback_args
1568
1581
  end
1569
1582
 
1570
- def test_should_call_around_transition_callback_if_requirements_match
1571
- called = false
1572
-
1573
- observer = new_observer(@resource) do
1574
- around_transition :from => :parked do |block|
1575
- called = true
1576
- block.call
1577
- end
1583
+ @transition.perform
1584
+ assert_equal [@transition], callback_args
1585
+ end
1586
+
1587
+ def test_should_call_around_transition_callback_if_requirements_match
1588
+ called = false
1589
+
1590
+ observer = new_observer(@resource) do
1591
+ around_transition :from => :parked do |block|
1592
+ called = true
1593
+ block.call
1578
1594
  end
1579
-
1580
- @transition.perform
1581
- assert called
1582
1595
  end
1583
1596
 
1584
- def test_should_not_call_after_transition_callback_if_requirements_do_not_match
1585
- called = false
1586
-
1587
- observer = new_observer(@resource) do
1588
- around_transition :from => :idling do |block|
1589
- called = true
1590
- block.call
1591
- end
1597
+ @transition.perform
1598
+ assert called
1599
+ end
1600
+
1601
+ def test_should_not_call_after_transition_callback_if_requirements_do_not_match
1602
+ called = false
1603
+
1604
+ observer = new_observer(@resource) do
1605
+ around_transition :from => :idling do |block|
1606
+ called = true
1607
+ block.call
1592
1608
  end
1593
-
1594
- @transition.perform
1595
- assert !called
1596
1609
  end
1597
1610
 
1598
- def test_should_pass_transition_to_around_callbacks
1599
- callback_args = nil
1600
-
1601
- observer = new_observer(@resource) do
1602
- around_transition do |*args|
1603
- block = args.pop
1604
- callback_args = args
1605
- block.call
1606
- end
1611
+ @transition.perform
1612
+ assert !called
1613
+ end
1614
+
1615
+ def test_should_pass_transition_to_around_callbacks
1616
+ callback_args = nil
1617
+
1618
+ observer = new_observer(@resource) do
1619
+ around_transition do |*args|
1620
+ block = args.pop
1621
+ callback_args = args
1622
+ block.call
1607
1623
  end
1608
-
1609
- @transition.perform
1610
- assert_equal [@transition], callback_args
1611
1624
  end
1612
1625
 
1613
- def test_should_call_failure_callback_if_requirements_match
1614
- @resource.before(:create) { throw :halt }
1615
-
1616
- called = false
1617
-
1618
- observer = new_observer(@resource) do
1619
- after_transition_failure :on => :ignite do
1620
- called = true
1621
- end
1626
+ @transition.perform
1627
+ assert_equal [@transition], callback_args
1628
+ end
1629
+
1630
+ def test_should_call_failure_callback_if_requirements_match
1631
+ @resource.before(:create) { throw :halt }
1632
+
1633
+ called = false
1634
+
1635
+ observer = new_observer(@resource) do
1636
+ after_transition_failure :on => :ignite do
1637
+ called = true
1622
1638
  end
1623
-
1624
- @transition.perform
1625
- assert called
1626
1639
  end
1627
1640
 
1628
- def test_should_not_call_failure_callback_if_requirements_do_not_match
1629
- @resource.before(:create) { throw :halt }
1630
-
1631
- called = false
1632
-
1633
- observer = new_observer(@resource) do
1634
- after_transition_failure :on => :park do
1635
- called = true
1636
- end
1641
+ @transition.perform
1642
+ assert called
1643
+ end
1644
+
1645
+ def test_should_not_call_failure_callback_if_requirements_do_not_match
1646
+ @resource.before(:create) { throw :halt }
1647
+
1648
+ called = false
1649
+
1650
+ observer = new_observer(@resource) do
1651
+ after_transition_failure :on => :park do
1652
+ called = true
1637
1653
  end
1638
-
1639
- @transition.perform
1640
- assert !called
1641
1654
  end
1642
1655
 
1643
- def test_should_pass_transition_to_failure_callbacks
1644
- @resource.before(:create) { throw :halt }
1645
-
1646
- callback_args = nil
1647
-
1648
- observer = new_observer(@resource) do
1649
- after_transition_failure do |*args|
1650
- callback_args = args
1651
- end
1656
+ @transition.perform
1657
+ assert !called
1658
+ end
1659
+
1660
+ def test_should_pass_transition_to_failure_callbacks
1661
+ @resource.before(:create) { throw :halt }
1662
+
1663
+ callback_args = nil
1664
+
1665
+ observer = new_observer(@resource) do
1666
+ after_transition_failure do |*args|
1667
+ callback_args = args
1652
1668
  end
1653
-
1654
- @transition.perform
1655
- assert_equal [@transition], callback_args
1656
1669
  end
1657
1670
 
1658
- def test_should_raise_exception_if_targeting_invalid_machine
1659
- assert_raise(RUBY_VERSION < '1.9' ? IndexError : KeyError) do
1660
- new_observer(@resource) do
1661
- before_transition :invalid, :from => :parked do
1662
- end
1671
+ @transition.perform
1672
+ assert_equal [@transition], callback_args
1673
+ end
1674
+
1675
+ def test_should_raise_exception_if_targeting_invalid_machine
1676
+ assert_raise(RUBY_VERSION < '1.9' ? IndexError : KeyError) do
1677
+ new_observer(@resource) do
1678
+ before_transition :invalid, :from => :parked do
1663
1679
  end
1664
1680
  end
1665
1681
  end
1682
+ end
1683
+
1684
+ def test_should_allow_targeting_specific_machine
1685
+ @second_machine = StateMachine::Machine.new(@resource, :status, :namespace => 'alarm')
1686
+ @resource.auto_migrate!
1666
1687
 
1667
- def test_should_allow_targeting_specific_machine
1668
- @second_machine = StateMachine::Machine.new(@resource, :status, :namespace => 'alarm')
1669
- @resource.auto_migrate!
1670
-
1671
- called_state = false
1672
- called_status = false
1673
-
1674
- observer = new_observer(@resource) do
1675
- before_transition :state, :from => :parked do
1676
- called_state = true
1677
- end
1678
-
1679
- before_transition :status, :from => :parked do
1680
- called_status = true
1681
- end
1688
+ called_state = false
1689
+ called_status = false
1690
+
1691
+ observer = new_observer(@resource) do
1692
+ before_transition :state, :from => :parked do
1693
+ called_state = true
1682
1694
  end
1683
1695
 
1684
- @transition.perform
1685
-
1686
- assert called_state
1687
- assert !called_status
1696
+ before_transition :status, :from => :parked do
1697
+ called_status = true
1698
+ end
1688
1699
  end
1689
1700
 
1690
- def test_should_allow_targeting_multiple_specific_machines
1691
- @second_machine = StateMachine::Machine.new(@resource, :status, :namespace => 'alarm')
1692
- @second_machine.state :parked, :idling
1693
- @second_machine.event :ignite
1694
- @resource.auto_migrate!
1695
-
1696
- called_attribute = nil
1697
-
1698
- attributes = []
1699
- observer = new_observer(@resource) do
1700
- before_transition :state, :status, :from => :parked do |transition|
1701
- called_attribute = transition.attribute
1702
- end
1701
+ @transition.perform
1702
+
1703
+ assert called_state
1704
+ assert !called_status
1705
+ end
1706
+
1707
+ def test_should_allow_targeting_multiple_specific_machines
1708
+ @second_machine = StateMachine::Machine.new(@resource, :status, :namespace => 'alarm')
1709
+ @second_machine.state :parked, :idling
1710
+ @second_machine.event :ignite
1711
+ @resource.auto_migrate!
1712
+
1713
+ called_attribute = nil
1714
+
1715
+ attributes = []
1716
+ observer = new_observer(@resource) do
1717
+ before_transition :state, :status, :from => :parked do |transition|
1718
+ called_attribute = transition.attribute
1703
1719
  end
1704
-
1705
- @transition.perform
1706
- assert_equal :state, called_attribute
1707
-
1708
- StateMachine::Transition.new(@record, @second_machine, :ignite, :parked, :idling).perform
1709
- assert_equal :status, called_attribute
1710
1720
  end
1721
+
1722
+ @transition.perform
1723
+ assert_equal :state, called_attribute
1724
+
1725
+ StateMachine::Transition.new(@record, @second_machine, :ignite, :parked, :idling).perform
1726
+ assert_equal :status, called_attribute
1711
1727
  end
1712
-
1713
- class MachineWithMixedCallbacksTest < BaseTestCase
1714
- def setup
1715
- @resource = new_resource
1716
- @machine = StateMachine::Machine.new(@resource)
1717
- @machine.state :parked, :idling
1718
- @machine.event :ignite
1719
- @record = @resource.new(:state => 'parked')
1720
- @transition = StateMachine::Transition.new(@record, @machine, :ignite, :parked, :idling)
1721
-
1722
- @notifications = notifications = []
1723
-
1724
- # Create callbacks
1725
- @machine.before_transition {notifications << :callback_before_transition}
1726
- @machine.after_transition {notifications << :callback_after_transition}
1727
- @machine.around_transition do |block|
1728
- notifications << :callback_around_before_transition
1729
- block.call
1730
- notifications << :callback_around_after_transition
1728
+ end
1729
+
1730
+ class MachineWithMixedCallbacksTest < BaseTestCase
1731
+ def setup
1732
+ @resource = new_resource
1733
+ @machine = StateMachine::Machine.new(@resource)
1734
+ @machine.state :parked, :idling
1735
+ @machine.event :ignite
1736
+ @record = @resource.new(:state => 'parked')
1737
+ @transition = StateMachine::Transition.new(@record, @machine, :ignite, :parked, :idling)
1738
+
1739
+ @notifications = notifications = []
1740
+
1741
+ # Create callbacks
1742
+ @machine.before_transition {notifications << :callback_before_transition}
1743
+ @machine.after_transition {notifications << :callback_after_transition}
1744
+ @machine.around_transition do |block|
1745
+ notifications << :callback_around_before_transition
1746
+ block.call
1747
+ notifications << :callback_around_after_transition
1748
+ end
1749
+
1750
+ observer = new_observer(@resource) do
1751
+ before_transition do
1752
+ notifications << :observer_before_transition
1731
1753
  end
1732
1754
 
1733
- observer = new_observer(@resource) do
1734
- before_transition do
1735
- notifications << :observer_before_transition
1736
- end
1737
-
1738
- after_transition do
1739
- notifications << :observer_after_transition
1740
- end
1741
-
1742
- around_transition do |block|
1743
- notifications << :observer_around_before_transition
1744
- block.call
1745
- notifications << :observer_around_after_transition
1746
- end
1755
+ after_transition do
1756
+ notifications << :observer_after_transition
1747
1757
  end
1748
1758
 
1749
- @transition.perform
1750
- end
1751
-
1752
- def test_should_invoke_callbacks_in_specific_order
1753
- expected = [
1754
- :callback_before_transition,
1755
- :callback_around_before_transition,
1756
- :observer_before_transition,
1757
- :observer_around_before_transition,
1758
- :observer_around_after_transition,
1759
- :callback_around_after_transition,
1760
- :callback_after_transition,
1761
- :observer_after_transition
1762
- ]
1763
-
1764
- assert_equal expected, @notifications
1759
+ around_transition do |block|
1760
+ notifications << :observer_around_before_transition
1761
+ block.call
1762
+ notifications << :observer_around_after_transition
1763
+ end
1765
1764
  end
1765
+
1766
+ @transition.perform
1767
+ end
1768
+
1769
+ def test_should_invoke_callbacks_in_specific_order
1770
+ expected = [
1771
+ :callback_before_transition,
1772
+ :callback_around_before_transition,
1773
+ :observer_before_transition,
1774
+ :observer_around_before_transition,
1775
+ :observer_around_after_transition,
1776
+ :callback_around_after_transition,
1777
+ :callback_after_transition,
1778
+ :observer_after_transition
1779
+ ]
1780
+
1781
+ assert_equal expected, @notifications
1766
1782
  end
1767
- rescue LoadError
1768
- $stderr.puts "Skipping DataMapper Observer tests. `gem install dm-observer#{" -v #{ENV['VERSION']}" if ENV['VERSION']}` and try again."
1769
1783
  end
1770
1784
 
1771
1785
  class MachineWithScopesTest < BaseTestCase