diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-12-13 12:15:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-13 12:15:28 +0100 |
commit | a8deb6648bc348e64469cc3451040b46ea057b77 (patch) | |
tree | 2f17f5b741bc3d1962201561d3eb3d716858b46e /app/lib | |
parent | 20a6584d2dd9d5ecaa19a45a0c0c5ffec5a100ff (diff) |
Fix redundant HTTP request in FetchLinkCardService (#6002)
Diffstat (limited to 'app/lib')
-rw-r--r-- | app/lib/provider_discovery.rb | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/app/lib/provider_discovery.rb b/app/lib/provider_discovery.rb index bcc4ed500..04ba38101 100644 --- a/app/lib/provider_discovery.rb +++ b/app/lib/provider_discovery.rb @@ -2,13 +2,26 @@ class ProviderDiscovery < OEmbed::ProviderDiscovery class << self + def get(url, **options) + provider = discover_provider(url, options) + + options.delete(:html) + + provider.get(url, options) + end + def discover_provider(url, **options) - res = Request.new(:get, url).perform format = options[:format] - raise OEmbed::NotFound, url if res.code != 200 || res.mime_type != 'text/html' + if options[:html] + html = Nokogiri::HTML(options[:html]) + else + res = Request.new(:get, url).perform + + raise OEmbed::NotFound, url if res.code != 200 || res.mime_type != 'text/html' - html = Nokogiri::HTML(res.to_s) + html = Nokogiri::HTML(res.to_s) + end if format.nil? || format == :json provider_endpoint ||= html.at_xpath('//link[@type="application/json+oembed"]')&.attribute('href')&.value |