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