Sha256: 673f909c45f21b9ea0f2b9b9c18a7dc0757d26298218c5ac4f42bde8d1a0e5c7
Contents?: true
Size: 1.65 KB
Versions: 2
Compression:
Stored size: 1.65 KB
Contents
# frozen_string_literal: true module Onebox module Engine class GoogleDocsOnebox include Engine include LayoutSupport def self.supported_endpoints %w(spreadsheets document forms presentation) end def self.short_types @shorttypes ||= { spreadsheets: :sheets, document: :docs, presentation: :slides, forms: :forms, } end matches_regexp(/^(https?:)?\/\/(docs\.google\.com)\/(?<endpoint>(#{supported_endpoints.join('|')}))\/d\/((?<key>[\w-]*)).+$/) always_https protected def data og_data = get_og_data { link: link, title: og_data[:title] || "Google #{shorttype.to_s.capitalize}", description: Onebox::Helpers.truncate(og_data[:description], 250) || "This #{shorttype.to_s.chop.capitalize} is private", type: shorttype } end def doc_type @doc_type ||= match[:endpoint].to_sym end def shorttype GoogleDocsOnebox.short_types[doc_type] end def match @match ||= @url.match(@@matcher) end def get_og_data response = Onebox::Helpers.fetch_response(url, redirect_limit: 10) rescue nil html = Nokogiri::HTML(response) og_data = {} html.css('meta').each do |m| if m.attribute('property') && m.attribute('property').to_s.match(/^og:/i) m_content = m.attribute('content').to_s.strip m_property = m.attribute('property').to_s.gsub('og:', '') og_data[m_property.to_sym] = m_content end end og_data end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
onebox-2.2.14 | lib/onebox/engine/google_docs_onebox.rb |
onebox-2.2.13 | lib/onebox/engine/google_docs_onebox.rb |