diff --git a/lib/openpanel/sdk/tracker.rb b/lib/openpanel/sdk/tracker.rb index 44dd669..125f57c 100644 --- a/lib/openpanel/sdk/tracker.rb +++ b/lib/openpanel/sdk/tracker.rb @@ -41,14 +41,18 @@ def set_header(key, value) # @param event [String] name of event # @param tracking_type [String] # @param payload [Hash] event payload - # @param filter [Boolean] if true, event will NOT be sent to OpenPanel, defaults to false - def track(event, tracking_type: TRACKING_TYPE_TRACK, payload: {}, filter: false) - return if filter + # @param filter [Lambda] pass in a lambda to filter events. If the lambda returns true, the event won't be tracked. + # @return [Faraday::Response | nil] The Faraday plain response object or nil, if the event was filtered out + # @raise [OpenPanel::SDK::OpenPanelError] if the request fails or the event filter is not a method or lambda + def track(event, tracking_type: TRACKING_TYPE_TRACK, payload: {}, filter: ->(_payload) { false }) + return if filter.call(payload) payload = global_properties.merge(payload) unless global_properties.empty? payload = { type: tracking_type, payload: { name: event, properties: payload } } send_request payload: payload + rescue StandardError => e + raise OpenPanel::SDK::OpenPanelError, e.message end # Identify user in OpenPanel diff --git a/lib/openpanel/sdk/version.rb b/lib/openpanel/sdk/version.rb index dcc4589..73d7380 100644 --- a/lib/openpanel/sdk/version.rb +++ b/lib/openpanel/sdk/version.rb @@ -2,6 +2,6 @@ module OpenPanel module SDK - VERSION = '0.2.4' + VERSION = '0.2.5' end end diff --git a/spec/openpanel/sdk_spec.rb b/spec/openpanel/sdk_spec.rb index e6b619d..d1ab32b 100644 --- a/spec/openpanel/sdk_spec.rb +++ b/spec/openpanel/sdk_spec.rb @@ -31,9 +31,14 @@ expect(response.status).to eq(200) end + end - it 'cannot track filtered events' do - response = tracker.track('test_event', payload: { name: 'test' }, filter: true) + context 'filtering events' do + it 'cannot track filtered events with lambda as filter' do + filter = lambda { |payload| + true if payload[:name] == 'test' + } + response = tracker.track('test_event', payload: { name: 'test' }, filter: filter) expect(response).to be_nil end