Skip to content

Commit

Permalink
start work on activities
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben Greenberg committed May 18, 2021
1 parent 0fb7583 commit c605739
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 1 deletion.
13 changes: 13 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ PATH
remote: .
specs:
pipedrive_orbit (0.0.1)
activesupport (~> 6.1)
dotenv (~> 2.7)
http (~> 4.4)
json (~> 2.5)
Expand All @@ -12,10 +13,17 @@ PATH
GEM
remote: https://rubygems.org/
specs:
activesupport (6.1.3.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
ast (2.4.2)
byebug (11.1.3)
concurrent-ruby (1.1.8)
crack (0.4.5)
rexml
diff-lcs (1.4.4)
Expand All @@ -37,7 +45,10 @@ GEM
http-form_data (2.3.0)
http-parser (1.2.3)
ffi-compiler (>= 1.0, < 2.0)
i18n (1.8.10)
concurrent-ruby (~> 1.0)
json (2.5.1)
minitest (5.14.4)
orbit_activities (0.0.2)
http (~> 4.4)
json (~> 2.5)
Expand Down Expand Up @@ -77,6 +88,8 @@ GEM
parser (>= 3.0.1.1)
ruby-progressbar (1.11.0)
thor (1.1.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
Expand Down
Empty file modified bin/pipedrive_orbit
100644 → 100755
Empty file.
9 changes: 9 additions & 0 deletions lib/pipedrive_orbit/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,14 @@ def notes
orbit_workspace: @orbit_workspace
).process_notes
end

def activities
PipedriveOrbit::Pipedrive.new(
pipedrive_api_key: @pipedrive_api_key,
pipedrive_url: @pipedrive_url,
orbit_api_key: @orbit_api_key,
orbit_workspace: @orbit_workspace
).process_activities
end
end
end
70 changes: 70 additions & 0 deletions lib/pipedrive_orbit/interactions/activity.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# frozen_string_literal: true

require "json"

module PipedriveOrbit
module Interactions
class Activity
def initialize(activity:, pipedrive_url:, orbit_workspace:, orbit_api_key:)
@activity = activity
@pipedrive_url = pipedrive_url
@orbit_workspace = orbit_workspace
@orbit_api_key = orbit_api_key

after_initialize!
end

def after_initialize!
OrbitActivities::Request.new(
api_key: @orbit_api_key,
workspace_id: @orbit_workspace,
user_agent: "community-ruby-pipedrive-orbit/#{PipedriveOrbit::VERSION}",
body: construct_body.to_json
)
end

def construct_member
hash = { name: @activity["person_name"] } unless @activity["person_name"].nil?

return hash unless hash.nil?

if !@activity["attendees"].nil?
hash = { email: @activity["attendees"][0]["email_address"] }
end

hash
end

def construct_body
hash = {
activity: {
activity_type: "pipedrive:activity",
tags: ["channel:pipedrive"],
title: "Added New #{@activity["type"].capitalize} Activity to Pipedrive",
description: construct_description,
occurred_at: @activity["add_time"],
key: @activity["id"],
member: {}
},
identity: {
source: "pipedrive"
}
}

hash[:activity][:member].merge!(construct_member)
hash[:activity][:member].merge!(company: @activity["org_name"]) unless @activity["org_name"].nil?
hash[:identity].merge!(construct_member)

hash
end

def construct_description
if @activity["note"]
return @activity["note"]
end

"#{@activity["subject"]} was added by #{@activity["owner_name"]}"
end
end
end
end
9 changes: 9 additions & 0 deletions lib/pipedrive_orbit/orbit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ def self.call(type:, data:, orbit_workspace:, orbit_api_key:)
orbit_api_key: orbit_api_key
)
end

if type == "activity"
PipedriveOrbit::Interactions::Activity.new(
activity: data[:activity],
pipedrive_url: data[:pipedrive_url],
orbit_workspace: orbit_workspace,
orbit_api_key: orbit_api_key
)
end
end
end
end
52 changes: 52 additions & 0 deletions lib/pipedrive_orbit/pipedrive.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require "active_support/time"

module PipedriveOrbit
class Pipedrive
def initialize(params = {})
Expand All @@ -26,6 +28,56 @@ def process_notes
end
end

def process_activities
activities = get_activities

return get_activities["error"] if get_activities["success"] == false
return "No new activities in the past day!" if activities.nil?

activities["data"].each do |activity|
next if no_member_info(activity)

PipedriveOrbit::Orbit.call(
type: "activity",
data: {
activity: activity,
pipedrive_url: @pipedrive_url
},
orbit_workspace: @orbit_workspace,
orbit_api_key: @orbit_api_key
)
end
end

def get_activities
url = URI("https://api.pipedrive.com/v1/activities")
url.query = "user_id=0&start_date=#{create_start_date}&end_date=#{create_end_date}&api_token=#{@pipedrive_api_key}"
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)

response = https.request(request)

response = JSON.parse(response.body)
end

def no_member_info(activity)
return true if activity["person_name"].nil? && activity["attendees"].nil?

false
end

def create_start_date
date = Date.parse(Time.now.utc.to_date.to_s)-1.day
date.strftime("%Y-%m-%d")
end

def create_end_date
date = Date.parse(Time.now.utc.to_date.to_s)
date.strftime("%Y-%m-%d")
end

def get_notes
url = URI("https://api.pipedrive.com/v1/notes")
url.query = "sort=add_time DESC&api_token=#{@pipedrive_api_key}"
Expand Down
3 changes: 2 additions & 1 deletion pipedrive_orbit.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
spec.bindir = "bin"
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]


spec.add_dependency "activesupport", "~> 6.1"
spec.add_dependency "http", "~> 4.4"
spec.add_dependency "json", "~> 2.5"
spec.add_dependency "zeitwerk", "~> 2.4"
Expand Down

0 comments on commit c605739

Please sign in to comment.