Skip to content

Commit

Permalink
Add manifest_metadata method into ManifestEnabledWorkShowPresenter to
Browse files Browse the repository at this point in the history
support adding metadata into the IIIF manifest; added solr version until
solr 7 issue is fixed
  • Loading branch information
Julie Allinson committed Sep 22, 2017
1 parent 9bdc698 commit 6e54580
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 22 deletions.
2 changes: 2 additions & 0 deletions .solr_wrapper
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Place any default configuration for solr_wrapper here
# port: 8983
# TODO: Relax this when we're Solr 7-compliant
version: 6.6.1
collection:
dir: solr/config/
name: hydra-development
Expand Down
68 changes: 49 additions & 19 deletions app/presenters/hyku/manifest_enabled_work_show_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,31 @@ def manifest_url
manifest_helper.polymorphic_url([:manifest, self])
end

# Hash to populate IIIF manifest with extras. Currently only sequence rendering is implemented.
# IIIF rendering linking property for inclusion in the manifest
#
# @return [Hash] hash including sequence_rendering
def manifest_extras
{
sequence_rendering: sequence_rendering
}
# @return [Array] array of rendering hashes
def sequence_rendering
renderings = []
if solr_document.rendering_ids.present?
solr_document.rendering_ids.each do |file_set_id|
renderings << build_rendering(file_set_id)
end
end
renderings.flatten
end

# IIIF metadata for inclusion in the manifest
#
# @return [Array] array of metadata hashes
def manifest_metadata
metadata = []
metadata_fields.each do |field|
metadata << {
'label' => field.to_s.humanize.capitalize,
'value' => get_metadata_value(field)
}
end
metadata
end

private
Expand All @@ -23,19 +41,6 @@ def manifest_helper
@manifest_helper ||= ManifestHelper.new(request.base_url)
end

# IIIF rendering linking property for inclusion in the manifest
#
# @return [Array] array of rendering hashes
def sequence_rendering
renderings = []
if solr_document.rendering_ids.present?
solr_document.rendering_ids.each do |file_set_id|
renderings << build_rendering(file_set_id)
end
end
renderings.flatten
end

# Build a rendering hash
#
# @return [Hash] rendering
Expand All @@ -58,5 +63,30 @@ def query_for_rendering(file_set_id)
fl: [ActiveFedora.id_field, 'label_ssi', 'mime_type_ssi'],
rows: 1)
end

# Retrieve the required fields from the Form class. Derive the Form class name from the Model name.
# The class should exist, but it may not if different amespaces are being used.
# If it does not exist, rescue and return an empty Array.
#
# @return [Array] required fields
def metadata_fields
ns = "Hyrax"
model = solr_document['has_model_ssim'].first

"#{ns}::#{model}Form".constantize.required_fields
rescue
[]
end

# Get the metadata value; return a String for single values and an Array of hashes for multiple values.
#
# @return [String or Array] field value(s)
def get_metadata_value(field)
if send(field).count == 1
send(field).first
else
send(field).collect { |f| { "@value" => f } }
end
end
end
end
2 changes: 2 additions & 0 deletions config/solr_wrapper_test.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Place any default configuration for solr_wrapper here
port: 8985
# TODO: Relax this when we're Solr 7-compliant
version: 6.6.1
collection:
dir: solr/config/
name: hydra-test
Expand Down
17 changes: 14 additions & 3 deletions spec/presenters/hyku/manifest_enabled_work_show_presenter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
end
end

describe "manifest_extras" do
describe "#sequence rendering" do
subject do
presenter.manifest_extras
presenter.sequence_rendering
end

before do
Expand All @@ -37,7 +37,18 @@

it "returns a hash containing the rendering information" do
work.rendering_ids = [work.file_sets.first.id]
expect(subject).to include(:sequence_rendering)
expect(subject).to be_an Array
end
end

describe "#manifest metadata" do
subject do
presenter.manifest_metadata
end

it "returns a hash containing the metadata" do
expect(subject).to be_a Array
expect(subject[0]['value']).to eq 'Test title'
end
end
end

0 comments on commit 6e54580

Please sign in to comment.