pipekit 1.2.0 → 2.0.0

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: e34407109d67d8d9635733ffba1eccc11f6c6e32
4
- data.tar.gz: 33ddaa1c5efbf60e1814db4c61dfd80cd39f4bbd
3
+ metadata.gz: c29f137ec674dd92e5458ec82f4a637f4571da25
4
+ data.tar.gz: 0bca608dc9986d0549efd1a79c0dd7deb3cd8d0c
5
5
  SHA512:
6
- metadata.gz: d5e5629813863251130adf800fe0502651123b5ca3f387459e603f87612e3e95d79352a9ecf290057378b15a7d12b27b82a8ab2f710eb66caf109cdc57cb57e0
7
- data.tar.gz: f0b7531452f1bccbb2c9d3f50862c572451c7a976cee387de3969a7eaeb254a36f53af32eb9d1d251baca151cf4ba918f1309a3569f64e6de7ca102035cc2444
6
+ metadata.gz: 341d2b409dda391fdd27a25fb2c215d8956910c99f6f2402f72cc1ef9991c47c67899903bd2cb6f7084a7d16ebe416d3b63f54de11e4e8c7afe0292f5076275d
7
+ data.tar.gz: 5e792c6a7523980c5a3ef917a7bebfe283f2e3ba80313dddc1f43d4f361c6587b2273cb662f792312936885f8341407ba1d0a2cf8399253533484a5ba0d27028
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Pipekit
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/pipekit`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Pipekit is a gem to interact with [Pipedrive](https://www.pipedrive.com) API.
6
4
 
7
5
  ## Installation
8
6
 
@@ -20,9 +18,117 @@ Or install it yourself as:
20
18
 
21
19
  $ gem install pipekit
22
20
 
21
+ Pipekit expects a config file containing your api token and key-value mappings for custom pipedrive fields. Look at [example config](./spec/support/config.yml) to see the file structure.
22
+
23
+ Configure Pipekit with your config file:
24
+
25
+ Pipekit.config_file_path = File.join("config", "pipedrive.yml")
26
+
27
+ You need to do once when Pipekit is loaded, the good place for it in the Rails project is `initializers`.
28
+
23
29
  ## Usage
24
30
 
25
- TODO: Write usage instructions here
31
+ The interface of Pipekit is organised around *repositories*. The available repositories are:
32
+
33
+ - Deal
34
+ - DealField
35
+ - Note
36
+ - Organization
37
+ - Person
38
+ - PersonField
39
+
40
+ ### Resource repositories
41
+
42
+ Deal, Note, Organization and Person represent corresponding resources on Pipedrive. Repositories provide several methods for querying and changing these resources.
43
+
44
+ Methods available for all non-field repositories are:
45
+
46
+ - `all`
47
+ - `where`
48
+ - `find_by`
49
+ - `create`
50
+ - `update`
51
+
52
+ #### Examples
53
+
54
+ Get all deals
55
+
56
+ ```ruby
57
+ deal_repo = Pipekit::Deal.new
58
+
59
+ deal_repo.all
60
+ ```
61
+
62
+ Get all persons matching an attribute
63
+
64
+ ```ruby
65
+ person_repo = Pipekit::Person.new
66
+
67
+ person_repo.where(name: "Mike")
68
+ ```
69
+
70
+ Get the first deal matching an attribute
71
+
72
+ ```ruby
73
+ deal_repo = Pipekit::Deal.new
74
+
75
+ deal_repo.find_by(id: 123)
76
+ ```
77
+
78
+ Create a person
79
+
80
+ ```ruby
81
+ person_repo = Pipekit::Person.new
82
+
83
+ person_repo.create({name: "John Doe", deal_id: 123})
84
+ ```
85
+
86
+ Update a note
87
+
88
+ ```ruby
89
+ note_repo = Pipekit::Note.new
90
+
91
+ note_repo.update(123, {content: "Hey"})
92
+ ```
93
+
94
+ ### Field repositories
95
+
96
+ Pipedrive stores custom fields as key-value pairs. E.g. when you add an "Address" field to Persons Pipderive will store it as something like "050280e9bed01e55e25532f0b6e6228c748bf994"
97
+
98
+ Methods available for field repositories (PersonField, DealField) are:
99
+
100
+ - `get_by_key`
101
+ - `get_by_name`
102
+ - `find_label`
103
+ - `find_values`
104
+
105
+ ### Response object
106
+
107
+ `Pipekit::Response` is a hash-like object that performs an automatic conversion if Pipedrive IDs to meaningful field names.
108
+
109
+ ```ruby
110
+ # pipedrive.yml
111
+ #
112
+ # fields:
113
+ # person:
114
+ # Emergency Contact: 345abd
115
+ # T-Shirt Size: 567qwe
116
+ #
117
+ # field_values:
118
+ # person:
119
+ # T-Shirt Size:
120
+ # "1": Small
121
+ # "2": Medium
122
+ # "3": Large
123
+
124
+ data = {"id" => 123, "345abd" => "+44123456789", "567qwe" => "1"}
125
+
126
+ person = Pipekit::Response.new(data)
127
+ person["Emergency Contact"]
128
+ #=> +44123456789
129
+ person["T-Shirt Size"]
130
+ #=> "Small"
131
+ ```
26
132
 
27
133
  ## Development
28
134
 
data/lib/pipekit/deal.rb CHANGED
@@ -10,7 +10,7 @@ module Pipekit
10
10
  # Finds a person by their email, then finds the first deal related to that
11
11
  # person and updates it with the params provided
12
12
  def update_by_person(email, params, person_repo: Person.new)
13
- person = person_repo.find_by(email: email)
13
+ person = person_repo.find_exactly_by_email(email)
14
14
  deal = get_by_person_id(person[:id], person_repo: person_repo).first
15
15
  update(deal[:id], params)
16
16
  end
@@ -10,8 +10,14 @@ module Pipekit
10
10
  request.get("find", term: name)
11
11
  end
12
12
 
13
+ def find_exactly_by_email(email)
14
+ get_by_email(email).select do |item|
15
+ item["email"] == email
16
+ end.first
17
+ end
18
+
13
19
  def update_by_email(email, fields)
14
- person = find_by(email: email)
20
+ person = find_exactly_by_email(email)
15
21
  update(person["id"], fields)
16
22
  end
17
23
 
@@ -39,6 +39,7 @@ module Pipekit
39
39
  #
40
40
  # Returns a Hash or nil if none found.
41
41
  def find_by(options)
42
+ warn "Using `Repository#find_by` with an email may return inexact matches" if email_key?(options)
42
43
  where(options, true).first
