pipekit 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a97ca3462a69b58e56337a81273147db6d6b81ca
4
- data.tar.gz: a58a9d65ecd33575e907d124a69670692843e8e1
3
+ metadata.gz: 981bfd42ed2e6376d3c1be868c3bdf613cc9db3c
4
+ data.tar.gz: 19a904f8f395f64092e0eb7d53dbf927c2c6a225
5
5
  SHA512:
6
- metadata.gz: 09e9a02a4d5021799ca0cf39a96b55d7c0b5a136c8f0427428037f395034ce203c575421fbacc36559198676fce62f3c3f24ed6b07b99cb8594ad4173d3b8f0b
7
- data.tar.gz: 649b62d3e62ae41873880705282876663943b8e0ce38659482814fde8db3140ba8617bdf54a9905b2888679e0be71cdeb6cf7d05d0fc9862b361a32994f3b70b
6
+ metadata.gz: 34a620ac856281d038cb4f24feffd15be0d06b64f64eb7475e02161f9b80f8d794712d4f5778d020e928b96379b9c19cd634c0c18ecc0ee10fd131e29541c693
7
+ data.tar.gz: 48809728f9edfca1c12abc4b6ec5e4bb11b7ec6a453ee607229c63d1c044da49e31c36b04e9dd865ab21ed93f99467642b6ca1bddfe976a3bf17e32153e81297
@@ -69,6 +69,10 @@ module Pipekit
69
69
  config.fetch(key.to_s, default)
70
70
  end
71
71
 
72
+ def set(key, value)
73
+ config[key.to_s] = value
74
+ end
75
+
72
76
  def custom_fields(resource)
73
77
  fetch("fields", {})
74
78
  .fetch(resource.to_s, {})
@@ -1,6 +1,5 @@
1
1
  module Pipekit
2
2
  class DealField
3
- include Repository
4
3
  include FieldRepository
5
4
  end
6
5
  end
@@ -1,25 +1,34 @@
1
1
  module Pipekit
2
2
  module FieldRepository
3
- def get_by_key(key)
4
- key = Config.field_id(parent_resource, key)
5
- search_fields("key", key)
6
- end
3
+ include Repository
4
+ def get_by_key(key)
5
+ key = Config.field_id(parent_resource, key)
6
+ search_fields("key", key)
7
+ end
7
8
 
8
- def get_by_name(name)
9
- search_fields("name", name)
10
- end
9
+ def get_by_name(name)
10
+ search_fields("name", name)
11
+ end
11
12
 
12
- private
13
+ def find_label(field:,id:)
14
+ find_values(field).find({}) { |value| value["id"] == id }.fetch("label")
15
+ end
13
16
 
14
- def search_fields(field_element, value)
15
- result = request.get.select { |element| element[field_element] == value }
17
+ def find_values(field)
18
+ find_by(name: field)["options"]
19
+ end
16
20
 
17
- raise ResourceNotFoundError.new("#{parent_resource}Field searching by element #{field_element} for #{value} could not be found") if result.empty?
18
- result
19
- end
21
+ private
20
22
 
21
- def parent_resource
22
- resource.chomp("Field")
23
- end
23
+ def search_fields(field_element, value)
24
+ result = request.get.select { |element| element[field_element] == value }
25
+
26
+ raise ResourceNotFoundError.new("#{parent_resource}Field searching by element #{field_element} for #{value} could not be found") if result.empty?
27
+ result
28
+ end
29
+
30
+ def parent_resource
31
+ resource.chomp("Field")
32
+ end
24
33
  end
25
34
  end
@@ -10,9 +10,13 @@ module Pipekit
10
10
  request.get("find", term: name)
11
11
  end
12
12
 
13
- def create_or_update(fields)
14
- person = find_by(email: fields[:email])
13
+ def update_by_email(email, fields)
14
+ person = find_by(email: email)
15
15
  update(person["id"], fields)
16
+ end
17
+
18
+ def create_or_update(fields)
19
+ update_by_email(fields[:email], fields)
16
20
  rescue ResourceNotFoundError
17
21
  create(fields)
18
22
  end
@@ -1,6 +1,5 @@
1
1
  module Pipekit
2
2
  class PersonField
