Examples of Open Graph protocol markup.
+ +Open Graph namespace
-
+
- Missing required properties +
- Required properties +
- Most properties, no media +
- Canadian (en_CA) +
- Images +
- Audio +
- Video +
diff --git a/lib/oneboxer.rb b/lib/oneboxer.rb index edb47930f4f..19580fc4b41 100644 --- a/lib/oneboxer.rb +++ b/lib/oneboxer.rb @@ -402,21 +402,25 @@ module Oneboxer # NOTE: Call r.errors after calling placeholder_html if r.errors.any? - missing_attributes = r.errors.keys.map(&:to_s).sort.join(I18n.t("word_connector.comma")) - error_message = I18n.t("errors.onebox.missing_data", missing_attributes: missing_attributes, count: r.errors.keys.size) - args = r.data.merge(error_message: error_message) + error_keys = r.errors.keys + skip_if_only_error = [:image] + unless error_keys.length == 1 && skip_if_only_error.include?(error_keys.first) + missing_attributes = error_keys.map(&:to_s).sort.join(I18n.t("word_connector.comma")) + error_message = I18n.t("errors.onebox.missing_data", missing_attributes: missing_attributes, count: error_keys.size) + args = r.data.merge(error_message: error_message) - if result[:preview].blank? - result[:preview] = preview_error_onebox(args) - else - doc = Nokogiri::HTML5::fragment(result[:preview]) - aside = doc.at('aside') + if result[:preview].blank? + result[:preview] = preview_error_onebox(args) + else + doc = Nokogiri::HTML5::fragment(result[:preview]) + aside = doc.at('aside') - if aside - # Add an error message to the preview that was returned - error_fragment = preview_error_onebox_fragment(args) - aside.add_child(error_fragment) - result[:preview] = doc.to_html + if aside + # Add an error message to the preview that was returned + error_fragment = preview_error_onebox_fragment(args) + aside.add_child(error_fragment) + result[:preview] = doc.to_html + end end end end diff --git a/spec/components/oneboxer_spec.rb b/spec/components/oneboxer_spec.rb index 1b3ec47d571..c260a0ae261 100644 --- a/spec/components/oneboxer_spec.rb +++ b/spec/components/oneboxer_spec.rb @@ -272,6 +272,12 @@ describe Oneboxer do expect(Oneboxer.preview(url, invalidate_oneboxes: true)).to include("could not be found: description, image") end + it 'handles a missing image' do + # Note: If the only error is a missing image, we shouldn't return an error + stub_request(:get, url).to_return(body: response("missing_image")) + expect(Oneboxer.preview(url, invalidate_oneboxes: true)).not_to include("could not be found") + end + it 'video with missing description returns a placeholder' do stub_request(:get, url).to_return(body: response("video_missing_description")) expect(Oneboxer.preview(url, invalidate_oneboxes: true)).to include("onebox-placeholder-container") diff --git a/spec/fixtures/onebox/missing_image.response b/spec/fixtures/onebox/missing_image.response new file mode 100644 index 00000000000..ec4a1024311 --- /dev/null +++ b/spec/fixtures/onebox/missing_image.response @@ -0,0 +1,60 @@ + + +
+ + +Examples of Open Graph protocol markup.
+ +