class PipeDrive::SendRequest
Attributes
host[R]
Public Class Methods
new()
click to toggle source
# File lib/pipe_drive/send_request.rb, line 5 def initialize raise MissingApiToken.new if PipeDrive.api_token.nil? @host = PipeDrive.host @api_token = PipeDrive.api_token end
Public Instance Methods
http_del(path, params={}, header={}, &block)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 39 def http_del(path, params={}, header={}, &block) body_request(:delete, path, params, header, &block) end
http_get(path, params={}, header={}) { |hash_except(result, [:status])| ... }
click to toggle source
# File lib/pipe_drive/send_request.rb, line 11 def http_get(path, params={}, header={}, &block) begin full_url = "#{host}/#{API_VERSION}#{path}" uri = URI(full_url) params.merge!(api_token: @api_token) uri.query = URI.encode_www_form(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' request = Net::HTTP::Get.new(uri.request_uri, header) response = http.request(request) result = handle_response(response) rescue Exception => e result = server_error_response(e.message) end return result unless block_given? raise RequestError.new(result) unless success_result?(result) yield PipeDrive.hash_except(result, [:status]) end
http_post(path, params={}, header={}, &block)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 31 def http_post(path, params={}, header={}, &block) body_request(:post, path, params, header, &block) end
http_put(path, params={}, header={}, &block)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 35 def http_put(path, params={}, header={}, &block) body_request(:put, path, params, header, &block) end
Protected Instance Methods
body_request(method, path, params={}, header={}) { |hash_except(result, [:status])| ... }
click to toggle source
# File lib/pipe_drive/send_request.rb, line 45 def body_request(method, path, params={}, header={}, &block) begin full_url = "#{host}/#{API_VERSION}#{path}?api_token=#{@api_token}" uri = URI(full_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' header['Content-Type'] = 'application/json' request = Net::HTTP.const_get(method.to_s.capitalize).new(uri.request_uri, header) request.body = params.to_json response = http.request(request) result = handle_response(response) rescue Exception => e result = server_error_response(e.message) end return result unless block_given? raise RequestError.new(result) unless success_result?(result) yield PipeDrive.hash_except(result, [:status]) end
Private Instance Methods
deep_symbolize_keys(data)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 88 def deep_symbolize_keys(data) if data.is_a?(Hash) new_data = {} data.each_pair do |key, value| new_data[key.to_sym] = deep_symbolize_keys(value) end new_data elsif data.is_a?(Array) data.map do |v| deep_symbolize_keys(v) end else data end end
handle_response(response)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 67 def handle_response(response) result = {status: response.code.to_i} begin body = JSON.parse(response.body) body = {body: body} unless body.is_a?(Hash) rescue body = {body: response.body} end body = deep_symbolize_keys(body) result.merge body end
server_error_response(err_msg)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 80 def server_error_response(err_msg) {status: 500, message: err_msg} end
success_result?(result)
click to toggle source
# File lib/pipe_drive/send_request.rb, line 84 def success_result?(result) result[:status].is_a?(Integer) && (result[:status] / 100 == 2) end