From a640f7692a8f399e38ca5f9dfd5c60308dc29db5 Mon Sep 17 00:00:00 2001 From: Roman Simecek Date: Wed, 2 Aug 2017 17:15:22 +0200 Subject: [PATCH 1/3] Get the base class so that it works with sti models. --- lib/stateful_enum/machine.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 5de149d4923e374d31b58f18012d1c28353efbbd Mon Sep 17 00:00:00 2001 From: Yusuke Nakamura Date: Fri, 11 May 2018 17:47:32 +0900 Subject: [PATCH 2/3] Add 'type' column to bugs table for support sti --- test/dummy/db/migrate/20160307203948_create_bugs.rb | 1 + 1 file changed, 1 insertion(+) 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 From 6f6e18b1d5cc53b0c0b5f37751757503d480e4e9 Mon Sep 17 00:00:00 2001 From: Yusuke Nakamura Date: Fri, 11 May 2018 17:48:35 +0900 Subject: [PATCH 3/3] Add test case to use transition in sti model --- test/dummy/app/models/special_bug.rb | 4 ++++ test/mechanic_machine_test.rb | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 test/dummy/app/models/special_bug.rb 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/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')