enum_state_machine 0.1.1 → 0.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/enum_state_machine.gemspec +4 -6
  3. data/lib/enum_state_machine/integrations/active_model.rb +23 -24
  4. data/lib/enum_state_machine/version.rb +1 -1
  5. data/test/functional/state_machine_test.rb +29 -27
  6. data/test/test_helper.rb +13 -1
  7. data/test/unit/assertions_test.rb +10 -4
  8. data/test/unit/branch_test.rb +65 -52
  9. data/test/unit/callback_test.rb +29 -29
  10. data/test/unit/error_test.rb +7 -5
  11. data/test/unit/eval_helpers_test.rb +2 -2
  12. data/test/unit/event_collection_test.rb +10 -10
  13. data/test/unit/event_test.rb +56 -55
  14. data/test/unit/graph_test.rb +6 -6
  15. data/test/unit/helper_module_test.rb +1 -1
  16. data/test/unit/integrations/active_model_test.rb +4 -4
  17. data/test/unit/integrations/active_record_test.rb +7 -7
  18. data/test/unit/integrations/base_test.rb +2 -2
  19. data/test/unit/integrations_test.rb +3 -3
  20. data/test/unit/invalid_event_test.rb +1 -1
  21. data/test/unit/invalid_parallel_transition_test.rb +1 -1
  22. data/test/unit/invalid_transition_test.rb +3 -3
  23. data/test/unit/machine_collection_test.rb +22 -18
  24. data/test/unit/machine_test.rb +123 -110
  25. data/test/unit/matcher_helpers_test.rb +3 -3
  26. data/test/unit/matcher_test.rb +7 -7
  27. data/test/unit/node_collection_test.rb +24 -22
  28. data/test/unit/path_collection_test.rb +17 -11
  29. data/test/unit/path_test.rb +16 -14
  30. data/test/unit/state_collection_test.rb +12 -12
  31. data/test/unit/state_context_test.rb +23 -21
  32. data/test/unit/state_enum_test.rb +1 -1
  33. data/test/unit/state_machine_test.rb +2 -2
  34. data/test/unit/state_test.rb +55 -53
  35. data/test/unit/transition_collection_test.rb +47 -45
  36. data/test/unit/transition_test.rb +53 -45
  37. metadata +14 -50
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5660c6ced26751d7ebd07759021f013bd931e97
4
- data.tar.gz: 0737ed7e96f4fc0f3d97241a0464e519bc24c12e
3
+ metadata.gz: 71e6b42441dcc75052d13fa17238af8ae8528e88
4
+ data.tar.gz: bb40a059b58ce675d7e5e51cd1885a73f3d43780
5
5
  SHA512:
6
- metadata.gz: a7cf04a5fee94ca45e3cc371558ddd8be3a4f5e1c9c0b4c14ca866e854bd3f2c243b827de3f0efcaa7920811c253fde221dc32fd8f3c106c55b9ffcd707c8e93
7
- data.tar.gz: bcb2635a67328258a1ef41c5a9372a254c5c7ee8abdef7c8e8ab43582ad20246c754f29a85a2023813de1ced74a191f9cf38363711c1d7e089ecae69a60ec9ab
6
+ metadata.gz: 6ca5e94e9e546fd839512dfe2f539a87b89ef06bfd0bb1302ce096a60b4ac468a47514d0c704b497d852b19ebcbbc94d497b0aebb6ceb31d6cebb169481eb9bf
7
+ data.tar.gz: a77f9f4cf047ec6646e171580200fc66590f4592333b1a5c4c0b735fae1737ee7249f0b6b7694ff0e05d9d40d9e758bb7a0a86f002c9746353c89da97023cc1d
@@ -17,19 +17,17 @@ Gem::Specification.new do |s|
17
17
  s.extra_rdoc_files = %w(README.md CHANGELOG.md LICENSE)
18
18
  s.license = 'MIT'
19
19
 
20
- s.add_dependency "rails", "~> 4.0.13"
20
+ s.add_dependency "rails", "~> 4.0", "< 4.2"
21
21
 
22
- s.add_dependency "activemodel", "~> 4.0.5"
23
- s.add_dependency "activerecord", "~> 4.0.5"
24
22
  s.add_dependency "activerecord-deprecated_finders", "~> 1.0.3"
