From a6c5c88b6d35f1cffff770ee5570a0f18f465463 Mon Sep 17 00:00:00 2001 From: Anton Oryol Date: Fri, 23 Jan 2009 16:01:29 +0300 Subject: [PATCH] fix ActiveModel::StateMachine current state dynamic method with machine name is set --- activemodel/lib/active_model/state_machine.rb | 4 ++-- .../lib/active_model/state_machine/state.rb | 2 +- activemodel/test/state_machine_test.rb | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/activemodel/lib/active_model/state_machine.rb b/activemodel/lib/active_model/state_machine.rb index bce90fd..77cdb7b 100644 --- a/activemodel/lib/active_model/state_machine.rb +++ b/activemodel/lib/active_model/state_machine.rb @@ -32,10 +32,10 @@ module ActiveModel block ? state_machines[name].update(options, &block) : state_machines[name] end - def define_state_query_method(state_name) + def define_state_query_method(machine, state_name) name = "#{state_name}?" undef_method(name) if method_defined?(name) - class_eval "def #{name}; current_state.to_s == %(#{state_name}) end" + class_eval "def #{name}; current_state(:#{machine.name}).to_s == %(#{state_name}) end" end end diff --git a/activemodel/lib/active_model/state_machine/state.rb b/activemodel/lib/active_model/state_machine/state.rb index 76916b1..4942312 100644 --- a/activemodel/lib/active_model/state_machine/state.rb +++ b/activemodel/lib/active_model/state_machine/state.rb @@ -6,7 +6,7 @@ module ActiveModel def initialize(name, options = {}) @name = name if machine = options.delete(:machine) - machine.klass.define_state_query_method(name) + machine.klass.define_state_query_method(machine, name) end update(options) end diff --git a/activemodel/test/state_machine_test.rb b/activemodel/test/state_machine_test.rb index 312d872..6012914 100644 --- a/activemodel/test/state_machine_test.rb +++ b/activemodel/test/state_machine_test.rb @@ -289,7 +289,13 @@ class StateMachineWithComplexTransitionsTest < ActiveModel::TestCase assert_equal :showering, @subj.current_state(:chetan_patil) end - + + test 'current state dynamic method with machine name is set' do + @subj.wakeup! :showering + + assert @subj.showering? + end + test 'transitions to default state when on_transition invoked' do @subj.dress!(nil, 'purple', 'dressy') -- 1.5.6