lib/onebox/engine.rb in onebox-1.8.80 vs lib/onebox/engine.rb in onebox-1.8.81
- old
+ new
@@ -1,188 +1,188 @@
-module Onebox
- module Engine
- def self.included(object)
- object.extend(ClassMethods)
- end
-
- def self.engines
- constants.select do |constant|
- constant.to_s =~ /Onebox$/
- end.map(&method(:const_get))
- end
-
- attr_reader :url, :uri
- attr_reader :cache
- attr_reader :timeout
-
- DEFAULT = {}
- def options
- @options
- end
-
- def options=(opt)
- return @options if opt.nil? #make sure options provided
- opt = opt.to_h if opt.instance_of?(OpenStruct)
- @options.merge!(opt)
- @options
- end
-
- def initialize(link, cache = nil, timeout = nil)
- @options = DEFAULT
- class_name = self.class.name.split("::").last.to_s
- self.options = Onebox.options[class_name] || {} #Set the engine options extracted from global options.
-
- @url = link
- @uri = URI(link)
- if always_https?
- @uri.scheme = 'https'
- @url = @uri.to_s
- end
- @cache = cache || Onebox.options.cache
- @timeout = timeout || Onebox.options.timeout
- end
-
- # raises error if not defined in onebox engine.
- # This is the output method for an engine.
- def to_html
- fail NoMethodError, "Engines need to implement this method"
- end
-
- # Some oneboxes create iframes or other complicated controls. If you're using
- # a live editor with HTML preview, rendering those complicated controls can
- # be slow or cause flickering.
- #
- # This method allows engines to produce a placeholder such as static image
- # frame of a video.
- #
- # By default it just calls `to_html` unless implemented.
- def placeholder_html
- to_html
- end
-
- private
-
- def record
- url_result = url
- result = cache.fetch(url_result) { data }
- cache[url_result] = result if cache.respond_to?(:key?)
- result
- end
-
- # raises error if not defined in onebox engine
- # in each onebox, uses either Nokogiri or StandardEmbed to get raw HTML from url
- def raw
- fail NoMethodError, "Engines need to implement this method"
- end
-
- # raises error if not defined in onebox engine
- # in each onebox, returns hash of desired onebox content
- def data
- fail NoMethodError, "Engines need this method defined"
- end
-
- def link
- @url.gsub(/['\"<>]/,
- "'" => ''',
- '"' => '"',
- '<' => '<',
- '>' => '>',
- )
- end
-
- def always_https?
- self.class.always_https?
- end
-
- module ClassMethods
- def ===(other)
- if other.kind_of?(URI)
- !!(other.to_s =~ class_variable_get(:@@matcher))
- else
- super
- end
- end
-
- def priority
- 100
- end
-
- def matches_regexp(r)
- class_variable_set :@@matcher, r
- end
-
- # calculates a name for onebox using the class name of engine
- def onebox_name
- name.split("::").last.downcase.gsub(/onebox/, "")
- end
-
- def always_https
- @https = true
- end
-
- def always_https?
- @https
- end
- end
- end
-end
-
-require_relative "helpers"
-require_relative "layout_support"
-require_relative "file_type_finder"
-require_relative "engine/standard_embed"
-require_relative "engine/html"
-require_relative "engine/json"
-require_relative "engine/amazon_onebox"
-require_relative "engine/github_issue_onebox"
-require_relative "engine/github_blob_onebox"
-require_relative "engine/github_commit_onebox"
-require_relative "engine/github_gist_onebox"
-require_relative "engine/github_pullrequest_onebox"
-require_relative "engine/google_calendar_onebox"
-require_relative "engine/google_docs_onebox"
-require_relative "engine/google_maps_onebox"
-require_relative "engine/google_play_app_onebox"
-require_relative "engine/image_onebox"
-require_relative "engine/video_onebox"
-require_relative "engine/audio_onebox"
-require_relative "engine/stack_exchange_onebox"
-require_relative "engine/twitter_status_onebox"
-require_relative "engine/wikimedia_onebox"
-require_relative "engine/wikipedia_onebox"
-require_relative "engine/youtube_onebox"
-require_relative "engine/youku_onebox"
-require_relative "engine/douban_onebox"
-require_relative "engine/whitelisted_generic_onebox"
-require_relative "engine/pubmed_onebox"
-require_relative "engine/soundcloud_onebox"
-require_relative "engine/imgur_onebox"
-require_relative "engine/pastebin_onebox"
-require_relative "engine/slides_onebox"
-require_relative "engine/xkcd_onebox"
-require_relative "engine/giphy_onebox"
-require_relative "engine/gfycat_onebox"
-require_relative "engine/typeform_onebox"
-require_relative "engine/vimeo_onebox"
-require_relative "engine/steam_store_onebox"
-require_relative "engine/sketchfab_onebox"
-require_relative "engine/audioboom_onebox"
-require_relative "engine/replit_onebox"
-require_relative "engine/asciinema_onebox"
-require_relative "engine/mixcloud_onebox"
-require_relative "engine/bandcamp_onebox"
-require_relative "engine/coub_onebox"
-require_relative "engine/flickr_onebox"
-require_relative "engine/flickr_shortened_onebox"
-require_relative "engine/five_hundred_px_onebox"
-require_relative "engine/pdf_onebox"
-require_relative "engine/twitch_clips_onebox"
-require_relative "engine/twitch_stream_onebox"
-require_relative "engine/twitch_video_onebox"
-require_relative "engine/trello_onebox"
-require_relative "engine/wechat_mp_onebox"
-require_relative "engine/cloudapp_onebox"
-require_relative "engine/wistia_onebox"
-require_relative "engine/instagram_onebox"
-require_relative "engine/gitlab_blob_onebox"
-require_relative "engine/google_photos_onebox"
-require_relative "engine/kaltura_onebox"
+module Onebox
+ module Engine
+ def self.included(object)
+ object.extend(ClassMethods)
+ end
+
+ def self.engines
+ constants.select do |constant|
+ constant.to_s =~ /Onebox$/
+ end.map(&method(:const_get))
+ end
+
+ attr_reader :url, :uri
+ attr_reader :cache
+ attr_reader :timeout
+
+ DEFAULT = {}
+ def options
+ @options
+ end
+
+ def options=(opt)
+ return @options if opt.nil? #make sure options provided
+ opt = opt.to_h if opt.instance_of?(OpenStruct)
+ @options.merge!(opt)
+ @options
+ end
+
+ def initialize(link, cache = nil, timeout = nil)
+ @options = DEFAULT
+ class_name = self.class.name.split("::").last.to_s
+ self.options = Onebox.options[class_name] || {} #Set the engine options extracted from global options.
+
+ @url = link
+ @uri = URI(link)
+ if always_https?
+ @uri.scheme = 'https'
+ @url = @uri.to_s
+ end
+ @cache = cache || Onebox.options.cache
+ @timeout = timeout || Onebox.options.timeout
+ end
+
+ # raises error if not defined in onebox engine.
+ # This is the output method for an engine.
+ def to_html
+ fail NoMethodError, "Engines need to implement this method"
+ end
+
+ # Some oneboxes create iframes or other complicated controls. If you're using
+ # a live editor with HTML preview, rendering those complicated controls can
+ # be slow or cause flickering.
+ #
+ # This method allows engines to produce a placeholder such as static image
+ # frame of a video.
+ #
+ # By default it just calls `to_html` unless implemented.
+ def placeholder_html
+ to_html
+ end
+
+ private
+
+ def record
+ url_result = url
+ result = cache.fetch(url_result) { data }
+ cache[url_result] = result if cache.respond_to?(:key?)
+ result
+ end
+
+ # raises error if not defined in onebox engine
+ # in each onebox, uses either Nokogiri or StandardEmbed to get raw HTML from url
+ def raw
+ fail NoMethodError, "Engines need to implement this method"
+ end
+
+ # raises error if not defined in onebox engine
+ # in each onebox, returns hash of desired onebox content
+ def data
+ fail NoMethodError, "Engines need this method defined"
+ end
+
+ def link
+ @url.gsub(/['\"<>]/,
+ "'" => ''',
+ '"' => '"',
+ '<' => '<',
+ '>' => '>',
+ )
+ end
+
+ def always_https?
+ self.class.always_https?
+ end
+
+ module ClassMethods
+ def ===(other)
+ if other.kind_of?(URI)
+ !!(other.to_s =~ class_variable_get(:@@matcher))
+ else
+ super
+ end
+ end
+
+ def priority
+ 100
+ end
+
+ def matches_regexp(r)
+ class_variable_set :@@matcher, r
+ end
+
+ # calculates a name for onebox using the class name of engine
+ def onebox_name
+ name.split("::").last.downcase.gsub(/onebox/, "")
+ end
+
+ def always_https
+ @https = true
+ end
+
+ def always_https?
+ @https
+ end
+ end
+ end
+end
+
+require_relative "helpers"
+require_relative "layout_support"
+require_relative "file_type_finder"
+require_relative "engine/standard_embed"
+require_relative "engine/html"
+require_relative "engine/json"
+require_relative "engine/amazon_onebox"
+require_relative "engine/github_issue_onebox"
+require_relative "engine/github_blob_onebox"
+require_relative "engine/github_commit_onebox"
+require_relative "engine/github_gist_onebox"
+require_relative "engine/github_pullrequest_onebox"
+require_relative "engine/google_calendar_onebox"
+require_relative "engine/google_docs_onebox"
+require_relative "engine/google_maps_onebox"
+require_relative "engine/google_play_app_onebox"
+require_relative "engine/image_onebox"
+require_relative "engine/video_onebox"
+require_relative "engine/audio_onebox"
+require_relative "engine/stack_exchange_onebox"
+require_relative "engine/twitter_status_onebox"
+require_relative "engine/wikimedia_onebox"
+require_relative "engine/wikipedia_onebox"
+require_relative "engine/youtube_onebox"
+require_relative "engine/youku_onebox"
+require_relative "engine/douban_onebox"
+require_relative "engine/whitelisted_generic_onebox"
+require_relative "engine/pubmed_onebox"
+require_relative "engine/soundcloud_onebox"
+require_relative "engine/imgur_onebox"
+require_relative "engine/pastebin_onebox"
+require_relative "engine/slides_onebox"
+require_relative "engine/xkcd_onebox"
+require_relative "engine/giphy_onebox"
+require_relative "engine/gfycat_onebox"
+require_relative "engine/typeform_onebox"
+require_relative "engine/vimeo_onebox"
+require_relative "engine/steam_store_onebox"
+require_relative "engine/sketchfab_onebox"
+require_relative "engine/audioboom_onebox"
+require_relative "engine/replit_onebox"
+require_relative "engine/asciinema_onebox"
+require_relative "engine/mixcloud_onebox"
+require_relative "engine/bandcamp_onebox"
+require_relative "engine/coub_onebox"
+require_relative "engine/flickr_onebox"
+require_relative "engine/flickr_shortened_onebox"
+require_relative "engine/five_hundred_px_onebox"
+require_relative "engine/pdf_onebox"
+require_relative "engine/twitch_clips_onebox"
+require_relative "engine/twitch_stream_onebox"
+require_relative "engine/twitch_video_onebox"
+require_relative "engine/trello_onebox"
+require_relative "engine/wechat_mp_onebox"
+require_relative "engine/cloudapp_onebox"
+require_relative "engine/wistia_onebox"
+require_relative "engine/instagram_onebox"
+require_relative "engine/gitlab_blob_onebox"
+require_relative "engine/google_photos_onebox"
+require_relative "engine/kaltura_onebox"