diff --git a/lib/stateful_enum/machine.rb b/lib/stateful_enum/machine.rb index a0bd114..b8f8715 100644 --- a/lib/stateful_enum/machine.rb +++ b/lib/stateful_enum/machine.rb @@ -54,7 +54,7 @@ def initialize(model, column, states, prefix, suffix, name, &block) if to && (!condition || instance_exec(&condition)) #TODO transaction? run_callbacks new_method_name do - original_method = self.class.send(:_enum_methods_module).instance_method "#{prefix}#{to}#{suffix}!" + original_method = self.class.base_class.send(:_enum_methods_module).instance_method "#{prefix}#{to}#{suffix}!" original_method.bind(self).call end else diff --git a/test/dummy/app/models/special_bug.rb b/test/dummy/app/models/special_bug.rb new file mode 100644 index 0000000..8f1ef7a --- /dev/null +++ b/test/dummy/app/models/special_bug.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class SpecialBug < Bug +end diff --git a/test/dummy/db/migrate/20160307203948_create_bugs.rb b/test/dummy/db/migrate/20160307203948_create_bugs.rb index b4cead5..2ce201c 100644 --- a/test/dummy/db/migrate/20160307203948_create_bugs.rb +++ b/test/dummy/db/migrate/20160307203948_create_bugs.rb @@ -8,6 +8,7 @@ def change t.integer :status, default: 0 t.integer :assigned_to_id t.datetime :resolved_at + t.string :type t.timestamps null: false end diff --git a/test/mechanic_machine_test.rb b/test/mechanic_machine_test.rb index 8054b90..beeb96f 100644 --- a/test/mechanic_machine_test.rb +++ b/test/mechanic_machine_test.rb @@ -11,6 +11,14 @@ def test_transition assert_equal 'assigned', bug.status end + def test_transition_to_sti + special_bug = SpecialBug.new + assert_equal 'unassigned', special_bug.status + special_bug.assigned_to = User.create!(name: 'user 1') + special_bug.assign + assert_equal 'assigned', special_bug.status + end + def test_transition! bug = Bug.new bug.assigned_to = User.create!(name: 'user 1')