From 947747142d86f61f2b6a4a66e18ca667c6fec29a Mon Sep 17 00:00:00 2001 From: Andrey Koleshko Date: Mon, 6 Oct 2014 18:13:31 +0300 Subject: [PATCH] Include object class in state machine transition error --- lib/state_machine/transition.rb | 3 ++- test/unit/invalid_transition_test.rb | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/state_machine/transition.rb b/lib/state_machine/transition.rb index 895c783b..f588c666 100644 --- a/lib/state_machine/transition.rb +++ b/lib/state_machine/transition.rb @@ -16,9 +16,10 @@ def initialize(object, machine, event) #:nodoc: @from = machine.read(object, :state) @event = machine.events.fetch(event) errors = machine.errors_for(object) - + message = "Cannot transition #{machine.name} via :#{self.event} from #{from_name.inspect}" message << " (Reason(s): #{errors})" unless errors.empty? + message << " (Object class): #{object.class.name}" super(object, message) end diff --git a/test/unit/invalid_transition_test.rb b/test/unit/invalid_transition_test.rb index fd29730d..04386b56 100644 --- a/test/unit/invalid_transition_test.rb +++ b/test/unit/invalid_transition_test.rb @@ -42,7 +42,7 @@ def test_should_have_a_qualified_from_name end def test_should_generate_a_message - assert_equal 'Cannot transition state via :ignite from :parked', @invalid_transition.message + assert_match 'Cannot transition state via :ignite from :parked', @invalid_transition.message end end @@ -100,13 +100,13 @@ def errors_for(object) def test_should_generate_a_message_without_reasons_if_empty @object.errors = '' invalid_transition = StateMachine::InvalidTransition.new(@object, @machine, :ignite) - assert_equal 'Cannot transition state via :ignite from :parked', invalid_transition.message + assert_match 'Cannot transition state via :ignite from :parked', invalid_transition.message end def test_should_generate_a_message_with_error_reasons_if_errors_found @object.errors = 'Id is invalid, Name is invalid' invalid_transition = StateMachine::InvalidTransition.new(@object, @machine, :ignite) - assert_equal 'Cannot transition state via :ignite from :parked (Reason(s): Id is invalid, Name is invalid)', invalid_transition.message + assert_match 'Cannot transition state via :ignite from :parked (Reason(s): Id is invalid, Name is invalid)', invalid_transition.message end def teardown