3
- include Repository
4
3
  include FieldRepository
5
4
  end
6
5
  end
@@ -5,8 +5,8 @@ module Pipekit
5
5
  @request = request || Request.new(resource)
6
6
  end
7
7
 
8
- def all
9
- get
8
+ def all(query = {})
9
+ request.get("", query)
10
10
  end
11
11
 
12
12
  # Public: Get all records from Pipedrive by **one** of the record's fields.
@@ -46,8 +46,8 @@ module Pipekit
46
46
  #
47
47
  # fields - fields for the record.
48
48
  #
49
- # Examples
50
49
  #
50
+ # Examples
51
51
  # create({name: "John Doe", deal_id: 123})
52
52
  #
53
53
  # Returns nothing.
@@ -68,16 +68,6 @@ module Pipekit
68
68
  request.put(id, fields)
69
69
  end
70
70
 
71
- def self.included(base)
72
- base.extend(ClassMethods)
73
- end
74
-
75
- module ClassMethods
76
- def resource
77
- to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
78
- end
79
- end
80
-
81
71
  private
82
72
 
83
73
  attr_reader :request
@@ -103,7 +93,7 @@ module Pipekit
103
93
  end
104
94
 
105
95
  def resource
106
- self.class.resource
96
+ self.class.to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
107
97
  end
108
98
  end
109
99
  end
@@ -12,7 +12,7 @@ module Pipekit
12
12
 
13
13
  def initialize(resource)
14
14
  @resource = resource
15
- self.class.debug_output $stdout if Config.fetch("debug_requests")
15
+ self.class.debug_output $stdout if Config.fetch(:debug_requests)
16
16
  end
17
17
 
18
18
  # Public: Pipedrive /searchField API call.
@@ -31,14 +31,18 @@ module Pipekit
31
31
  #
32
32
  # Returns an array of Response objects or throws a ResourceNotFoundError if
33
33
  # it couldn't find anything.
34
+ #
35
+ # This also uses the "request_all_pages" config option when set to do
36
+ # multiple requests, getting around Pipedrive's pagination
34
37
  def search_by_field(field:, value:)
35
38
  query = {field_type: "#{resource}Field",
36
39
  field_key: Config.field_id(resource, field),
37
40
  return_item_ids: true,
38
- term: value
41
+ term: Config.field_value_id(resource, field, value),
42
+ exact_match: 1
39
43
  }
40
44
 
41
- response_from self.class.get("/searchResults/field", options(query: query))
45
+ get_request("/searchResults/field", query).response(resource)
42
46
  end
43
47
 
44
48
  # Public: Pipedrive GET API call - does a GET request to the Pipedrive API
@@ -52,8 +56,9 @@ module Pipekit
52
56
  # recursively call `#get` until all the pages of the request have been
53
57
  # fetched from pipedrive
54
58
  # Pipedrive until everything available has been received
55
- def get(id = nil, query = {})
56
- _get(id, query, get_request(id, query))
59
+ def get(id = "", query = {})
60
+ uri = uri(id)
61
+ _get(uri, query, get_request(uri, query))
57
62
  end
58
63
 
59
64
  def put(id, data)
@@ -68,13 +73,13 @@ module Pipekit
68
73
 
69
74
  attr_reader :resource
70
75
 
71
- def _get(id, query, result)
76
+ def _get(uri, query, result)
72
77
  return result.response(resource) unless result.fetch_next_request?
73
- _get(id, query, result + get_request(id, query, result.next_start))
78
+ _get(uri, query, result + get_request(uri, query, result.next_start))
74
79
  end
75
80
 
76
- def get_request(id, query, start = 0)
77
- response = self.class.get(uri(id), options(query: {limit: pagination_limit, start: start}.merge(query)))
81
+ def get_request(uri, query, start = 0)
82
+ response = self.class.get(uri, options(query: {limit: pagination_limit, start: start}.merge(query)))
78
83
  Result.new(response)
79
84
  end
80
85
 
@@ -82,13 +87,13 @@ module Pipekit
82
87
  Result.response(resource, response_data)
83
88
  end
84
89
 
85
- def uri(id = nil)
90
+ def uri(id = "")
86
91
  "/#{resource}s/#{id}".chomp("/")
