class CrushPics::Client

Attributes

api_token[R]
response[R]

Public Class Methods

new(api_token:) click to toggle source
# File lib/crush_pics/client.rb, line 7
def initialize(api_token:)
  @api_token = api_token
end

Public Instance Methods

compress_async(io: nil, url: nil, level:, type:) { |response| ... } click to toggle source
# File lib/crush_pics/client.rb, line 11
def compress_async(io: nil, url: nil, level:, type:)
  attrs = build_image_attributes(io: io, url: url, level: level, type: type)

  http_post('original_images', attrs)
  return yield(response) if block_given?

  response
end
compress_sync(io: nil, url: nil, level:, type:) { |response| ... } click to toggle source
# File lib/crush_pics/client.rb, line 20
def compress_sync(io: nil, url: nil, level:, type:)
  attrs = build_image_attributes(io: io, url: url, level: level, type: type)

  http_post('compress', attrs)
  return yield(response) if block_given?

  response
end
dashboard() { |response| ... } click to toggle source
# File lib/crush_pics/client.rb, line 45
def dashboard
  http_get('dashboard')
  return yield(response) if block_given?

  response
end
fetch_image(id) { |response| ... } click to toggle source
# File lib/crush_pics/client.rb, line 38
def fetch_image(id)
  http_get("original_images/#{ id }")
  return yield(response) if block_given?

  response
end
http_delete(path, headers = {}) click to toggle source
# File lib/crush_pics/client.rb, line 81
def http_delete(path, headers = {})
  uri = URI(base_url + '/' + path)
  request = Net::HTTP::Delete.new(uri)
  headers.transform_keys! { |key| key.to_s.tr('_', '-') }
  default_headers.merge(headers).each { |k, v| request[k] = v }

  perform_request(request, uri)
end
http_get(path, headers = {}) click to toggle source
# File lib/crush_pics/client.rb, line 52
def http_get(path, headers = {})
  uri = URI(base_url + '/' + path)
  request = Net::HTTP::Get.new(uri)
  headers.transform_keys! { |key| key.to_s.tr('_', '-') }
  default_headers.merge(headers).each { |k, v| request[k] = v }

  perform_request(request, uri)
end
http_patch(path, payload, headers = {}) click to toggle source
# File lib/crush_pics/client.rb, line 71
def http_patch(path, payload, headers = {})
  uri = URI(base_url + '/' + path)
  request = Net::HTTP::Patch.new(uri)
  headers.transform_keys! { |key| key.to_s.tr('_', '-') }
  default_headers.merge(headers).each { |k, v| request[k] = v }
  request.set_form_data(payload)

  perform_request(request, uri)
end
http_post(path, payload, headers = {}) click to toggle source
# File lib/crush_pics/client.rb, line 61
def http_post(path, payload, headers = {})
  uri = URI(base_url + '/' + path)
  request = Net::HTTP::Post.new(uri)
  headers.transform_keys! { |key| key.to_s.tr('_', '-') }
  default_headers.merge(headers).each { |k, v| request[k] = v }
  request.set_form_data(payload)

  perform_request(request, uri)
end
list_images(page = nil) { |response| ... } click to toggle source
# File lib/crush_pics/client.rb, line 29
def list_images(page = nil)
  path = 'images'
  path = "images/?page=#{ page }" if page
  http_get(path)
  return yield(response) if block_given?

  response
end

Private Instance Methods

base_url() click to toggle source
# File lib/crush_pics/client.rb, line 124
def base_url
  URI.join(CrushPics.configuration.base_url, CrushPics.configuration.api_version).to_s
end
build_image_attributes(io: nil, url: nil, level:, type:) click to toggle source
# File lib/crush_pics/client.rb, line 110
def build_image_attributes(io: nil, url: nil, level:, type:)
  attrs = { origin: 'api', compression_level: level, compression_type: type }

  if io
    attrs.store(:file, io)
  elsif url
    attrs.store(:image_url, url)
  else
    raise StandardError, 'Specify image IO or URL'
  end

  attrs
end
check_response!() click to toggle source
# File lib/crush_pics/client.rb, line 92
def check_response!
  return if response.success? || response.validation_error?

  raise(CrushPics::ServerError) if response.server_error?

  raise(CrushPics::UnauthorizedError) if response.unauthorized?

  raise(CrushPics::ClientError, response.response.message) if response.client_error?

  raise(CrushPics::UnknownError)
end
default_headers() click to toggle source
# File lib/crush_pics/client.rb, line 104
def default_headers
  { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }.tap do |h|
    h.store('Authorization', "Bearer #{ api_token }") if api_token
  end
end
perform_request(request, uri) click to toggle source
# File lib/crush_pics/client.rb, line 128
def perform_request(request, uri)
  http = Net::HTTP.new(uri.hostname, uri.port)
  http.use_ssl = true
  http.read_timeout = CrushPics.configuration.read_timeout
  http.set_debug_output(CrushPics.configuration.debug_logger) if CrushPics.configuration.debug_logger
  @response = CrushPics::Response.new(http.request(request))
  check_response!
  @response
end