pipedrive_orbit 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -0
- data/README.md +17 -1
- data/bin/pipedrive_orbit +10 -0
- data/lib/pipedrive_orbit/client.rb +9 -0
- data/lib/pipedrive_orbit/interactions/activity.rb +70 -0
- data/lib/pipedrive_orbit/orbit.rb +9 -0
- data/lib/pipedrive_orbit/pipedrive.rb +52 -0
- data/lib/pipedrive_orbit/version.rb +1 -1
- data/pipedrive_orbit.gemspec +2 -1
- data/scripts/check_activities.rb +17 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec92b13107123c64ba9576466868b6184909f52b79332d8584565697657243ef
|
4
|
+
data.tar.gz: a8f816318e4b535c22768740494532f7e41f14023ecdd7501ccee1589f2d61b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8da38dc495c6563cc5dd02c89bdf420f4b822d8e5c3702a16688d6ea7035e4e768c639c706720bf3d107f8909d28636ab003b1901bda76fba837c902912eb0cd
|
7
|
+
data.tar.gz: eb6b80ecaf24387087119bf2befef04ea66e2e851f6b232714e7e40a5d37ff305baa91b3383ee6ec3ed157ef5eef0b9adc9f738aade492383318299f2e9c834b
|
data/Gemfile.lock
CHANGED
@@ -2,6 +2,7 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
pipedrive_orbit (0.0.1)
|
5
|
+
activesupport (~> 6.1)
|
5
6
|
dotenv (~> 2.7)
|
6
7
|
http (~> 4.4)
|
7
8
|
json (~> 2.5)
|
@@ -12,10 +13,17 @@ PATH
|
|
12
13
|
GEM
|
13
14
|
remote: https://rubygems.org/
|
14
15
|
specs:
|
16
|
+
activesupport (6.1.3.2)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 1.6, < 2)
|
19
|
+
minitest (>= 5.1)
|
20
|
+
tzinfo (~> 2.0)
|
21
|
+
zeitwerk (~> 2.3)
|
15
22
|
addressable (2.7.0)
|
16
23
|
public_suffix (>= 2.0.2, < 5.0)
|
17
24
|
ast (2.4.2)
|
18
25
|
byebug (11.1.3)
|
26
|
+
concurrent-ruby (1.1.8)
|
19
27
|
crack (0.4.5)
|
20
28
|
rexml
|
21
29
|
diff-lcs (1.4.4)
|
@@ -37,7 +45,10 @@ GEM
|
|
37
45
|
http-form_data (2.3.0)
|
38
46
|
http-parser (1.2.3)
|
39
47
|
ffi-compiler (>= 1.0, < 2.0)
|
48
|
+
i18n (1.8.10)
|
49
|
+
concurrent-ruby (~> 1.0)
|
40
50
|
json (2.5.1)
|
51
|
+
minitest (5.14.4)
|
41
52
|
orbit_activities (0.0.2)
|
42
53
|
http (~> 4.4)
|
43
54
|
json (~> 2.5)
|
@@ -77,6 +88,8 @@ GEM
|
|
77
88
|
parser (>= 3.0.1.1)
|
78
89
|
ruby-progressbar (1.11.0)
|
79
90
|
thor (1.1.0)
|
91
|
+
tzinfo (2.0.4)
|
92
|
+
concurrent-ruby (~> 1.0)
|
80
93
|
unf (0.1.4)
|
81
94
|
unf_ext
|
82
95
|
unf_ext (0.0.7.7)
|
data/README.md
CHANGED
@@ -60,13 +60,29 @@ Once, you have an instantiated client, you can fetch Pipedrive deal notes and se
|
|
60
60
|
```ruby
|
61
61
|
client.notes
|
62
62
|
```
|
63
|
+
### Fetching Pipedrive Notes
|
64
|
+
|
65
|
+
Once, you have an instantiated client, you can fetch Pipedrive activities and send them to Orbit by invoking the `#activities` instance method:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
client.activities
|
69
|
+
```
|
63
70
|
## CLI Usage
|
64
71
|
|
65
|
-
You can also use this package with the included CLI. To use the CLI pass in the required environment variables on the command line before invoking the CLI
|
72
|
+
You can also use this package with the included CLI. To use the CLI pass in the required environment variables on the command line before invoking the CLI.
|
73
|
+
|
74
|
+
To check for new deal notes:
|
66
75
|
|
67
76
|
```bash
|
68
77
|
$ ORBIT_API_KEY=... ORBIT_WORKSPACE_ID=... PIPEDRIVE_API_KEY=... PIPEDRIVE_URL=... bundle exec pipedrive_orbit --check_notes
|
69
78
|
```
|
79
|
+
|
80
|
+
To check for new activities:
|
81
|
+
|
82
|
+
```bash
|
83
|
+
$ ORBIT_API_KEY=... ORBIT_WORKSPACE_ID=... PIPEDRIVE_API_KEY=... PIPEDRIVE_URL=... bundle exec pipedrive_orbit --check_activities
|
84
|
+
```
|
85
|
+
|
70
86
|
## GitHub Actions Automation Setup
|
71
87
|
|
72
88
|
⚡ You can set up this integration in a matter of minutes using our GitHub Actions template. It will run regularly to add new activities to your Orbit workspace. All you need is a GitHub account.
|
data/bin/pipedrive_orbit
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'optparse'
|
4
4
|
|
5
5
|
check_notes = false
|
6
|
+
check_activities = false
|
6
7
|
|
7
8
|
options = {}
|
8
9
|
choices = OptionParser.new do |opts|
|
@@ -14,6 +15,9 @@ choices = OptionParser.new do |opts|
|
|
14
15
|
opts.on("--check-notes", "Check for new Pipedrive deal notes") do
|
15
16
|
check_notes = true
|
16
17
|
end
|
18
|
+
opts.on("--check-check_activities", "Check for new Pipedrive activities") do
|
19
|
+
check_activities = true
|
20
|
+
end
|
17
21
|
end.parse!
|
18
22
|
|
19
23
|
$LOAD_PATH.unshift(File.expand_path('../lib/pipedrive_orbit', __dir__))
|
@@ -25,4 +29,10 @@ if check_notes
|
|
25
29
|
puts "Checking for new Pipedrive deal notes and posting them to your Orbit workspace..."
|
26
30
|
ARGV[0] = 'render'
|
27
31
|
PipedriveOrbit::Scripts::CheckNotes.start(ARGV)
|
32
|
+
end
|
33
|
+
|
34
|
+
if check_activities
|
35
|
+
puts "Checking for new Pipedrive activities and posting them to your Orbit workspace..."
|
36
|
+
ARGV[0] = 'render'
|
37
|
+
PipedriveOrbit::Scripts::CheckActivities.start(ARGV)
|
28
38
|
end
|
@@ -47,5 +47,14 @@ module PipedriveOrbit
|
|
47
47
|
orbit_workspace: @orbit_workspace
|
48
48
|
).process_notes
|
49
49
|
end
|
50
|
+
|
51
|
+
def activities
|
52
|
+
PipedriveOrbit::Pipedrive.new(
|
53
|
+
pipedrive_api_key: @pipedrive_api_key,
|
54
|
+
pipedrive_url: @pipedrive_url,
|
55
|
+
orbit_api_key: @orbit_api_key,
|
56
|
+
orbit_workspace: @orbit_workspace
|
57
|
+
).process_activities
|
58
|
+
end
|
50
59
|
end
|
51
60
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module PipedriveOrbit
|
6
|
+
module Interactions
|
7
|
+
class Activity
|
8
|
+
def initialize(activity:, pipedrive_url:, orbit_workspace:, orbit_api_key:)
|
9
|
+
@activity = activity
|
10
|
+
@pipedrive_url = pipedrive_url
|
11
|
+
@orbit_workspace = orbit_workspace
|
12
|
+
@orbit_api_key = orbit_api_key
|
13
|
+
|
14
|
+
after_initialize!
|
15
|
+
end
|
16
|
+
|
17
|
+
def after_initialize!
|
18
|
+
OrbitActivities::Request.new(
|
19
|
+
api_key: @orbit_api_key,
|
20
|
+
workspace_id: @orbit_workspace,
|
21
|
+
user_agent: "community-ruby-pipedrive-orbit/#{PipedriveOrbit::VERSION}",
|
22
|
+
body: construct_body.to_json
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def construct_member
|
27
|
+
hash = { name: @activity["person_name"] } unless @activity["person_name"].nil?
|
28
|
+
|
29
|
+
return hash unless hash.nil?
|
30
|
+
|
31
|
+
if !@activity["attendees"].nil?
|
32
|
+
hash = { email: @activity["attendees"][0]["email_address"] }
|
33
|
+
end
|
34
|
+
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
|
38
|
+
def construct_body
|
39
|
+
hash = {
|
40
|
+
activity: {
|
41
|
+
activity_type: "pipedrive:activity",
|
42
|
+
tags: ["channel:pipedrive"],
|
43
|
+
title: "Added New #{@activity["type"].capitalize} Activity to Pipedrive",
|
44
|
+
description: construct_description,
|
45
|
+
occurred_at: @activity["add_time"],
|
46
|
+
key: @activity["id"],
|
47
|
+
member: {}
|
48
|
+
},
|
49
|
+
identity: {
|
50
|
+
source: "pipedrive"
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
hash[:activity][:member].merge!(construct_member)
|
55
|
+
hash[:activity][:member].merge!(company: @activity["org_name"]) unless @activity["org_name"].nil?
|
56
|
+
hash[:identity].merge!(construct_member)
|
57
|
+
|
58
|
+
hash
|
59
|
+
end
|
60
|
+
|
61
|
+
def construct_description
|
62
|
+
if @activity["note"]
|
63
|
+
return @activity["note"]
|
64
|
+
end
|
65
|
+
|
66
|
+
"#{@activity["subject"]} was added by #{@activity["owner_name"]}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -11,6 +11,15 @@ module PipedriveOrbit
|
|
11
11
|
orbit_api_key: orbit_api_key
|
12
12
|
)
|
13
13
|
end
|
14
|
+
|
15
|
+
if type == "activity"
|
16
|
+
PipedriveOrbit::Interactions::Activity.new(
|
17
|
+
activity: data[:activity],
|
18
|
+
pipedrive_url: data[:pipedrive_url],
|
19
|
+
orbit_workspace: orbit_workspace,
|
20
|
+
orbit_api_key: orbit_api_key
|
21
|
+
)
|
22
|
+
end
|
14
23
|
end
|
15
24
|
end
|
16
25
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/time"
|
4
|
+
|
3
5
|
module PipedriveOrbit
|
4
6
|
class Pipedrive
|
5
7
|
def initialize(params = {})
|
@@ -26,6 +28,56 @@ module PipedriveOrbit
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
31
|
+
def process_activities
|
32
|
+
activities = get_activities
|
33
|
+
|
34
|
+
return get_activities["error"] if get_activities["success"] == false
|
35
|
+
return "No new activities in the past day!" if activities.nil?
|
36
|
+
|
37
|
+
activities["data"].each do |activity|
|
38
|
+
next if no_member_info(activity)
|
39
|
+
|
40
|
+
PipedriveOrbit::Orbit.call(
|
41
|
+
type: "activity",
|
42
|
+
data: {
|
43
|
+
activity: activity,
|
44
|
+
pipedrive_url: @pipedrive_url
|
45
|
+
},
|
46
|
+
orbit_workspace: @orbit_workspace,
|
47
|
+
orbit_api_key: @orbit_api_key
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_activities
|
53
|
+
url = URI("https://api.pipedrive.com/v1/activities")
|
54
|
+
url.query = "user_id=0&start_date=#{create_start_date}&end_date=#{create_end_date}&api_token=#{@pipedrive_api_key}"
|
55
|
+
https = Net::HTTP.new(url.host, url.port)
|
56
|
+
https.use_ssl = true
|
57
|
+
|
58
|
+
request = Net::HTTP::Get.new(url)
|
59
|
+
|
60
|
+
response = https.request(request)
|
61
|
+
|
62
|
+
response = JSON.parse(response.body)
|
63
|
+
end
|
64
|
+
|
65
|
+
def no_member_info(activity)
|
66
|
+
return true if activity["person_name"].nil? && activity["attendees"].nil?
|
67
|
+
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_start_date
|
72
|
+
date = Date.parse(Time.now.utc.to_date.to_s)-1.day
|
73
|
+
date.strftime("%Y-%m-%d")
|
74
|
+
end
|
75
|
+
|
76
|
+
def create_end_date
|
77
|
+
date = Date.parse(Time.now.utc.to_date.to_s)
|
78
|
+
date.strftime("%Y-%m-%d")
|
79
|
+
end
|
80
|
+
|
29
81
|
def get_notes
|
30
82
|
url = URI("https://api.pipedrive.com/v1/notes")
|
31
83
|
url.query = "sort=add_time DESC&api_token=#{@pipedrive_api_key}"
|
data/pipedrive_orbit.gemspec
CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.bindir = "bin"
|
26
26
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
27
27
|
spec.require_paths = ["lib"]
|
28
|
-
|
28
|
+
|
29
|
+
spec.add_dependency "activesupport", "~> 6.1"
|
29
30
|
spec.add_dependency "http", "~> 4.4"
|
30
31
|
spec.add_dependency "json", "~> 2.5"
|
31
32
|
spec.add_dependency "zeitwerk", "~> 2.4"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "pipedrive_orbit"
|
5
|
+
require "thor"
|
6
|
+
|
7
|
+
module PipedriveOrbit
|
8
|
+
module Scripts
|
9
|
+
class CheckActivities < Thor
|
10
|
+
desc "render", "check for new Pipedrive activities and push them to Orbit"
|
11
|
+
def render
|
12
|
+
client = PipedriveOrbit::Client.new
|
13
|
+
client.activities
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipedrive_orbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orbit DevRel
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-05-
|
12
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '6.1'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '6.1'
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: http
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,12 +157,14 @@ files:
|
|
143
157
|
- bin/pipedrive_orbit
|
144
158
|
- lib/pipedrive_orbit.rb
|
145
159
|
- lib/pipedrive_orbit/client.rb
|
160
|
+
- lib/pipedrive_orbit/interactions/activity.rb
|
146
161
|
- lib/pipedrive_orbit/interactions/note.rb
|
147
162
|
- lib/pipedrive_orbit/orbit.rb
|
148
163
|
- lib/pipedrive_orbit/pipedrive.rb
|
149
164
|
- lib/pipedrive_orbit/version.rb
|
150
165
|
- pipedrive_orbit.gemspec
|
151
166
|
- readme-images/ways-to-use.png
|
167
|
+
- scripts/check_activities.rb
|
152
168
|
- scripts/check_notes.rb
|
153
169
|
homepage: https://github.com/orbit-love/community-ruby-pipedrive-orbit
|
154
170
|
licenses:
|