From 38bae937752ce1d71c0415be5719e18f8d6fb357 Mon Sep 17 00:00:00 2001 From: Jessie Keck Date: Tue, 19 Dec 2017 15:21:43 -0800 Subject: [PATCH] Allow for exhibit specific manifest URL patterns to be used for our oembed tag. This allows us to configure, on a per exhibit basis, to use a different oEmbed environment. --- CHANGELOG.md | 1 + app/helpers/application_helper.rb | 3 +- config/initializers/oembed_providers.rb | 5 +++ spec/helpers/application_helper_spec.rb | 41 +++++++++++++++++++++---- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c52315bfa..3d10cb213 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - Added support for highlighting matching query terms from full-text content in search results #1030 - Adds Stanford-specific helptext to the add admin/curator form #1040 +- Added support for using the exhibit specific manifest URL configuration to configure the SUL Embed environment to be used #1042 ### Changed ### Deprecated ### Removed diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index eb9eb8db9..fae264914 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -45,7 +45,8 @@ def render_viewer_in_context(document, block) # @param [SolrDocument] document # @param [Integer] canvas_index def custom_render_oembed_tag_async(document, canvas_index) - url = document.first(blacklight_config.show.oembed_field) + url = document.exhibit_specific_manifest(current_exhibit.required_viewer.custom_manifest_pattern) + url ||= document.first(blacklight_config.show.oembed_field) content_tag :div, '', data: { embed_url: blacklight_oembed_engine.embed_url(url: url, canvas_index: canvas_index) } end diff --git a/config/initializers/oembed_providers.rb b/config/initializers/oembed_providers.rb index fbfb46d66..e6c3a958b 100644 --- a/config/initializers/oembed_providers.rb +++ b/config/initializers/oembed_providers.rb @@ -6,4 +6,9 @@ purl_provider << 'http://purl.stanford.edu/*' purl_provider << 'https://purl.stanford.edu/*' purl_provider << 'http://searchworks.stanford.edu/*' + +purl_uat_provider = OEmbed::Provider.new('http://sul-purl-uat.stanford.edu/embed.{format}?&hide_title=true') +purl_uat_provider << 'https://sul-purl-uat.stanford.edu/*' + OEmbed::Providers.register(purl_provider) +OEmbed::Providers.register(purl_uat_provider) diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index fb2cb6d2b..60164c019 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -20,13 +20,42 @@ end describe '#custom_render_oembed_tag_async' do - let(:document) { SolrDocument.new(url_fulltext: ['http://example.com/stuff']) } + context 'when no custom viewer pattern is set' do + let(:document) { SolrDocument.new(url_fulltext: ['http://example.com/stuff']) } - it 'renders a div with embed attribute and canvas index param' do - expect(helper).to receive_messages(blacklight_config: CatalogController.blacklight_config) - rendered = helper.custom_render_oembed_tag_async(document, 3) - expect(rendered).to have_css '[data-embed-url="http://test.host/oembed/e'\ - 'mbed?canvas_index=3&url=http%3A%2F%2Fexample.com%2Fstuff"]' + it 'renders a div with embed attribute and canvas index param' do + expect(helper).to receive_messages( + blacklight_config: CatalogController.blacklight_config, + current_exhibit: create(:exhibit) + ) + rendered = helper.custom_render_oembed_tag_async(document, 3) + expect(rendered).to have_css '[data-embed-url="http://test.host/oembed/e'\ + 'mbed?canvas_index=3&url=http%3A%2F%2Fexample.com%2Fstuff"]' + end + end + + context 'when a custom viewer pattern is provided' do + let(:document) do + SolrDocument.new( + id: 'abc123', + url_fulltext: ['http://example.com/stuff'], + content_metadata_type_ssm: ['image'], + iiif_manifest_url_ssi: 'htts://example.com/info.json' + ) + end + + it 'uses a custom manifest pattern if set' do + expect(helper).to receive_messages( + current_exhibit: create( + :exhibit, + viewer: create(:viewer, custom_manifest_pattern: 'https://embed-example.com/{id}') + ) + ) + rendered = helper.custom_render_oembed_tag_async(document, 1) + + expect(rendered).to have_css '[data-embed-url="http://test.host/oembed/e'\ + 'mbed?canvas_index=1&url=https%3A%2F%2Fembed-example.com%2Fabc123"]' + end end end