From 08e453a25e259fb2ebcc37e1a4d99aa8a458cec7 Mon Sep 17 00:00:00 2001 From: ooooooo_q Date: Mon, 10 Oct 2022 15:27:08 +0900 Subject: [PATCH 1/2] prevent double find --- lib/global_id/global_id.rb | 6 +++++- test/cases/global_id_test.rb | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/global_id/global_id.rb b/lib/global_id/global_id.rb index 71bd802..aabf004 100644 --- a/lib/global_id/global_id.rb +++ b/lib/global_id/global_id.rb @@ -51,7 +51,11 @@ def find(options = {}) end def model_class - model_name.constantize + model = model_name.constantize + if model <= GlobalID + raise ArgumentError, "GlobalID and SignedGlobalID cannot be used as model_class." + end + model end def ==(other) diff --git a/test/cases/global_id_test.rb b/test/cases/global_id_test.rb index 7f77304..22e55ce 100644 --- a/test/cases/global_id_test.rb +++ b/test/cases/global_id_test.rb @@ -177,6 +177,9 @@ class GlobalIDCreationTest < ActiveSupport::TestCase assert_equal Person, @person_uuid_gid.model_class assert_equal Person::Child, @person_namespaced_gid.model_class assert_equal PersonModel, @person_model_gid.model_class + assert_raise ArgumentError do + person_gid = GlobalID.find 'gid://bcx/SignedGlobalID/5' + end end test ':app option' do From 223d0a173a7a3399f102e21bed133b1c411c9d8e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 26 Dec 2022 05:38:32 -0800 Subject: [PATCH 2/2] Use a single conditional instead of multiple exit wounds --- lib/global_id/global_id.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/global_id/global_id.rb b/lib/global_id/global_id.rb index aabf004..270a85a 100644 --- a/lib/global_id/global_id.rb +++ b/lib/global_id/global_id.rb @@ -51,11 +51,13 @@ def find(options = {}) end def model_class - model = model_name.constantize - if model <= GlobalID + model = model_name.constantize + + unless model <= GlobalID + model + else raise ArgumentError, "GlobalID and SignedGlobalID cannot be used as model_class." end - model end def ==(other)