25
23
  s.add_dependency "protected_attributes", "~> 1.0.7"
26
- s.add_dependency "rails-observers", "~> 0.1.2"
24
+ #s.add_dependency "rails-observers", "~> 0.1.2"
27
25
  s.add_dependency "power_enum", "~> 2.7"
28
26
 
29
27
  s.add_development_dependency "rake"
30
- s.add_development_dependency "minitest", "~> 4.7.5"
28
+ s.add_development_dependency "minitest", "~> 5.1"
31
29
  s.add_development_dependency "simplecov"
32
30
  s.add_development_dependency "yard"
33
31
  s.add_development_dependency "sqlite3", "~> 1.3.9"
34
- s.add_development_dependency "ruby-graphviz", "~> 1.0.9"
32
+ s.add_development_dependency "ruby-graphviz"
35
33
  end
@@ -386,16 +386,21 @@ module EnumStateMachine
386
386
  end
387
387
  end
388
388
 
389
- # Describes the current validation errors on the given object. If none
389
+ # Describe the current validation errors on the given object. If none
390
390
  # are specific, then the default error is interpeted as a "halt".
391
391
  def errors_for(object)
392
392
  object.errors.empty? ? 'Transition halted' : object.errors.full_messages * ', '
393
393
  end
394
394
 
395
- # Resets any errors previously added when invalidating the given object
395
+ # Reset any errors previously added when invalidating the given object.
396
396
  def reset(object)
397
397
  object.errors.clear if supports_validations?
398
398
  end
399
+
400
+ # Run state events around the object's validation process.
401
+ def around_validation(object)
402
+ object.class.state_machines.transitions(object, action, :after => false).perform { yield }
403
+ end
399
404
 
400
405
  protected
401
406
  # Whether observers are supported in the integration. Only true if
@@ -417,23 +422,22 @@ module EnumStateMachine
417
422
  false
418
423
  end
419
424
 
420
- # Gets the terminator to use for callbacks
425
+ # Get the terminator to use for callbacks.
421
426
  def callback_terminator
422
427
  @terminator ||= lambda {|result| result == false}
423
428
  end
424
429
 
425
- # Determines the base scope to use when looking up translations
430
+ # Determine the base scope to use when looking up translations.
426
431
  def i18n_scope(klass)
427
432
  klass.i18n_scope
428
433
  end
429
434
 
430
- # The default options to use when generating messages for validation
431
- # errors
435
+ # The default options to use when generating messages for validation errors.
432
436
  def default_error_message_options(object, attribute, message)
433
437
  {:message => @messages[message]}
434
438
  end
435
439
 
436
- # Translates the given key / value combo. Translation keys are looked
440
+ # Translate the given key / value combo. Translation keys are looked
437
441
  # up in the following order:
438
442
  # * <tt>#{i18n_scope}.state_machines.#{model_name}.#{machine_name}.#{plural_key}.#{value}</tt>
439
443
  # * <tt>#{i18n_scope}.state_machines.#{model_name}.#{plural_key}.#{value}</tt>
@@ -459,7 +463,7 @@ module EnumStateMachine
459
463
  klass.lookup_ancestors
460
464
  end
461
465
 
462
- # Initializes class-level extensions and defaults for this machine
466
+ # Initialize class-level extensions and defaults for this machine.
463
467
  def after_initialize
464
468
  super
465
469
  load_locale
@@ -467,18 +471,18 @@ module EnumStateMachine
467
471
  add_default_callbacks
468
472
  end
469
473
 
470
- # Loads any locale files needed for translating validation errors
474
+ # Load any locale files needed for translating validation errors.
471
475
  def load_locale
472
476
  I18n.load_path.unshift(@integration.locale_path) unless I18n.load_path.include?(@integration.locale_path)
473
477
  end
474
478
 
475
- # Loads extensions to ActiveModel's Observers
479
+ # Load extensions to ActiveModel's Observers.
476
480
  def load_observer_extensions
477
481
  require 'enum_state_machine/integrations/active_model/observer'
478
482
  require 'enum_state_machine/integrations/active_model/observer_update'
479
483
  end
480
484
 
