class Imgix::Client

Constants

DEFAULTS

Public Class Methods

new(options = {}) click to toggle source
# File lib/imgix/client.rb, line 12
def initialize(options = {})
  options = DEFAULTS.merge(options)
  @domain = options[:domain]

  validate_domain!

  @secure_url_token = options[:secure_url_token]
  @api_key = options[:api_key]
  @use_https = options[:use_https]
  @include_library_param = options.fetch(:include_library_param, true)
  @library = options.fetch(:library_param, "rb")
  @version = options.fetch(:library_version, Imgix::VERSION)
end

Public Instance Methods

path(path) click to toggle source
# File lib/imgix/client.rb, line 26
def path(path)
  p = Path.new(prefix, @secure_url_token, path)
  p.ixlib("#{@library}-#{@version}") if @include_library_param
  p
end
prefix() click to toggle source
# File lib/imgix/client.rb, line 48
def prefix
  "#{@use_https ? 'https' : 'http'}://#{@domain}"
end
purge(path) click to toggle source
# File lib/imgix/client.rb, line 32
def purge(path)
  api_key_error = "A valid API key is required to send purge requests"
  raise api_key_error if @api_key.nil?

  endpoint = URI.parse("https://api.imgix.com/api/v1/purge")
  # Ensure the path has been prefixed with '/'.
  path = path.start_with?("/") ? path : "/#{path}"
  url = prefix + path

  req = create_request(endpoint, url, :json_data_from)

  sock = Net::HTTP.new(endpoint.host, endpoint.port)
  sock.use_ssl = true
  sock.start { |http| http.request(req) }
end

Private Instance Methods

create_request(endpoint, resource, data_fmt = :json_data_from) click to toggle source

Create a request object by specifying it's endpoint, resource, and an optional data_fmt.

`endpoint` must be a valid URI object `resource` must be a valid URL designating the resource to be purged `data_fmt` must be a valid method or Proc object

Specify a `data_fmt` method when a resource (URL) requires additional formatting before being included in the request body. By default, the data format is specified by the `json_data_from` method.

# File lib/imgix/client.rb, line 65
def create_request(endpoint, resource, data_fmt = :json_data_from)
  req = Net::HTTP::Post.new(endpoint.path)
  req["Content-Type"] = "application/vnd.api+json"
  req["Authorization"] = "Bearer #{@api_key}"
  req["User-Agent"] = "imgix #{@library}-#{@version}"

  if data_fmt.is_a?(Proc)
    req.body = data_fmt.call(resource)
  elsif data_fmt.is_a?(Symbol)
    req.body = send(data_fmt, resource)
  else
    fmt_arg_error = "`fmt' is required to be of class Symbol or " \
      "Proc but was found to be\n\s\sof class #{data_fmt.class}\n"
    raise ArgumentError, fmt_arg_error
  end

  req
end
json_data_from(url) click to toggle source
# File lib/imgix/client.rb, line 84
def json_data_from(url)
  {
    data: {
      attributes: {
          url: url
      },
      type: "purges"
    }
  }.to_json
end
validate_domain!() click to toggle source
# File lib/imgix/client.rb, line 95
def validate_domain!
  domain_error  = "The :domain option must be specified"
  raise ArgumentError, domain_error if @domain.nil?

  domain_error = "Domains must be passed in as fully-qualified"\
                 "domain names and should not include a protocol"\
                 'or any path element, i.e. "example.imgix.net"'\

  raise ArgumentError, domain_error if @domain.match(DOMAIN_REGEX).nil?
end