class Keratin::Client

Attributes

base[R]

Public Class Methods

new(base_url, username: nil, password: nil) click to toggle source
# File lib/keratin/client.rb, line 33
def initialize(base_url, username: nil, password: nil)
  @base = base_url.chomp('/')
  @auth = [username, password] if username && password
end

Private Instance Methods

delete(**opts) click to toggle source
# File lib/keratin/client.rb, line 50
        def delete(**opts)
  submit(Net::HTTP::Delete, **opts)
end
get(**opts) click to toggle source
# File lib/keratin/client.rb, line 38
        def get(**opts)
  submit(Net::HTTP::Get, **opts)
end
patch(**opts) click to toggle source
# File lib/keratin/client.rb, line 46
        def patch(**opts)
  submit(Net::HTTP::Patch, **opts)
end
post(**opts) click to toggle source
# File lib/keratin/client.rb, line 42
        def post(**opts)
  submit(Net::HTTP::Post, **opts)
end
submit(request_klass, path:, body: nil) click to toggle source
# File lib/keratin/client.rb, line 54
        def submit(request_klass, path:, body: nil)
  uri = URI.parse("#{base}#{path}")

  request = request_klass.new(uri)
  request.basic_auth(*@auth) if @auth
  request.set_form_data(body) if body

  Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
    http.open_timeout = 0.5
    http.read_timeout = 2.0

    case response = http.request(request)
    when Net::HTTPSuccess
      body = (response.body && !response.body.empty?) ? response.body : '{}'
      return ServiceResult.new(JSON.parse(body))
    when Net::HTTPRedirection
      return ServiceResult.new('result' => {
        'location' => response['Location']
      })
    when Net::HTTPClientError
      raise ClientError, JSON.parse(response.body)['errors']
    when Net::HTTPServerError
      raise ServiceError, response.body
    end
  end
rescue Net::OpenTimeout, Net::ReadTimeout => e
  raise ServiceError, e.message
end