class Pipedrive::Base

Public Class Methods

connection() click to toggle source

This method smells of :reek:TooManyStatements :nodoc

# File lib/pipedrive/base.rb, line 83
def connection
  @connection ||= Faraday.new(faraday_options) do |conn|
    conn.request :url_encoded
    conn.response :mashify
    conn.response :json, content_type: /\bjson$/
    conn.use FaradayMiddleware::ParseJson
    conn.response :logger, ::Pipedrive.logger if ::Pipedrive.debug
    conn.adapter Faraday.default_adapter
  end
end
faraday_options() click to toggle source
# File lib/pipedrive/base.rb, line 71
def faraday_options
  {
    url:     'https://api.pipedrive.com',
    headers: {
      accept:     'application/json',
      user_agent: ::Pipedrive.user_agent
    }
  }
end
new(api_token = ::Pipedrive.api_token) click to toggle source
# File lib/pipedrive/base.rb, line 5
def initialize(api_token = ::Pipedrive.api_token)
  raise 'api_token should be set' unless api_token.present?

  @api_token = api_token
end

Public Instance Methods

build_url(args, fields_to_select = nil) click to toggle source
# File lib/pipedrive/base.rb, line 32
def build_url(args, fields_to_select = nil)
  url = +"/v1/#{entity_name}"
  url << "/#{args[1]}" if args[1]
  url << ":(#{fields_to_select.join(',')})" if fields_to_select.is_a?(::Array) && fields_to_select.size.positive?
  url << "?api_token=#{@api_token}"
  url
end
connection() click to toggle source
# File lib/pipedrive/base.rb, line 11
def connection
  self.class.connection.dup
end
entity_name() click to toggle source
# File lib/pipedrive/base.rb, line 64
def entity_name
  class_name = self.class.name.split('::')[-1].downcase.pluralize
  class_names = { 'people' => 'persons' }
  class_names[class_name] || class_name
end
failed_response(res) click to toggle source
# File lib/pipedrive/base.rb, line 52
def failed_response(res)
  failed_res = res.body.merge(success: false, not_authorized: false,
                              failed: false)
  case res.status
  when 401
    failed_res[:not_authorized] = true
  when 420
    failed_res[:failed] = true
  end
  failed_res
end
make_api_call(*args) click to toggle source
# File lib/pipedrive/base.rb, line 15
def make_api_call(*args)
  params = args.extract_options!
  method = args[0]
  raise 'method param missing' unless method.present?

  url = build_url(args, params.delete(:fields_to_select))
  begin
    res = connection.__send__(method.to_sym, url, params)
  rescue Errno::ETIMEDOUT
    retry
  rescue Faraday::ParsingError
    sleep 5
    retry
  end
  process_response(res)
end
process_response(res) click to toggle source
# File lib/pipedrive/base.rb, line 40
def process_response(res)
  if res.success?
    data = if res.body.is_a?(::Hashie::Mash)
             res.body.merge(success: true)
           else
             ::Hashie::Mash.new(success: true)
           end
    return data
  end
  failed_response(res)
end