481
- # Adds a set of default callbacks that utilize the Observer extensions
485
+ # Add a set of default callbacks that utilize the Observer extensions.
482
486
  def add_default_callbacks
483
487
  if supports_observers?
484
488
  callbacks[:before] << Callback.new(:before) {|object, transition| notify(:before, object, transition)}
@@ -487,7 +491,7 @@ module EnumStateMachine
487
491
  end
488
492
  end
489
493
 
490
- # Skips defining reader/writer methods since this is done automatically
494
+ # Skip defining reader/writer methods since this is done automatically.
491
495
  def define_state_accessor
492
496
  name = self.name
493
497
 
@@ -497,24 +501,19 @@ module EnumStateMachine
497
501
  end if supports_validations?
498
502
  end
499
503
 
500
- # Adds hooks into validation for automatically firing events
504
+ # Add hooks into validation for automatically firing events.
501
505
  def define_action_helpers
502
506
  super
503
507
  define_validation_hook if runs_validations_on_action?
504
508
  end
505
509
 
506
- # Hooks into validations by defining around callbacks for the
507
- # :validation event
510
+ # Hook into validations by defining around callbacks for the
511
+ # :validation event.
508
512
  def define_validation_hook
509
513
  owner_class.set_callback(:validation, :around, self, :prepend => true)
510
514
  end
511
515
 
512
- # Runs state events around the object's validation process
513
- def around_validation(object)
514
- object.class.state_machines.transitions(object, action, :after => false).perform { yield }
515
- end
516
-
517
- # Creates a new callback in the callback chain, always inserting it
516
+ # Create a new callback in the callback chain, always inserting it
518
517
  # before the default Observer callbacks that were created after
519
518
  # initialization.
520
519
  def add_callback(type, options, &block)
@@ -529,21 +528,21 @@ module EnumStateMachine
529
528
  end
530
529
  end
531
530
 
532
- # Configures new states with the built-in humanize scheme
531
+ # Configure new states with the built-in humanize scheme.
533
532
  def add_states(new_states)
534
533
  super.each do |new_state|
535
534
  new_state.human_name = lambda {|state, klass| translate(klass, :state, state.name)}
536
535
  end
537
536
  end
538
537
 
539
- # Configures new event with the built-in humanize scheme
538
+ # Configure new events with the built-in humanize scheme.
540
539
  def add_events(new_events)
541
540
  super.each do |new_event|
542
541
  new_event.human_name = lambda {|event, klass| translate(klass, :event, event.name)}
543
542
  end
544
543
  end
545
544
 
546
- # Notifies observers on the given object that a callback occurred
545
+ # Notify observers on the given object that a callback occurred
547
546
  # involving the given transition. This will attempt to call the
548
547
  # following methods on observers:
549
548
  # * <tt>#{type}_#{qualified_event}_from_#{from}_to_#{to}</tt>
@@ -1,3 +1,3 @@
1
1
  module EnumStateMachine
2
- VERSION = '0.1.1'
2
+ VERSION = "0.2.0"
3
3
  end
@@ -241,7 +241,7 @@ class TrafficLight
241
241
  end
242
242
  end
243
243
 
244
- class VehicleTest < Test::Unit::TestCase
244
+ class VehicleTest < MiniTest::Test
245
245
  def setup
246
246
  @vehicle = Vehicle.new
247
247
  end
@@ -259,7 +259,7 @@ class VehicleTest < Test::Unit::TestCase
259
259
  end
260
260
  end
261
261
 
262
- class VehicleUnsavedTest < Test::Unit::TestCase
262
+ class VehicleUnsavedTest < MiniTest::Test
263
263
  def setup
264
264
  @vehicle = Vehicle.new
265
265
  end
@@ -269,12 +269,12 @@ class VehicleUnsavedTest < Test::Unit::TestCase
269
269
  end
270
270
 
271
271
  def test_should_raise_exception_if_checking_invalid_state
272
- assert_raise(IndexError) { @vehicle.state?(:invalid) }
272
+ assert_raises(IndexError) { @vehicle.state?(:invalid) }
273
273
  end
274
274
 
275
275
  def test_should_raise_exception_if_getting_name_of_invalid_state
