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