Class: OpenPanel::SDK::Tracker
- Inherits:
-
Object
- Object
- OpenPanel::SDK::Tracker
- Defined in:
- lib/openpanel/sdk/tracker.rb
Overview
OpenPanel SDK tracker class. Use this class to track events in OpenPanel by using the OpenPanel backend API.
Constant Summary collapse
- TRACKING_TYPE_IDENTIFY =
'identify'- TRACKING_TYPE_TRACK =
'track'- TRACKING_TYPE_INCREMENT =
'increment'- TRACKING_TYPE_DECREMENT =
'decrement'- TRACKING_TYPE_GROUP =
'group'- TRACKING_TYPE_ASSIGN_GROUP =
'assign_group'
Instance Attribute Summary collapse
-
#global_properties ⇒ Object
readonly
Returns the value of attribute global_properties.
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
Instance Method Summary collapse
-
#decrement_property(user, property = 'visits', value = 1) ⇒ Object
Decrement property in OpenPanel.
- #fetch_device_id ⇒ Object
-
#identify(user) ⇒ Object
Identify user in OpenPanel openpanel.dev/docs/api/track.
-
#increment_property(user, property = 'visits', value = 1) ⇒ Object
Decrement property in OpenPanel.
-
#initialize(global_props, disabled: false) ⇒ Tracker
constructor
Initialize OpenPanel tracker.
-
#revenue(user:, amount:, properties: {}) ⇒ Object
Track revenue in OpenPanel.
-
#set_group(profile_id, group_id) ⇒ Object
Assign user to a group in OpenPanel.
-
#set_groups(profile_id, group_ids) ⇒ Object
Assign user to multiple groups in OpenPanel.
-
#set_header(key, value) ⇒ Object
Set custom header for OpenPanel request.
-
#track(event, profile_id: '', tracking_type: TRACKING_TYPE_TRACK, payload: {}, groups: nil, filter: ->(_payload) { false }) ⇒ Faraday::Response | nil
Track events in OpenPanel openpanel.dev/docs/api/track.
-
#upsert_group(group) ⇒ Object
Create or update a group in OpenPanel.
Constructor Details
#initialize(global_props, disabled: false) ⇒ Tracker
Initialize OpenPanel tracker
24 25 26 27 28 29 30 31 32 |
# File 'lib/openpanel/sdk/tracker.rb', line 24 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 |
Instance Attribute Details
#global_properties ⇒ Object (readonly)
Returns the value of attribute global_properties.
19 20 21 |
# File 'lib/openpanel/sdk/tracker.rb', line 19 def global_properties @global_properties end |
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
19 20 21 |
# File 'lib/openpanel/sdk/tracker.rb', line 19 def headers @headers end |
Instance Method Details
#decrement_property(user, property = 'visits', value = 1) ⇒ Object
Decrement property in OpenPanel
91 92 93 94 95 96 |
# File 'lib/openpanel/sdk/tracker.rb', line 91 def decrement_property(user, property = 'visits', value = 1) payload = { profileId: user.profile_id, property: property, value: value } payload = { type: TRACKING_TYPE_DECREMENT, payload: payload } send_request payload: payload end |
#fetch_device_id ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/openpanel/sdk/tracker.rb', line 137 def fetch_device_id return if @disabled url = "#{ENV['OPENPANEL_TRACK_URL']}/device-id" response = Faraday.get url, {}, @headers case response.status when 401 raise OpenPanel::SDK::OpenPanelError, 'Unauthorized' when 429 raise OpenPanel::SDK::OpenPanelError, 'Too many requests' when 500 raise OpenPanel::SDK::OpenPanelError, 'Internal server error' else JSON.parse(response.body, symbolize_names: true)[:deviceId] end rescue StandardError => e raise OpenPanel::SDK::OpenPanelError, e. end |
#identify(user) ⇒ Object
Identify user in OpenPanel openpanel.dev/docs/api/track
67 68 69 70 71 72 73 74 |
# File 'lib/openpanel/sdk/tracker.rb', line 67 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, properties: properties } payload = { type: TRACKING_TYPE_IDENTIFY, payload: payload } send_request payload: payload end |
#increment_property(user, property = 'visits', value = 1) ⇒ Object
Decrement property in OpenPanel
80 81 82 83 84 85 |
# File 'lib/openpanel/sdk/tracker.rb', line 80 def increment_property(user, property = 'visits', value = 1) payload = { profileId: user.profile_id, property: property, value: value } payload = { type: TRACKING_TYPE_INCREMENT, payload: payload } send_request payload: payload end |
#revenue(user:, amount:, properties: {}) ⇒ Object
Track revenue in OpenPanel
102 103 104 105 106 |
# File 'lib/openpanel/sdk/tracker.rb', line 102 def revenue(user:, amount:, properties: {}) payload = { __revenue: amount }.merge(properties) track 'revenue', profile_id: user.profile_id, payload: payload end |
#set_group(profile_id, group_id) ⇒ Object
Assign user to a group in OpenPanel
120 121 122 123 124 125 |
# File 'lib/openpanel/sdk/tracker.rb', line 120 def set_group(profile_id, group_id) payload = { profileId: profile_id, groupIds: [group_id] } payload = { type: TRACKING_TYPE_ASSIGN_GROUP, payload: payload } send_request payload: payload end |
#set_groups(profile_id, group_ids) ⇒ Object
Assign user to multiple groups in OpenPanel
130 131 132 133 134 135 |
# File 'lib/openpanel/sdk/tracker.rb', line 130 def set_groups(profile_id, group_ids) payload = { profileId: profile_id, groupIds: group_ids } payload = { type: TRACKING_TYPE_ASSIGN_GROUP, payload: payload } send_request payload: payload end |
#set_header(key, value) ⇒ Object
Set custom header for OpenPanel request
37 38 39 |
# File 'lib/openpanel/sdk/tracker.rb', line 37 def set_header(key, value) @headers[key] = value end |
#track(event, profile_id: '', tracking_type: TRACKING_TYPE_TRACK, payload: {}, groups: nil, filter: ->(_payload) { false }) ⇒ Faraday::Response | nil
Track events in OpenPanel openpanel.dev/docs/api/track
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/openpanel/sdk/tracker.rb', line 51 def track(event, profile_id: '', tracking_type: TRACKING_TYPE_TRACK, payload: {}, groups: nil, filter: ->(_payload) { false }) return if filter.call(payload) payload = global_properties.merge(payload) unless global_properties.empty? payload = { name: event, profileId: profile_id, properties: payload } payload[:groups] = Array(groups) if groups payload = { type: tracking_type, payload: payload } send_request payload: payload rescue StandardError => e raise OpenPanel::SDK::OpenPanelError, e. end |
#upsert_group(group) ⇒ Object
Create or update a group in OpenPanel
110 111 112 113 114 115 |
# File 'lib/openpanel/sdk/tracker.rb', line 110 def upsert_group(group) payload = { id: group.id, type: group.type, name: group.name, properties: group.properties } payload = { type: TRACKING_TYPE_GROUP, payload: payload } send_request payload: payload end |