87
92
  end
88
93
 
89
94
  def options(query: {}, body: {})
90
95
  {
91
- query: query.merge(api_token: Config.fetch("api_token")),
96
+ query: query.merge(api_token: Config.fetch(:api_token)),
92
97
  body: parse_body(body)
93
98
  }
94
99
  end
@@ -115,7 +120,7 @@ module Pipekit
115
120
  end
116
121
 
117
122
  def pagination_limit
118
- Config.fetch("pagination_limit", DEFAULT_PAGINATION_LIMIT)
123
+ Config.fetch(:pagination_limit, DEFAULT_PAGINATION_LIMIT)
119
124
  end
120
125
 
121
126
  end
@@ -1,9 +1,10 @@
1
1
  module Pipekit
2
2
  class Response
3
3
 
4
- def initialize(resource, data)
4
+ def initialize(resource, data, field_repository: nil)
5
5
  @resource = resource
6
6
  @data = data || {}
7
+ @field_repository = field_repository
7
8
  end
8
9
 
9
10
  def ==(other)
@@ -84,23 +85,20 @@ module Pipekit
84
85
 
85
86
  attr_reader :data, :resource
86
87
 
88
+ def field_repository
89
+ @field_repository ||= build_field_repository
90
+ end
91
+
87
92
  def fetch_value(key, default)
88
93
  data.fetch(convert_key(key), default)
89
94
  end
90
95
 
91
96
  def value_from_pipedrive(key, value)
92
97
  return unless value && !value.empty?
93
-
94
- option = field_repository
95
- .find_by(name: key)
96
- .fetch("options", [], choose_first_value: false)
97
- .find { |options| options["id"] == value.to_i }
98
-
99
- raise ResourceNotFoundError.new("Could not find field #{key}'s value '#{value}' on Pipedrive") unless option
100
- option.fetch("label")
98
+ field_repository.find_label(field: key, id: value)
101
99
  end
102
100
 
103
- def field_repository
101
+ def build_field_repository
104
102
  Object.const_get("Pipekit::#{resource.capitalize}Field").new
105
103
  end
106
104
 
@@ -18,7 +18,7 @@ module Pipekit
18
18
  end
19
19
 
20
20
  def fetch_next_request?
21
- Config.fetch("request_all_pages", true) && pagination_data["more_items_in_collection"]
21
+ Config.fetch(:request_all_pages, true) && pagination_data["more_items_in_collection"]
22
22
  end
23
23
 
24
24
  def next_start
@@ -66,7 +66,7 @@ module Pipekit
66
66
  end
67
67
 
68
68
  def message
69
- "Resource not found: #{@response}"
69
+ "Resource not found, response was: #{@response}"
70
70
  end
71
71
  end
72
72
 
@@ -1,3 +1,3 @@
1
1
  module Pipekit
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/pipekit.gemspec CHANGED
@@ -6,8 +6,8 @@ require 'pipekit/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "pipekit"
8
8
  spec.version = Pipekit::VERSION
9
- spec.authors = ["jafrog", "pitchinvasion", "spike01"]
10
- spec.email = ["irina@makersacademy.com", "leo@makersacademy.com", "spike@makersacademy.com"]
9
+ spec.authors = ["jafrog", "pitchinvasion", "spike01", "danldb"]
10
+ spec.email = ["irina@makersacademy.com", "leo@makersacademy.com", "spike@makersacademy.com", "dan@makersacademy.com"]
11
11
 
12
12
  spec.summary = %q{Pipedrive API client for Ruby.}
13
13
  spec.description = %q{Pipedrive API client for Ruby.}
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipekit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jafrog
8
8
  - pitchinvasion
9
9
  - spike01
10
+ - danldb
10
11
  autorequire:
11
12
  bindir: exe
12
13
  cert_chain: []
13
- date: 2016-08-31 00:00:00.000000000 Z
14
+ date: 2016-09-06 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: httparty
@@ -101,6 +102,7 @@ email:
101
102
  - irina@makersacademy.com
102
103
  - leo@makersacademy.com
103
104
  - spike@makersacademy.com
105
+ - dan@makersacademy.com
104
106
  executables: []
105
107
  extensions: []
106
108
  extra_rdoc_files: []