Class: OEmbed::ProviderDiscovery
- Inherits:
-
Object
- Object
- OEmbed::ProviderDiscovery
- Extended by:
- HttpHelper
- Defined in:
- lib/oembed/provider_discovery.rb
Overview
Uses oEmbed Discover to generate a new Provider instance about a URL for which a Provider didn’t previously exist.
Class Method Summary collapse
-
.discover_provider(url, options = {}) ⇒ Object
Returns a new Provider instance based on information from oEmbed discovery performed on the given url.
-
.get(url, query = {}) ⇒ Object
Discover the Provider for the given url, then call Provider#get on that provider.
-
.raw(url, query = {}) ⇒ Object
deprecated
Deprecated.
Note: This method will be made private in the future.
Class Method Details
.discover_provider(url, options = {}) ⇒ Object
Returns a new Provider instance based on information from oEmbed discovery performed on the given url.
The options Hash recognizes the following keys:
- :format
-
If given only discover endpoints for the given format. If not format is given, use the first available format found.
- :timeout
-
specifies the timeout (in seconds) for the http request.
- :max_redirects
-
the number of times this request will follow 3XX redirects before throwing an error. Default: 4
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/oembed/provider_discovery.rb', line 33 def discover_provider(url, = {}) uri = URI.parse(url) res = http_get(uri, ) format = [:format] if format.nil? || format == :json provider_endpoint ||= /<link[^>]*href=['"]*([^\s'"]+)['"]*[^>]*application\/json\+oembed[^>]*>/.match(res)[1] rescue nil provider_endpoint ||= /<link[^>]*application\/json\+oembed[^>]*href=['"]*([^\s'"]+)['"]*[^>]*>/.match(res)[1] rescue nil format ||= :json if provider_endpoint end if format.nil? || format == :xml # {The specification}[http://oembed.com/#section4] says XML discovery should have # type="text/xml+oembed" but some providers use type="application/xml+oembed" provider_endpoint ||= /<link[^>]*href=['"]*([^\s'"]+)['"]*[^>]*(application|text)\/xml\+oembed[^>]*>/.match(res)[1] rescue nil provider_endpoint ||= /<link[^>]*(application|text)\/xml\+oembed[^>]*href=['"]*([^\s'"]+)['"]*[^>]*>/.match(res)[2] rescue nil format ||= :xml if provider_endpoint end begin provider_endpoint = URI.parse(provider_endpoint) provider_endpoint.query = nil provider_endpoint = provider_endpoint.to_s rescue URI::Error raise OEmbed::NotFound, url end Provider.new(provider_endpoint, format || OEmbed::Formatter.default) end |
.get(url, query = {}) ⇒ Object
Discover the Provider for the given url, then call Provider#get on that provider. The query parameter will be passed to both discover_provider and Provider#get
21 22 23 24 |
# File 'lib/oembed/provider_discovery.rb', line 21 def get(url, query={}) provider = discover_provider(url, query) provider.get(url, query) end |
.raw(url, query = {}) ⇒ Object
Note: This method will be made private in the future.
Discover the Provider for the given url, then call Provider#raw on that provider. The query parameter will be passed to both discover_provider and Provider#raw
14 15 16 17 |
# File 'lib/oembed/provider_discovery.rb', line 14 def raw(url, query={}) provider = discover_provider(url, query) provider.raw(url, query) end |