class Delighted::Client
Constants
- DEFAULT_ACCEPT_HEADER
- DEFAULT_API_BASE_URL
- DEFAULT_HTTP_ADAPTER
Public Class Methods
new(opts = {})
click to toggle source
# File lib/delighted/client.rb, line 7 def initialize(opts = {}) @api_key = opts[:api_key] or raise ArgumentError, "You must provide an API key by setting Delighted.api_key = '123abc' or passing { :api_key => '123abc' } when instantiating Delighted::Client.new" @api_base_url = opts[:api_base_url] || DEFAULT_API_BASE_URL @http_adapter = opts[:http_adapter] || DEFAULT_HTTP_ADAPTER end
Public Instance Methods
delete_json(path, params = {})
click to toggle source
# File lib/delighted/client.rb, line 51 def delete_json(path, params = {}) headers = default_headers.dup.merge('Accept' => 'application/json', 'Content-Type' => 'application/json') uri = URI.parse(File.join(@api_base_url, path)) data = JSON.dump(params) unless params.empty? response = @http_adapter.request(:delete, uri, headers, data) handle_json_response(response) end
get_json(path, params = {})
click to toggle source
# File lib/delighted/client.rb, line 13 def get_json(path, params = {}) request_get(path, {params: params})[:json] end
post_json(path, params = {})
click to toggle source
# File lib/delighted/client.rb, line 31 def post_json(path, params = {}) headers = default_headers.dup.merge('Accept' => 'application/json', 'Content-Type' => 'application/json') uri = URI.parse(File.join(@api_base_url, path)) data = JSON.dump(params) unless params.empty? response = @http_adapter.request(:post, uri, headers, data) handle_json_response(response) end
put_json(path, params = {})
click to toggle source
# File lib/delighted/client.rb, line 41 def put_json(path, params = {}) headers = default_headers.dup.merge('Accept' => 'application/json', 'Content-Type' => 'application/json') uri = URI.parse(File.join(@api_base_url, path)) data = JSON.dump(params) unless params.empty? response = @http_adapter.request(:put, uri, headers, data) handle_json_response(response) end
request_get(path, opts = {})
click to toggle source
# File lib/delighted/client.rb, line 17 def request_get(path, opts = {}) accept_header = opts.fetch(:accept_header, DEFAULT_ACCEPT_HEADER) params = opts.fetch(:params, {}) headers = default_headers.dup.merge('Accept' => accept_header) path = File.join(@api_base_url, path) unless is_full_url(path) uri = URI.parse(path) uri.query = Utils.to_query(params) unless params.empty? response = @http_adapter.request(:get, uri, headers) { json: handle_json_response(response), response: response } end
Private Instance Methods
default_headers()
click to toggle source
# File lib/delighted/client.rb, line 82 def default_headers @default_headers ||= { 'Authorization' => "Basic #{["#{@api_key}:"].pack('m').chomp}", 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }.freeze end
handle_json_response(response)
click to toggle source
# File lib/delighted/client.rb, line 63 def handle_json_response(response) case response.status_code when 200, 201, 202 Utils.symbolize_keys(JSON.load(response.body)) when 401 raise AuthenticationError, response when 406 raise UnsupportedFormatRequestedError, response when 422 raise ResourceValidationError, response when 429 raise RateLimitedError, response when 503 raise ServiceUnavailableError, response else raise GeneralAPIError, response end end
is_full_url(url)
click to toggle source
# File lib/delighted/client.rb, line 89 def is_full_url(url) !!(URI::DEFAULT_PARSER.make_regexp(%w(http https)) =~ url) end