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 +4 -4
- data/lib/pipekit/config.rb +4 -0
- data/lib/pipekit/deal_field.rb +0 -1
- data/lib/pipekit/field_repository.rb +25 -16
- data/lib/pipekit/person.rb +6 -2
- data/lib/pipekit/person_field.rb +0 -1
- data/lib/pipekit/repository.rb +4 -14
- data/lib/pipekit/request.rb +17 -12
- data/lib/pipekit/response.rb +8 -10
- data/lib/pipekit/result.rb +2 -2
- data/lib/pipekit/version.rb +1 -1
- data/pipekit.gemspec +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 981bfd42ed2e6376d3c1be868c3bdf613cc9db3c
|
4
|
+
data.tar.gz: 19a904f8f395f64092e0eb7d53dbf927c2c6a225
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34a620ac856281d038cb4f24feffd15be0d06b64f64eb7475e02161f9b80f8d794712d4f5778d020e928b96379b9c19cd634c0c18ecc0ee10fd131e29541c693
|
7
|
+
data.tar.gz: 48809728f9edfca1c12abc4b6ec5e4bb11b7ec6a453ee607229c63d1c044da49e31c36b04e9dd865ab21ed93f99467642b6ca1bddfe976a3bf17e32153e81297
|
data/lib/pipekit/config.rb
CHANGED
data/lib/pipekit/deal_field.rb
CHANGED
@@ -1,25 +1,34 @@
|
|
1
1
|
module Pipekit
|
2
2
|
module FieldRepository
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def get_by_name(name)
|
10
|
+
search_fields("name", name)
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
+
def find_label(field:,id:)
|
14
|
+
find_values(field).find({}) { |value| value["id"] == id }.fetch("label")
|
15
|
+
end
|
13
16
|
|
14
|
-
|
15
|
-
|
17
|
+
def find_values(field)
|
18
|
+
find_by(name: field)["options"]
|
19
|
+
end
|
16
20
|
|
17
|
-
|
18
|
-
result
|
19
|
-
end
|
21
|
+
private
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
data/lib/pipekit/person.rb
CHANGED
@@ -10,9 +10,13 @@ module Pipekit
|
|
10
10
|
request.get("find", term: name)
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
person = find_by(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
|
data/lib/pipekit/person_field.rb
CHANGED
data/lib/pipekit/repository.rb
CHANGED
@@ -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.
|
96
|
+
self.class.to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
|
107
97
|
end
|
108
98
|
end
|
109
99
|
end
|
data/lib/pipekit/request.rb
CHANGED
@@ -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(
|
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
|
-
|
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 =
|
56
|
-
|
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(
|
76
|
+
def _get(uri, query, result)
|
72
77
|
return result.response(resource) unless result.fetch_next_request?
|
73
|
-
_get(
|
78
|
+
_get(uri, query, result + get_request(uri, query, result.next_start))
|
74
79
|
end
|
75
80
|
|
76
|
-
def get_request(
|
77
|
-
response = self.class.get(uri
|
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 =
|
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(
|
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(
|
123
|
+
Config.fetch(:pagination_limit, DEFAULT_PAGINATION_LIMIT)
|
119
124
|
end
|
120
125
|
|
121
126
|
end
|
data/lib/pipekit/response.rb
CHANGED
@@ -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
|
101
|
+
def build_field_repository
|
104
102
|
Object.const_get("Pipekit::#{resource.capitalize}Field").new
|
105
103
|
end
|
106
104
|
|
data/lib/pipekit/result.rb
CHANGED
@@ -18,7 +18,7 @@ module Pipekit
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def fetch_next_request?
|
21
|
-
Config.fetch(
|
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
|
|
data/lib/pipekit/version.rb
CHANGED
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.
|
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-
|
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: []
|