diff --git a/app/services/manifest_builder/license_builder.rb b/app/services/manifest_builder/license_builder.rb index e901de0d11..8e7f92da77 100644 --- a/app/services/manifest_builder/license_builder.rb +++ b/app/services/manifest_builder/license_builder.rb @@ -10,7 +10,7 @@ def initialize(resource) end ## - # Append the metadata to the IIIF Manifest + # Append the license to the IIIF Manifest # @param [IIIF::Presentation::Manifest] manifest the IIIF manifest being # @return [IIIF::Presentation::Manifest] def apply(manifest) @@ -21,7 +21,7 @@ def apply(manifest) private def license - statements = @resource.decorate.rights_statement.map(&:value) + statements = resource.decorate.rights_statement.map(&:value) statements.empty? ? nil : statements.first rescue nil diff --git a/app/services/manifest_builder/manifest_service_locator.rb b/app/services/manifest_builder/manifest_service_locator.rb index 91bfa345c3..cbc80ba4b6 100644 --- a/app/services/manifest_builder/manifest_service_locator.rb +++ b/app/services/manifest_builder/manifest_service_locator.rb @@ -25,6 +25,13 @@ def license_builder ManifestBuilder::LicenseBuilder end + ## + # Class accessor for the rendering builder + # @return [Class] + def rendering_builder + ManifestBuilder::RenderingBuilder + end + def child_manifest_builder ConditionalCollectionManifest.new(manifest_builder: real_child_manifest_builder, collection_builder: child_collection_builder) end @@ -144,6 +151,7 @@ def manifest_builders see_also_builder, license_builder, thumbnail_builder, + rendering_builder, composite_builder: composite_builder ) end diff --git a/app/services/manifest_builder/rendering_builder.rb b/app/services/manifest_builder/rendering_builder.rb new file mode 100644 index 0000000000..bd67c81ba3 --- /dev/null +++ b/app/services/manifest_builder/rendering_builder.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true +class ManifestBuilder + class RenderingBuilder + attr_reader :resource + + ## + # @param [Valhalla::Resource] resource the Resource being viewed + def initialize(resource) + @resource = RootNode.new(resource) + end + + ## + # Append the license to the IIIF Manifest + # @param [IIIF::Presentation::Manifest] manifest the IIIF manifest being + # @return [IIIF::Presentation::Manifest] + def apply(manifest) + manifest.rendering = rendering_hash if identifier? + manifest + end + + private + + def identifier? + resource.decorate.identifier.present? + end + + def identifier + Array.wrap(resource.decorate.identifier).first + end + + def rendering_hash + { + "@id" => "http://arks.princeton.edu/#{identifier}", + "format" => "text/html" + } + end + end +end diff --git a/spec/services/manifest_builder_spec.rb b/spec/services/manifest_builder_spec.rb index b6ca9549e5..bf015aa3c3 100644 --- a/spec/services/manifest_builder_spec.rb +++ b/spec/services/manifest_builder_spec.rb @@ -135,7 +135,7 @@ def logical_structure(file_set_id) end end context "when given a nested child" do - let(:scanned_resource) { FactoryGirl.create_for_repository(:scanned_resource, member_ids: child.id) } + let(:scanned_resource) { FactoryGirl.create_for_repository(:scanned_resource, member_ids: child.id, identifier: '5m60qr98h') } let(:child) { FactoryGirl.create_for_repository(:scanned_resource, files: [file]) } it "builds a IIIF collection" do output = manifest_builder.build @@ -145,6 +145,9 @@ def logical_structure(file_set_id) expect(output["manifests"].length).to eq 1 expect(output["manifests"][0]["@id"]).to eq "http://www.example.com/concern/scanned_resources/#{child.id}/manifest" expect(output["manifests"][0]["viewingHint"]).to be_nil + expect(output["seeAlso"]).to include "@id" => "http://www.example.com/catalog/#{scanned_resource.id}.jsonld", "format" => "application/ld+json" + expect(output["rendering"]).to eq "http://arks.princeton.edu/ark:/88435/5m60qr98h" + expect(output["license"]).to eq "http://rightsstatements.org/vocab/NKC/1.0/" end end context "when given a scanned map" do