Skip to content
This repository has been archived by the owner on May 28, 2024. It is now read-only.

Commit

Permalink
Index the relationships dor-services-app depends on without using Act…
Browse files Browse the repository at this point in the history
…iveFedora
  • Loading branch information
jcoyne committed Mar 2, 2021
1 parent dc1a25c commit 4a0d437
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 26 deletions.
54 changes: 34 additions & 20 deletions app/indexers/data_indexer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,45 @@

# Indexing provided by ActiveFedora
class DataIndexer
include ActiveFedora::Indexing
attr_reader :cocina

attr_reader :resource
def initialize(cocina:, **)
@cocina = cocina
end

def to_solr
{}.tap do |solr_doc|
Rails.logger.debug "In #{self.class}"
solr_doc[SOLR_DOCUMENT_ID.to_sym] = cocina.externalIdentifier

def initialize(resource:, **)
@resource = resource
# These are required as long as dor-services-app uses ActiveFedora for querying:
solr_doc['has_model_ssim'] = legacy_model
solr_doc['is_governed_by_ssim'] = legacy_apo
solr_doc['is_member_of_collection_ssim'] = legacy_collections
end
end

# we need to override this until https://github.com/samvera/active_fedora/pull/1371
# has been released
def to_solr(solr_doc = {})
Rails.logger.debug "In #{self.class}"
def legacy_collections
case cocina.type
when Cocina::Models::Vocab.admin_policy, Cocina::Models::Vocab.collection
[]
else
cocina.structural.isMemberOf.map { |col_id| "info:fedora/#{col_id}" }
end
end

c_time = create_date
c_time = Time.parse(c_time) unless c_time.is_a?(Time)
m_time = modified_date
m_time = Time.parse(m_time) unless m_time.is_a?(Time)
Solrizer.set_field(solr_doc, 'system_create', c_time, :stored_sortable)
Solrizer.set_field(solr_doc, 'system_modified', m_time, :stored_sortable)
Solrizer.set_field(solr_doc, 'object_state', state, :stored_sortable)
Solrizer.set_field(solr_doc, 'active_fedora_model', has_model, :stored_sortable)
solr_doc[SOLR_DOCUMENT_ID.to_sym] = pid
solrize_relationships(solr_doc)
def legacy_apo
"info:fedora/#{cocina.administrative.hasAdminPolicy}"
end

delegate :create_date, :modified_date, :state, :pid, :inner_object,
:datastreams, :relationships, :has_model, to: :resource
def legacy_model
case cocina.type
when Cocina::Models::Vocab.admin_policy
'info:fedora/afmodel:Dor_AdminPolicyObject'
when Cocina::Models::Vocab.collection
'info:fedora/afmodel:Dor_Collection'
else
'info:fedora/afmodel:Dor_Item'
end
end
end
21 changes: 19 additions & 2 deletions spec/indexers/data_indexer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@
let(:obj) do
Dor::AdminPolicyObject.new(pid: 'druid:999')
end
let(:cocina) { Success(instance_double(Cocina::Models::DRO)) }
let(:cocina) do
instance_double(Cocina::Models::DRO, externalIdentifier: 'druid:xx999xx9999',
type: Cocina::Models::Vocab.map,
administrative: administrative,
structural: structural)
end

let(:administrative) do
instance_double(Cocina::Models::Administrative, hasAdminPolicy: 'druid:vv888vv8888')
end
let(:structural) do
instance_double(Cocina::Models::DROStructural, isMemberOf: ['druid:bb777bb7777', 'druid:dd666dd6666'])
end

describe '#to_solr' do
let(:indexer) do
Expand All @@ -17,7 +29,12 @@
let(:doc) { indexer.to_solr }

it 'makes a solr doc' do
expect(doc).to match a_hash_including(id: 'druid:999')
expect(doc).to eq(
'has_model_ssim' => 'info:fedora/afmodel:Dor_Item',
'is_governed_by_ssim' => 'info:fedora/druid:vv888vv8888',
'is_member_of_collection_ssim' => ['info:fedora/druid:bb777bb7777', 'info:fedora/druid:dd666dd6666'],
:id => 'druid:xx999xx9999'
)
end
end
end
27 changes: 23 additions & 4 deletions spec/services/indexer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,22 @@
context 'when cocina fetch is successful' do
let(:model) { Dor::Item.new(pid: druid) }
let(:cocina) do
instance_double(Cocina::Models::DRO, externalIdentifier: druid, structural: structural, description: description)
instance_double(Cocina::Models::DRO, externalIdentifier: druid,
type: Cocina::Models::Vocab.map,
administrative: administrative,
description: description,
structural: structural)
end
let(:administrative) do
instance_double(Cocina::Models::Administrative, hasAdminPolicy: 'druid:vv888vv8888')
end
let(:description) do
instance_double(Cocina::Models::Description, subject: [topic])
end
let(:topic) do
instance_double(Cocina::Models::DescriptiveValue, type: 'topic', value: 'word')
end
let(:structural) { instance_double(Cocina::Models::DROStructural, contains: []) }
let(:structural) { instance_double(Cocina::Models::DROStructural, contains: [], isMemberOf: ['druid:bb777bb7777', 'druid:dd666dd6666']) }

it { is_expected.to include('milestones_ssim', 'released_to_ssim', 'wf_ssim', 'tag_ssim') }
end
Expand All @@ -120,9 +127,15 @@
context 'when the model is an admin policy' do
let(:model) { Dor::AdminPolicyObject.new(pid: druid) }
let(:cocina) do
instance_double(Cocina::Models::AdminPolicy, externalIdentifier: druid, description: description)
instance_double(Cocina::Models::AdminPolicy, externalIdentifier: druid,
type: Cocina::Models::Vocab.admin_policy,
description: description,
administrative: administrative)
end

let(:administrative) do
instance_double(Cocina::Models::AdminPolicyAdministrative, hasAdminPolicy: 'druid:vv888vv8888')
end
let(:description) do
instance_double(Cocina::Models::Description, subject: nil)
end
Expand All @@ -133,9 +146,15 @@
context 'when the model is a hydrus apo' do
let(:model) { Hydrus::AdminPolicyObject.new(pid: druid) }
let(:cocina) do
instance_double(Cocina::Models::AdminPolicy, externalIdentifier: druid, description: description)
instance_double(Cocina::Models::AdminPolicy, externalIdentifier: druid,
type: Cocina::Models::Vocab.admin_policy,
administrative: administrative,
description: description)
end

let(:administrative) do
instance_double(Cocina::Models::AdminPolicyAdministrative, hasAdminPolicy: 'druid:vv888vv8888')
end
let(:description) do
instance_double(Cocina::Models::Description, subject: nil)
end
Expand Down

0 comments on commit 4a0d437

Please sign in to comment.