class Pipekit::Request

Constants

DEFAULT_PAGINATION_LIMIT
PIPEDRIVE_URL

Attributes

resource[R]

Public Class Methods

new(resource) click to toggle source
# File lib/pipekit/request.rb, line 13
def initialize(resource)
  @resource = resource
  self.class.debug_output $stdout if Config.fetch(:debug_requests)
end

Public Instance Methods

_get(uri, query, result) click to toggle source
# File lib/pipekit/request.rb, line 68
def _get(uri, query, result)
  return result.response unless result.fetch_next_request?
  _get(uri, query, result + get_request(uri, query, result.next_start))
end
get(id = "", query = {}) click to toggle source

Public: Pipedrive GET API call - does a GET request to the Pipedrive API based on the resource passed in the initialiser

id - If the resource being searched for has an id query - An optional query string start - The offset with which to start the query

As long as “request_all_pages” is not set to false in the config this will recursively call `#get` until all the pages of the request have been fetched from pipedrive Pipedrive until everything available has been received

# File lib/pipekit/request.rb, line 53
def get(id = "", query = {})
  uri = uri(id)
  _get(uri, query, get_request(uri, query))
end
get_request(uri, query, start = 0) click to toggle source
# File lib/pipekit/request.rb, line 73
def get_request(uri, query, start = 0)
  response = self.class.get(uri, options(query: {limit: pagination_limit, start: start}.merge(query)))
  Result.new(resource.singular, response)
end
options(query: {}, body: {}) click to toggle source
# File lib/pipekit/request.rb, line 86
def options(query: {}, body: {})
  {
    query: query.merge(api_token: Config.fetch(:api_token)),
    body: parse_body(body)
  }
end
pagination_limit() click to toggle source
# File lib/pipekit/request.rb, line 114
def pagination_limit
  Config.fetch(:pagination_limit, DEFAULT_PAGINATION_LIMIT)
end
parse_body(body) click to toggle source

Replaces custom fields with their Pipedrive ID if the ID is defined in the configuration

So if the body looked like this with a custom field called middle_name:

{ middle_name: “Dave” }

And it has a Pipedrive ID (“123abc”), this will put in this custom ID

{ “123abc”: “Dave” }

meaning you don't have to worry about the custom IDs

# File lib/pipekit/request.rb, line 106
def parse_body(body)
  body.reduce({}) do |result, (field, value)|
    value = Config.field_value_id(resource.singular, field, value)
    field = Config.field_id(resource.singular, field)
    result.tap { |result| result[field] = value }
  end
end
post(data) click to toggle source
# File lib/pipekit/request.rb, line 62
def post(data)
  response_from self.class.post(uri, options(body: data))
end
put(id, data) click to toggle source
# File lib/pipekit/request.rb, line 58
def put(id, data)
  response_from self.class.put(uri(id), options(body: data))
end
response_from(response_data) click to toggle source
# File lib/pipekit/request.rb, line 78
def response_from(response_data)
  Result.response(resource.singular, response_data)
end
search_by_field(field:, value:) click to toggle source

Public: Pipedrive /searchField API call.

type - Type of the field:

:person - person fields
:deal - deal fields

field - The name of the field.

If it's the custom field the id of the field should be stored in `config/pipedrive.yml`.

value - The value of the field.

Examples

search_by_field(field: :cohort, value: 119)
search_by_field(field: :github_username, value: "octocat")

Returns an array of Response objects or throws a ResourceNotFoundError if it couldn't find anything.

This also uses the “request_all_pages” config option when set to do multiple requests, getting around Pipedrive's pagination

# File lib/pipekit/request.rb, line 36
def search_by_field(field:, value:)
  query = search_by_field_query(field, value)

  get_request("/searchResults/field", query).response
end
search_by_field_query(field = nil, value = nil) click to toggle source
# File lib/pipekit/request.rb, line 118
def search_by_field_query(field = nil, value = nil)
  {
    field_type: "#{resource.singular}Field",
    field_key: Config.field_id(resource.singular, field),
    return_item_ids: true,
    term: Config.field_value_id(resource.singular, field, value),
    exact_match: 1
  }
end
uri(id = "") click to toggle source
# File lib/pipekit/request.rb, line 82
def uri(id = "")
  "/#{resource.pluralized}/#{id}".chomp("/")
end