class Cloudimage::URI

Attributes

config[R]
params[R]
path[R]
sealed_params[R]
uri[R]

Public Class Methods

new(path, **config) click to toggle source
# File lib/cloudimage/uri.rb, line 21
def initialize(path, **config)
  @config = config
  @params = {}
  @sealed_params = Set.new
  @path = transform(path)
  @uri = build_uri
end

Public Instance Methods

to_url(**extra_params) click to toggle source
# File lib/cloudimage/uri.rb, line 41
def to_url(**extra_params)
  set_uri_params(**extra_params)
  secure_url
  uri.to_s
end

Private Instance Methods

api_version() click to toggle source
# File lib/cloudimage/uri.rb, line 55
def api_version
  "/#{config[:api_version]}"
end
apply_aliases(path) click to toggle source
# File lib/cloudimage/uri.rb, line 65
def apply_aliases(path)
  # path and aliases can be frozen
  aliases = config[:aliases].dup

  aliases[default_alias] = ''

  path.dup.tap do |input|
    aliases.each do |source, target|
      input.sub!(source, target)
    end
  end
end
build_uri() click to toggle source
# File lib/cloudimage/uri.rb, line 86
def build_uri
  if config[:include_api_version]
    Addressable::URI.parse(site + api_version + path)
  else
    Addressable::URI.parse(site + path)
  end
end
default_alias() click to toggle source
# File lib/cloudimage/uri.rb, line 78
def default_alias
  config[:include_api_version] ? "#{site}#{api_version}/" : "#{site}/"
end
request_uri() click to toggle source
# File lib/cloudimage/uri.rb, line 82
def request_uri
  uri.request_uri.delete_prefix(api_version)
end
secure_url() click to toggle source
# File lib/cloudimage/uri.rb, line 102
def secure_url
  return uri.to_s if config[:salt].nil?

  security = Security.new(uri, **config)

  if config[:sign_urls]
    security.sign_url(request_uri)
  else
    security.seal_url(path, sealed_params)
  end
end
set_uri_params(**extra_params) click to toggle source
# File lib/cloudimage/uri.rb, line 94
def set_uri_params(**extra_params)
  seal_params(*extra_params.delete(:seal_params))
  url_params = params.merge(**extra_params)
  return unless url_params.any?

  uri.query_values = url_params
end
site() click to toggle source
# File lib/cloudimage/uri.rb, line 49
def site
  return "https://#{config[:cname]}" if config[:cname]

  "https://#{config[:token]}.cloudimg.io"
end
transform(path) click to toggle source
# File lib/cloudimage/uri.rb, line 59
def transform(path)
  path
    .then { |input| input.start_with?('/') ? input : "/#{input}" }
    .then(&method(:apply_aliases))
end