From 36e42b6bcef1fef49b29a8d5379bba890082625b Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 20 Mar 2025 10:27:07 +0100 Subject: [PATCH] Make find_scope! raise on invalid scope --- lib/devise/mapping.rb | 3 ++- test/mapping_test.rb | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/devise/mapping.rb b/lib/devise/mapping.rb index 8b1f94ced2..a74bfc5177 100644 --- a/lib/devise/mapping.rb +++ b/lib/devise/mapping.rb @@ -36,7 +36,8 @@ def self.find_scope!(obj) obj = obj.devise_scope if obj.respond_to?(:devise_scope) case obj when String, Symbol - return obj.to_sym + obj = obj.to_sym + return obj if Devise.mappings.key?(obj) when Class Devise.mappings.each_value { |m| return m.name if obj <= m.to } else diff --git a/test/mapping_test.rb b/test/mapping_test.rb index 9d60287cd4..5ce2d4de0d 100644 --- a/test/mapping_test.rb +++ b/test/mapping_test.rb @@ -75,14 +75,20 @@ def fake_request(path, params = {}) test 'find scope uses devise_scope' do user = User.new - def user.devise_scope; :special_scope; end - assert_equal :special_scope, Devise::Mapping.find_scope!(user) + def user.devise_scope; :subdomain_user; end + assert_equal :subdomain_user, Devise::Mapping.find_scope!(user) end test 'find scope raises an error if cannot be found' do assert_raise RuntimeError do Devise::Mapping.find_scope!(String) end + assert_raise RuntimeError do + Devise::Mapping.find_scope!(:invalid_scope) + end + assert_raise RuntimeError do + Devise::Mapping.find_scope!('invalid_scope') + end end test 'return default path names' do