43
44
  end
44
45
 
@@ -95,5 +96,9 @@ module Pipekit
95
96
  def resource
96
97
  self.class.to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
97
98
  end
99
+
100
+ def email_key?(options)
101
+ options.keys.first && options.keys.first.to_s == "email"
102
+ end
98
103
  end
99
104
  end
@@ -0,0 +1,13 @@
1
+ module Pipekit
2
+ class User
3
+ include Repository
4
+
5
+ def get_by_email(email)
6
+ request.get('find', term: email, search_by_email: 1)
7
+ end
8
+
9
+ def get_by_name(name)
10
+ request.get('find', term: name)
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Pipekit
2
- VERSION = "1.2.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/pipekit.rb CHANGED
@@ -12,6 +12,7 @@ require "pipekit/deal"
12
12
  require "pipekit/person_field"
13
13
  require "pipekit/deal_field"
14
14
  require "pipekit/note"
15
+ require "pipekit/user"
15
16
 
16
17
  module Pipekit
17
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipekit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jafrog
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2016-11-10 00:00:00.000000000 Z
14
+ date: 2017-05-19 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
@@ -144,6 +144,7 @@ files:
144
144
  - lib/pipekit/request.rb
145
145
  - lib/pipekit/response.rb
146
146
  - lib/pipekit/result.rb
147
+ - lib/pipekit/user.rb
147
148
  - lib/pipekit/version.rb
148
149
  - pipekit.gemspec
149
150
  homepage: https://github.com/makersacademy/pipekit
@@ -167,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
168
  version: '0'
168
169
  requirements: []
169
170
  rubyforge_project:
170
- rubygems_version: 2.5.1
171
+ rubygems_version: 2.6.8
171
172
  signing_key:
172
173
  specification_version: 4
173
174
  summary: Pipedrive API client for Ruby.