276
276
  @vehicle.state = 'invalid'
277
- assert_raise(ArgumentError) { @vehicle.state_name }
277
+ assert_raises(ArgumentError) { @vehicle.state_name }
278
278
  end
279
279
 
280
280
  def test_should_be_parked
@@ -318,7 +318,7 @@ class VehicleUnsavedTest < Test::Unit::TestCase
318
318
 
319
319
  def test_should_have_a_transition_for_ignite
320
320
  transition = @vehicle.ignite_transition
321
- assert_not_nil transition
321
+ refute_nil transition
322
322
  assert_equal 'parked', transition.from
323
323
  assert_equal 'idling', transition.to
324
324
  assert_equal :ignite, transition.event
@@ -357,7 +357,7 @@ class VehicleUnsavedTest < Test::Unit::TestCase
357
357
  end
358
358
 
359
359
  def test_should_raise_error_with_invalid_event_through_generic_event_runer
360
- assert_raise(IndexError) { @vehicle.fire_state_event(:invalid) }
360
+ assert_raises(IndexError) { @vehicle.fire_state_event(:invalid) }
361
361
  end
362
362
 
363
363
  def test_should_allow_ignite
@@ -438,7 +438,7 @@ class VehicleUnsavedTest < Test::Unit::TestCase
438
438
  end
439
439
  end
440
440
 
441
- class VehicleParkedTest < Test::Unit::TestCase
441
+ class VehicleParkedTest < MiniTest::Test
442
442
  def setup
443
443
  @vehicle = Vehicle.new
444
444
  end
@@ -481,7 +481,7 @@ class VehicleParkedTest < Test::Unit::TestCase
481
481
  end
482
482
 
483
483
  def test_should_raise_exception_if_repair_not_allowed!
484
- exception = assert_raise(EnumStateMachine::InvalidTransition) {@vehicle.repair!}
484
+ exception = assert_raises(EnumStateMachine::InvalidTransition) {@vehicle.repair!}
485
485
  assert_equal @vehicle, exception.object
486
486
  assert_equal Vehicle.state_machine(:state), exception.machine
487
487
  assert_equal :repair, exception.event
@@ -489,7 +489,7 @@ class VehicleParkedTest < Test::Unit::TestCase
489
489
  end
490
490
  end
491
491
 
492
- class VehicleIdlingTest < Test::Unit::TestCase
492
+ class VehicleIdlingTest < MiniTest::Test
493
493
  def setup
494
494
  @vehicle = Vehicle.new
495
495
  @vehicle.ignite
@@ -508,7 +508,7 @@ class VehicleIdlingTest < Test::Unit::TestCase
508
508
  end
509
509
 
510
510
  def test_should_track_time_elapsed
511
- assert_not_nil @vehicle.time_elapsed
511
+ refute_nil @vehicle.time_elapsed
512
512
  end
513
513
 
514
514
  def test_should_allow_park
@@ -546,7 +546,7 @@ class VehicleIdlingTest < Test::Unit::TestCase
546
546
  end
547
547
  end
548
548
 
549
- class VehicleFirstGearTest < Test::Unit::TestCase
549
+ class VehicleFirstGearTest < MiniTest::Test
550
550
  def setup
551
551
  @vehicle = Vehicle.new
552
552
  @vehicle.ignite
@@ -586,7 +586,7 @@ class VehicleFirstGearTest < Test::Unit::TestCase
586
586
  end
587
587
  end
588
588
 
589
- class VehicleSecondGearTest < Test::Unit::TestCase
589
+ class VehicleSecondGearTest < MiniTest::Test
590
590
  def setup
591
591
  @vehicle = Vehicle.new
592
592
  @vehicle.ignite
@@ -626,7 +626,7 @@ class VehicleSecondGearTest < Test::Unit::TestCase
626
626
  end
627
627
  end
628
628
 
629
- class VehicleThirdGearTest < Test::Unit::TestCase
629
+ class VehicleThirdGearTest < MiniTest::Test
630
630
  def setup
631
631
  @vehicle = Vehicle.new
632
632
  @vehicle.ignite
@@ -666,7 +666,7 @@ class VehicleThirdGearTest < Test::Unit::TestCase
666
666
  end
