Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
openpanel-sdk (0.1.2)
openpanel-sdk (0.2.0)

GEM
remote: https://rubygems.org/
Expand Down
23 changes: 7 additions & 16 deletions lib/openpanel/sdk/tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,21 @@ class Tracker
TRACKING_TYPE_INCREMENT = 'increment'
TRACKING_TYPE_DECREMENT = 'decrement'

attr_reader :headers
attr_reader :headers, :global_properties

##############################
# Initialize OpenPanel tracker
# @param global_props [Hash] global properties to send with every `track` and `identify` event
# @param disabled [Boolean] disable sending tracking events, defaults to false
##############################
def initialize(disabled: false)
def initialize(global_props: {}, disabled: false)
@headers = {
'Content-Type' => 'application/json',
'openpanel-client-id' => ENV['OPENPANEL_CLIENT_ID'],
'openpanel-client-secret' => ENV['OPENPANEL_CLIENT_SECRET']
}
@disabled = disabled
@global_properties = global_props
end

##############################
Expand All @@ -44,32 +46,21 @@ def set_header(key, value)
# @param payload [Hash] event payload
##############################
def track(event, tracking_type: TRACKING_TYPE_TRACK, payload: {})
payload = global_properties.merge(payload) unless global_properties.empty?
payload = { type: tracking_type, payload: { name: event, properties: payload } }

send_request payload: payload
end

##############################
# Track page view in OpenPanel
# @param user [User] user to track
# @param path [String] page path
##############################
def track_page_view(user, path)
if user
track 'view', payload: { profileId: user.profile_id, path: path }
else
track 'view', payload: { path: path }
end
end

##############################
# Identify user in OpenPanel
# https://openpanel.dev/docs/api/track
# @param user [OpenPanel::SDK::IdentifyUser] user to identify
##############################
def identify(user)
properties = user.properties.merge(global_properties) unless global_properties.empty?
payload = { profileId: user.profile_id, firstName: user.first_name, lastName: user.last_name,
email: user.email }
email: user.email, properties: properties }
payload = { type: TRACKING_TYPE_IDENTIFY, payload: payload }

send_request payload: payload
Expand Down
2 changes: 1 addition & 1 deletion lib/openpanel/sdk/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

module OpenPanel
module SDK
VERSION = '0.1.2'
VERSION = '0.2.0'
end
end
7 changes: 7 additions & 0 deletions spec/openpanel/sdk_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@

expect(response.status).to eq(200)
end

it 'can track with global properties' do
tracker = OpenPanel::SDK::Tracker.new(global_props: { sdkName: 'ruby' })
response = tracker.track('test_event')

expect(response.status).to eq(200)
end
end

context 'identifying users' do
Expand Down
Loading