From 007e376fa541cdfafecf6e4121f3aee9e45094c4 Mon Sep 17 00:00:00 2001 From: Kirk Wang Date: Thu, 30 Jan 2025 17:51:18 -0800 Subject: [PATCH] Add member methods on AdminSetResource This commit will introduce two instance methods on the AdminSetResource: - #member_of - #member_collection_ids These methods will make it possible for users to query for resources are on the given AdminSetResource. This is particularly useful for the WillowSword gem. Ref: - https://github.com/notch8/palni-palci/issues/1071 --- app/models/admin_set_resource.rb | 8 ++++++++ spec/models/admin_set_resource_spec.rb | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/models/admin_set_resource.rb b/app/models/admin_set_resource.rb index a06fa8aa32..55140c30f9 100644 --- a/app/models/admin_set_resource.rb +++ b/app/models/admin_set_resource.rb @@ -6,4 +6,12 @@ class AdminSetResource < Hyrax::AdministrativeSet Hyrax::ValkyrieLazyMigration.migrating(self, from: ::AdminSet) include WithPermissionTemplateShim + + def member_of + Hyrax.query_service.find_inverse_references_by(resource: self, property: :admin_set_id) + end + + def member_collection_ids + member_of.map(&:id) + end end diff --git a/spec/models/admin_set_resource_spec.rb b/spec/models/admin_set_resource_spec.rb index 2f6d4f58a8..83b36e3a9f 100644 --- a/spec/models/admin_set_resource_spec.rb +++ b/spec/models/admin_set_resource_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' RSpec.describe AdminSetResource do - subject(:admin_set) { described_class.new } + subject(:admin_set) { FactoryBot.valkyrie_create(:hyku_admin_set) } + let!(:resource) { FactoryBot.valkyrie_create(:generic_work_resource, admin_set_id: admin_set.id) } it_behaves_like 'a Hyrax::AdministrativeSet' @@ -19,4 +20,16 @@ subject { described_class } its(:to_rdf_representation) { is_expected.to eq('AdminSet') } end + + describe '#member_of' do + it 'returns the resources in the admin set' do + expect(subject.member_of).to eq [resource] + end + end + + describe '#member_collection_ids' do + it 'returns the collection ids of the resources in the admin set' do + expect(subject.member_collection_ids).to eq [resource.id] + end + end end