Skip to content

Commit

Permalink
Add sort fields for title, date, and author; refs #307
Browse files Browse the repository at this point in the history
  • Loading branch information
hackartisan committed Feb 21, 2018
1 parent c8ba3b6 commit 129d9b2
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 0 deletions.
4 changes: 4 additions & 0 deletions app/controllers/catalog_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ def unique_custom_fields
config.add_search_field 'all_fields', label: 'Everything'

config.add_sort_field 'relevance', sort: 'score desc', label: 'Relevance'
config.add_sort_field 'sort_title', sort: 'sort_title_ssi asc, sort_date_ssi desc', label: 'Title'
config.add_sort_field 'sort_date', sort: 'sort_date_ssi desc, sort_title_ssi asc', label: 'Date'
config.add_sort_field 'sort_author', sort: 'sort_author_ssi asc, sort_title_ssi asc', label: 'Author'
# TODO: place of publication

config.add_facet_field 'spotlight_resource_type_ssim'
config.index.thumbnail_field = 'thumbnail_ssim'
Expand Down
19 changes: 19 additions & 0 deletions app/services/iiif_manifest.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
class IiifManifest < Spotlight::Resources::IiifManifest
def to_solr
add_noid
# this is called in super, but idempotent so safe to call here also; we need the metadata
add_metadata
add_sort_title
add_sort_date
add_sort_author
super
end

def add_noid
solr_hash["access_identifier_ssim"] = [noid]
end

def add_sort_title
# Once we upgrade we should probably use this json_ld_value?
#solr_hash['sort_title_ssi'] = Array.wrap(json_ld_value(manifest.label)).first
solr_hash['sort_title_ssi'] = Array.wrap(manifest.label).first
end

def add_sort_date
solr_hash['sort_date_ssi'] = Array.wrap(solr_hash['readonly_date_ssim']).first
end

def add_sort_author
solr_hash['sort_author_ssi'] = Array.wrap(solr_hash['readonly_author_ssim']).first
end

def full_image_url
return super unless manifest['thumbnail'] && manifest['thumbnail']['service'] && manifest['thumbnail']['service']['@id']
"#{manifest['thumbnail']['service']['@id']}/full/!600,600/0/default.jpg"
Expand Down
57 changes: 57 additions & 0 deletions spec/fixtures/iiif_responses.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# pulled and pared down from spotlight
# https://github.com/projectblacklight/spotlight/blob/b4608610ed0405f1d8ed4d6c9c17a02b06b9bcf6/spec/fixtures/iiif_responses.rb
module IiifResponses
def test_manifest1
{
"@id": 'uri://for-manifest1/manifest',
"@type": 'sc:Manifest',
"label": 'Test Manifest 1',
"attribution": 'Attribution Data',
"description": 'A test IIIF manifest',
"license": 'http://www.example.org/license.html',
"metadata": [
{
"label": 'Author',
"value": 'John Doe'
},
{
"label": 'Author',
"value": 'Jane Doe'
},
{
"label": 'Another Field',
"value": 'Some data'
},
{
"label": 'Date',
"value": '1929'
}
],
"thumbnail": {
"@id": 'uri://to-thumbnail'
},
"sequences": [
{
"@type": 'sc:Sequence',
"canvases": [
{
"@type": 'sc:Canvas',
"images": [
{
"@type": 'oa:Annotation',
"resource": {
"@type": 'dcterms:Image',
"@id": 'uri://full-image',
"service": {
"@id": 'uri://to-image-service'
}
}
}
]
}
]
}
]
}.to_json
end
end
34 changes: 34 additions & 0 deletions spec/services/iiif_manifest_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require 'rails_helper'

RSpec.describe IiifManifest do
subject { described_class.new(url: url, manifest: manifest, collection: collection) }
let(:url) { 'uri://some_id/manifest' }
let(:collection) { double(compound_id: '1') }
let(:manifest_fixture) { test_manifest1 }
before do
stub_iiif_response_for_url(url, manifest_fixture)
subject.with_exhibit(exhibit)
end

describe '#to_solr' do
let(:manifest) { IiifService.new(url).send(:object) }
let(:exhibit) { FactoryBot.create(:exhibit) }
describe 'sort_title' do
it 'is a single-value text field' do
expect(subject.to_solr["sort_title_ssi"]).to eq "Test Manifest 1"
end
end

describe 'sort_date' do
it 'is a single-value text field' do
expect(subject.to_solr["sort_date_ssi"]).to eq "1929"
end
end

describe 'sort_author' do
it 'is a single-value text field' do
expect(subject.to_solr["sort_author_ssi"]).to eq "John Doe"
end
end
end
end
19 changes: 19 additions & 0 deletions spec/support/stub_iiif_response.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# pulled and pared down from spotlight
# https://github.com/projectblacklight/spotlight/blob/b4608610ed0405f1d8ed4d6c9c17a02b06b9bcf6/spec/support/stub_iiif_response.rb
require 'fixtures/iiif_responses'
module StubIiifResponse
def stub_iiif_response_for_url(url, response)
allow(IiifService).to receive(:iiif_response).with(url).and_return(response)
end

def stub_default_collection
allow_any_instance_of(Spotlight::Resources::IiifHarvester).to receive_messages(url_is_iiif?: true)

stub_iiif_response_for_url('uri://for-manifest1/manifest', test_manifest1)
end
end

RSpec.configure do |config|
config.include IiifResponses
config.include StubIiifResponse
end

0 comments on commit 129d9b2

Please sign in to comment.