diff --git a/Gemfile.lock b/Gemfile.lock index 49fab94..ef192c5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - openpanel-sdk (0.1.2) + openpanel-sdk (0.2.0) GEM remote: https://rubygems.org/ diff --git a/lib/openpanel/sdk/tracker.rb b/lib/openpanel/sdk/tracker.rb index 1cde6e3..f745e1b 100644 --- a/lib/openpanel/sdk/tracker.rb +++ b/lib/openpanel/sdk/tracker.rb @@ -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 ############################## @@ -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 diff --git a/lib/openpanel/sdk/version.rb b/lib/openpanel/sdk/version.rb index 5d2bf8f..09030c9 100644 --- a/lib/openpanel/sdk/version.rb +++ b/lib/openpanel/sdk/version.rb @@ -2,6 +2,6 @@ module OpenPanel module SDK - VERSION = '0.1.2' + VERSION = '0.2.0' end end diff --git a/spec/openpanel/sdk_spec.rb b/spec/openpanel/sdk_spec.rb index 77d2cdb..5562b18 100644 --- a/spec/openpanel/sdk_spec.rb +++ b/spec/openpanel/sdk_spec.rb @@ -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