667
667
  end
668
668
 
669
- class VehicleStalledTest < Test::Unit::TestCase
669
+ class VehicleStalledTest < MiniTest::Test
670
670
  def setup
671
671
  @vehicle = Vehicle.new
672
672
  @vehicle.ignite
@@ -729,7 +729,7 @@ class VehicleStalledTest < Test::Unit::TestCase
729
729
  end
730
730
  end
731
731
 
732
- class VehicleRepairedTest < Test::Unit::TestCase
732
+ class VehicleRepairedTest < MiniTest::Test
733
733
  def setup
734
734
  @vehicle = Vehicle.new
735
735
  @vehicle.ignite
@@ -747,7 +747,7 @@ class VehicleRepairedTest < Test::Unit::TestCase
747
747
  end
748
748
  end
749
749
 
750
- class VehicleLockedTest < Test::Unit::TestCase
750
+ class VehicleLockedTest < MiniTest::Test
751
751
  def setup
752
752
  @vehicle = Vehicle.new
753
753
  @vehicle.state = 'locked'
@@ -774,7 +774,7 @@ class VehicleLockedTest < Test::Unit::TestCase
774
774
  end
775
775
  end
776
776
 
777
- class VehicleWithParallelEventsTest < Test::Unit::TestCase
777
+ class VehicleWithParallelEventsTest < MiniTest::Test
778
778
  def setup
779
779
  @vehicle = Vehicle.new
780
780
  end
@@ -793,7 +793,9 @@ class VehicleWithParallelEventsTest < Test::Unit::TestCase
793
793
  end
794
794
 
795
795
  def test_should_raise_exception_if_any_event_cannot_transition_on_bang
796
- exception = assert_raise(EnumStateMachine::InvalidParallelTransition) { @vehicle.fire_events!(:ignite, :cancel_insurance) }
796
+ exception = assert_raises(EnumStateMachine::InvalidParallelTransition) {
797
+ @vehicle.fire_events!(:ignite, :cancel_insurance)
798
+ }
797
799
  assert_equal @vehicle, exception.object
798
800
  assert_equal [:ignite, :cancel_insurance], exception.events
799
801
  end
@@ -808,7 +810,7 @@ class VehicleWithParallelEventsTest < Test::Unit::TestCase
808
810
  end
809
811
  end
810
812
 
811
- class VehicleWithEventAttributesTest < Test::Unit::TestCase
813
+ class VehicleWithEventAttributesTest < MiniTest::Test
812
814
  def setup
813
815
  @vehicle = Vehicle.new
814
816
  @vehicle.state_event = 'ignite'
@@ -836,7 +838,7 @@ class VehicleWithEventAttributesTest < Test::Unit::TestCase
836
838
  end
837
839
  end
838
840
 
839
- class MotorcycleTest < Test::Unit::TestCase
841
+ class MotorcycleTest < MiniTest::Test
840
842
  def setup
841
843
  @motorcycle = Motorcycle.new
842
844
  end
@@ -880,7 +882,7 @@ class MotorcycleTest < Test::Unit::TestCase
880
882
  end
881
883
  end
882
884
 
883
- class CarTest < Test::Unit::TestCase
885
+ class CarTest < MiniTest::Test
884
886
  def setup
885
887
  @car = Car.new
886
888
  end
@@ -927,7 +929,7 @@ class CarTest < Test::Unit::TestCase
927
929
  end
928
930
  end
929
931
 
930
- class CarBackingUpTest < Test::Unit::TestCase
932
+ class CarBackingUpTest < MiniTest::Test
931
933
  def setup
932
934
  @car = Car.new
933
935
  @car.reverse
@@ -970,7 +972,7 @@ class CarBackingUpTest < Test::Unit::TestCase
970
972
  end
971
973
  end
972
974
 
973
- class AutoShopAvailableTest < Test::Unit::TestCase
975
+ class AutoShopAvailableTest < MiniTest::Test
974
976
  def setup
975
977
  @auto_shop = AutoShop.new
976
978
  end
@@ -988,7 +990,7 @@ class AutoShopAvailableTest < Test::Unit::TestCase
988
990
  end
989
991
  end
990
992
 
