Skip to content

Commit 11bb706

Browse files
✨ Support location by configurable keys in the default locator
1 parent ac891ac commit 11bb706

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

lib/global_id/locator.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ def locate(gid, options = {})
162162
model_class = gid.model_class
163163
model_class = model_class.includes(options[:includes]) if options[:includes]
164164

165-
model_class.find gid.model_id
165+
if model_class.global_id_column
166+
model_class.find_by model_class.global_id_column => gid.model_id
167+
else
168+
model_class.find gid.model_id
169+
end
166170
end
167171

168172
def locate_many(gids, options = {})

test/cases/global_id_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@ class GlobalIDCreationTest < ActiveSupport::TestCase
5555
assert_equal Person::Child.find(@person_namespaced_gid.model_id), @person_namespaced_gid.find
5656
assert_equal PersonModel.find(@person_model_gid.model_id), @person_model_gid.find
5757
assert_equal CompositePrimaryKeyModel.find(@cpk_model_gid.model_id), @cpk_model_gid.find
58-
assert_equal ConfigurableKeyModel.find(@ckm_model_gid.model_id), @ckm_model_gid.find
58+
assert_equal ConfigurableKeyModel.find_by(external_id: @ckm_model_gid.model_id), @ckm_model_gid.find
5959
end
6060

6161
test 'find with class' do
6262
assert_equal Person.find(@person_gid.model_id), @person_gid.find(only: Person)
6363
assert_equal Person.find(@person_uuid_gid.model_id), @person_uuid_gid.find(only: Person)
6464
assert_equal PersonModel.find(@person_model_gid.model_id), @person_model_gid.find(only: PersonModel)
6565
assert_equal CompositePrimaryKeyModel.find(@cpk_model_gid.model_id), @cpk_model_gid.find(only: CompositePrimaryKeyModel)
66-
assert_equal ConfigurableKeyModel.find(@ckm_model_gid.model_id), @ckm_model_gid.find(only: ConfigurableKeyModel)
66+
assert_equal ConfigurableKeyModel.find_by(external_id: @ckm_model_gid.model_id), @ckm_model_gid.find(only: ConfigurableKeyModel)
6767
end
6868

6969
test 'find with class no match' do

test/models/configurable_key_model.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ def primary_key
1313
:id
1414
end
1515

16-
def find(external_id)
16+
def find(_id)
17+
raise ".find is not supported for ConfigurableKeyModel"
18+
end
19+
20+
def find_by(external_id:)
1721
new external_id: external_id, id: "id-value"
1822
end
1923
end

0 commit comments

Comments
 (0)