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