richurls Build Status

A gem which can enrich urls with speed.

Installation

gem install richurls

Usage:

Default usage:

require 'richurls'

RichUrls.enrich('https://wetransfer.com')

# Returns:
# {
#   "title"=>"WeTransfer",
#   "description"=>"WeTransfer is the simplest way to send your files around the world",
#   "image"=>"https://prod-cdn.wetransfer.net/assets/wt-facebook-568be8def5a86a09cedeb21b8f24cb208e86515a552bd07d856c7d5dfc6a23df.png",
#   "provider_display"=>"https://wetransfer.com",
#   "favicon"=>"https://prod-cdn.wetransfer.net/assets/favicon-d12161435ace47c6883360e08466508593325f134c1852b1d0e6e75d5f76adda.ico",
#   "embed"=>nil
# }

Partial attributes:

require 'richurls'

RichUrls.enrich('https://wetransfer.com', filter: %w[title])

# Returns:
# {
#   "title"=>"WeTransfer"
# }

Caching:

By default caching is turned off. Caching can be enabled by writing a cache wrapper as such:

class CustomCache < RichUrls::Cache::Wrapper
  def initialize(time:)
    # Initialize the cache object by setting how long the cache will last
  end

  def get(key)
    # Callback for fetching a cache entry
  end

  def set(key, value, time)
    # Callback for setting a value in a cache to a certain key for a certain
    # `time`*.
  end

  def extend(key, time)
    # Callback for extending a cached value for a certain key for a certain
    # `time`*.
  end
end

Finally you can enable the CustomCache by adding:

RichUrls.cache = CustomCache.new(time: 7200)

* About custom cache time:

If you have caching enabled and would like to deviate from the default cache time per URL you enrich, it's possible to do so. You'd have to pass a cache_time parameter to the URL enricher as such:

RichUrls.enrich('https://wetransfer.com', cache_time: 3600)

This cache_time will be accessible through the time parameters in the set and extend methods on the Cache::Wrapper-instance and can be used as you please.

Swapping browsers

The default browser is curl in the form of Patron. However if you feel like swapping to a different 'browser' like HTTParty, RestClient or something like Ferrum feel free to do so. You can swap it by doing:

class CustomBrowser < RichUrls::Browser
  def remote_call(url)
    # Please make sure to return the variables in the function as such:
    [status, redirected_url, body]
  end
end

RichUrls.browser = CustomBrowser.new