class Sisense::API::Client
Constants
- PATH_SEGMENT_PATTERN
- VERB_MAP
Attributes
http[R]
Public Class Methods
new()
click to toggle source
# File lib/sisense/api/client.rb, line 22 def initialize uri = URI.parse(base_uri) @http = Net::HTTP.new(uri.host, uri.port) @http.use_ssl = Sisense.use_ssl end
Public Instance Methods
delete(path)
click to toggle source
# File lib/sisense/api/client.rb, line 46 def delete(path) request :delete, path end
get(path, params: {})
click to toggle source
# File lib/sisense/api/client.rb, line 30 def get(path, params: {}) request :get, path, params end
parsed_response(response, object_class:)
click to toggle source
# File lib/sisense/api/client.rb, line 50 def parsed_response(response, object_class:) response_hash = JSON.parse(response.body) if collection?(response_hash) response_hash .select { |obj| obj.is_a?(Hash) } .map { |json_item| object_class.new(json_item) } else object_class.new(response_hash) end end
patch(path, params: {})
click to toggle source
# File lib/sisense/api/client.rb, line 42 def patch(path, params: {}) request :patch, path, params end
post(path, params: {})
click to toggle source
# File lib/sisense/api/client.rb, line 34 def post(path, params: {}) request :post, path, params end
put(path, params: {})
click to toggle source
# File lib/sisense/api/client.rb, line 38 def put(path, params: {}) request :put, path, params end
Private Instance Methods
base_uri()
click to toggle source
# File lib/sisense/api/client.rb, line 63 def base_uri @base_uri ||= Sisense.use_ssl ? "https://#{Sisense.hostname}" : "http://#{Sisense.hostname}" end
collection?(response_body)
click to toggle source
# File lib/sisense/api/client.rb, line 67 def collection?(response_body) response_body.is_a?(Array) end
encode_path(path, params = nil)
click to toggle source
# File lib/sisense/api/client.rb, line 108 def encode_path(path, params = nil) encoded_path = encode_path_segments(path) return encoded_path if params.nil? encoded_params = URI.encode_www_form(params) uri = URI::HTTP.build(path: encoded_path, query: encoded_params) uri.request_uri end
encode_path_segments(path)
click to toggle source
# File lib/sisense/api/client.rb, line 102 def encode_path_segments(path) path.gsub PATH_SEGMENT_PATTERN do |segment| url_encode(segment) end end
handle_error(response)
click to toggle source
# File lib/sisense/api/client.rb, line 88 def handle_error(response) error_params = JSON.parse(response.body, symbolize_names: true) new_api_format_error_params = error_params[:error] error_params = new_api_format_error_params || error_params case response.code when "404" raise Sisense::API::NotFoundError, error_params when "422" raise Sisense::API::UnprocessableEntityError, error_params else raise Sisense::API::Error, error_params end end
handle_response(response)
click to toggle source
# File lib/sisense/api/client.rb, line 82 def handle_response(response) return response if %w[200 201 204].include?(response.code) handle_error(response) end
headers()
click to toggle source
# File lib/sisense/api/client.rb, line 117 def headers @headers ||= {"Authorization" => "Bearer #{Sisense.access_token}", "Content-Type" => "application/json"} end
parameterize(object)
click to toggle source
# File lib/sisense/api/client.rb, line 121 def parameterize(object) object.tap do |obj| return object.map { |item| parameterize(item) } if object.is_a?(Array) obj.keys.each do |key| obj[key] = parameterize_object(obj[key]) obj[key.to_s.to_camel_case] = obj.delete(key) end end end
parameterize_object(object)
click to toggle source
# File lib/sisense/api/client.rb, line 132 def parameterize_object(object) return parameterize(object.to_h) if Sisense::API::Resource.descendants.include?(object.class) return parameterize(object) if object.is_a?(Hash) return object.map { |item| item.is_a?(String) ? item : parameterize_object(item) } if object.is_a?(Array) object end
request(method, path, params = {})
click to toggle source
# File lib/sisense/api/client.rb, line 71 def request(method, path, params = {}) case method when :get request = VERB_MAP[method].new(encode_path(path, params), headers) else request = VERB_MAP[method].new(encode_path(path), headers) request.body = parameterize(params).to_json end handle_response(http.request(request)) end