Skip to content

Commit

Permalink
Move SolrDocument to decorator pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
kirkkwang committed Jul 3, 2024
1 parent 9991eca commit e130bba
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 67 deletions.
63 changes: 0 additions & 63 deletions app/models/concerns/iiif_print/solr/document.rb

This file was deleted.

47 changes: 47 additions & 0 deletions app/models/concerns/iiif_print/solr_document_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# frozen_string_literal: true

module IiifPrint
module SolrDocumentDecorator
def digest_sha1
digest[/urn:sha1:([\w]+)/, 1]
end

def method_missing(method_name, *args, &block)
super unless iiif_print_solr_field_names.include? method_name.to_s
self[IiifPrint.solr_name(method_name.to_s)]
end

def respond_to_missing?(method_name, include_private = false)
iiif_print_solr_field_names.include?(method_name.to_s) || super
end

# @see https://github.com/samvera/hyrax/commit/7108409c619cd2ba4ae8c836b9f3b429a7e9837b
def file_set_ids
# Yes, this looks a little odd. But the truth is the prior key (e.g. `file_set_ids_ssim`) was
# an alias of `member_ids_ssim`.
self['member_ids_ssim']
end

def any_highlighting?
response&.[]('highlighting')&.[](id)&.present?
end

def solr_document
self
end
end
end

SolrDocument.prepend(IiifPrint::SolrDocumentDecorator)
SolrDocument.attribute :is_child, Hyrax::SolrDocument::Metadata::Solr::String, 'is_child_bsi'
SolrDocument.attribute :split_from_pdf_id, Hyrax::SolrDocument::Metadata::Solr::String, 'split_from_pdf_id_ssi'
SolrDocument.attribute :digest, Hyrax::SolrDocument::Metadata::Solr::String, 'digest_ssim'

# @note These properties came from the newspaper_works gem. They are configurable.
SolrDocument.class_attribute :iiif_print_solr_field_names, default: %w[alternative_title genre
issn lccn oclcnum held_by text_direction
page_number section author photographer
volume issue_number geographic_coverage
extent publication_date height width
edition_number edition_name frequency preceded_by
succeeded_by]
4 changes: 0 additions & 4 deletions lib/iiif_print/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ class Engine < ::Rails::Engine
end
end
end

config.after_initialize do
IiifPrint::Solr::Document.decorate(SolrDocument)
end
# rubocop:enable Metrics/BlockLength
end
end
22 changes: 22 additions & 0 deletions spec/models/solr_document_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,26 @@
expect(solr_doc.file_set_ids).to eq(['bar'])
end
end

describe 'iiif_print decorator' do
it 'has extra attributes' do
expect(solr_doc).to respond_to(:is_child)
expect(solr_doc).to respond_to(:split_from_pdf_id)
expect(solr_doc).to respond_to(:digest)
end

it 'has extra class attributes' do
expect(described_class.iiif_print_solr_field_names).to eq %w[alternative_title genre
issn lccn oclcnum held_by text_direction
page_number section author photographer
volume issue_number geographic_coverage
extent publication_date height width
edition_number edition_name frequency preceded_by
succeeded_by]
end

it 'has a method that returns itself' do
expect(solr_doc.solr_document).to be solr_doc
end
end
end

0 comments on commit e130bba

Please sign in to comment.