991
- class AutoShopBusyTest < Test::Unit::TestCase
993
+ class AutoShopBusyTest < MiniTest::Test
992
994
  def setup
993
995
  @auto_shop = AutoShop.new
994
996
  @auto_shop.tow_vehicle
@@ -1011,7 +1013,7 @@ class AutoShopBusyTest < Test::Unit::TestCase
1011
1013
  end
1012
1014
  end
1013
1015
 
1014
- class TrafficLightStopTest < Test::Unit::TestCase
1016
+ class TrafficLightStopTest < MiniTest::Test
1015
1017
  def setup
1016
1018
  @light = TrafficLight.new
1017
1019
  @light.state = 'stop'
@@ -1035,7 +1037,7 @@ class TrafficLightStopTest < Test::Unit::TestCase
1035
1037
  end
1036
1038
  end
1037
1039
 
1038
- class TrafficLightProceedTest < Test::Unit::TestCase
1040
+ class TrafficLightProceedTest < MiniTest::Test
1039
1041
  def setup
1040
1042
  @light = TrafficLight.new
1041
1043
  @light.state = 'proceed'
@@ -1050,7 +1052,7 @@ class TrafficLightProceedTest < Test::Unit::TestCase
1050
1052
  end
1051
1053
  end
1052
1054
 
1053
- class TrafficLightCautionTest < Test::Unit::TestCase
1055
+ class TrafficLightCautionTest < MiniTest::Test
1054
1056
  def setup
1055
1057
  @light = TrafficLight.new
1056
1058
  @light.state = 'caution'
data/test/test_helper.rb CHANGED
@@ -3,5 +3,17 @@ if ENV['COVERAGE']
3
3
  SimpleCov.start { add_filter '/test/' }
4
4
  end
5
5
 
6
- require 'test/unit'
6
+ #require 'test/unit'
7
+ require 'minitest'
8
+ require "minitest/autorun"
7
9
  require 'enum_state_machine'
10
+
11
+ class MiniTest::Test
12
+ def assert_nothing_raised
13
+ yield
14
+ rescue => ex
15
+ assert_nil ex
16
+ end
17
+
18
+ alias_method :assert_nothing_thrown, :assert_nothing_raised
19
+ end
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
2
 
3
- class AssertionsBaseTest < Test::Unit::TestCase
3
+ class AssertionsBaseTest < MiniTest::Test
4
4
  include EnumStateMachine::Assertions
5
5
 
6
6
  def default_test
@@ -13,7 +13,9 @@ class AssertValidKeysTest < AssertionsBaseTest
13
13
  end
14
14
 
15
15
  def test_should_raise_exception_if_key_is_invalid
16
- exception = assert_raise(ArgumentError) { assert_valid_keys({:name => 'foo', :value => 'bar', :invalid => true}, :name, :value, :force) }
16
+ exception = assert_raises(ArgumentError) {
17
+ assert_valid_keys({:name => 'foo', :value => 'bar', :invalid => true}, :name, :value, :force)
18
+ }
17
19
  assert_equal 'Invalid key(s): invalid', exception.message
18
20
  end
19
21
  end
@@ -29,12 +31,16 @@ class AssertExclusiveKeysTest < AssertionsBaseTest
29
31
  end
30
32
 
31
33
  def test_should_raise_exception_if_two_keys_found
32
- exception = assert_raise(ArgumentError) { assert_exclusive_keys({:only => :parked, :except => :parked}, :only, :except) }
34
+ exception = assert_raises(ArgumentError) {
35
+ assert_exclusive_keys({:only => :parked, :except => :parked}, :only, :except)
36
+ }
33
37
  assert_equal 'Conflicting keys: only, except', exception.message
34
38
  end
35
39
 
36
40
  def test_should_raise_exception_if_multiple_keys_found
37
- exception = assert_raise(ArgumentError) { assert_exclusive_keys({:only => :parked, :except => :parked, :on => :park}, :only, :except, :with) }
41
+ exception = assert_raises(ArgumentError) {
42
+ assert_exclusive_keys({:only => :parked, :except => :parked, :on => :park}, :only, :except, :with)
43
+ }
38
44
  assert_equal 'Conflicting keys: only, except', exception.message
39
45
  end
40
46
  end