require 'open-uri' require_dependency 'oneboxer/handlebars_onebox' module Oneboxer class OembedOnebox < HandlebarsOnebox def oembed_endpoint @url end def template template_path('oembed_onebox') end def onebox parsed = JSON.parse(open(oembed_endpoint).read) # If it's a video, just embed the iframe if %w(video rich).include?(parsed['type']) # Return a preview of the thumbnail url, since iframes don't do well on previews preview = nil preview = "" if parsed['thumbnail_url'].present? return [parsed['html'], preview] end if %w(image photo).include?(parsed['type']) return BaseOnebox.image_html(parsed['url'] || parsed['thumbnail_url'], parsed['title'], parsed['web_page'] || @url) end parsed['original_url'] = parsed['url'] parsed['html'] ||= parsed['abstract'] parsed['host'] = nice_host Mustache.render(File.read(template), parsed) rescue OpenURI::HTTPError nil end end end