|
16 | 16 | require_relative './audience' |
17 | 17 | require_relative './params' |
18 | 18 | require_relative './version' |
| 19 | +require_relative '../optimizely/helpers/event_tag_utils' |
19 | 20 |
|
20 | 21 | module Optimizely |
21 | 22 | class Event |
@@ -89,20 +90,21 @@ def create_impression_event(experiment_key, variation_id, user_id, attributes) |
89 | 90 | Event.new(:post, IMPRESSION_EVENT_ENDPOINT, @params, POST_HEADERS) |
90 | 91 | end |
91 | 92 |
|
92 | | - def create_conversion_event(event_key, user_id, attributes, event_value, experiment_keys) |
| 93 | + def create_conversion_event(event_key, user_id, attributes, event_tags, experiment_keys) |
93 | 94 | # Create conversion Event to be sent to the logging endpoint. |
94 | 95 | # |
95 | 96 | # event_key - Event key representing the event which needs to be recorded. |
96 | 97 | # user_id - ID for user. |
97 | 98 | # attributes - Hash representing user attributes and values which need to be recorded. |
98 | | - # event_value - Value associated with the event. Can be used to represent revenue in cents. |
| 99 | + # event_tags - Hash representing metadata associated with the event. |
99 | 100 | # experiment_keys - Array of valid experiment keys for the event |
100 | 101 | # |
101 | 102 | # Returns event hash encapsulating the conversion event. |
102 | 103 |
|
103 | 104 | @params = {} |
104 | 105 | add_common_params(user_id, attributes) |
105 | | - add_conversion_event(event_key, event_value) |
| 106 | + add_conversion_event(event_key) |
| 107 | + add_event_tags(event_tags) |
106 | 108 | add_layer_states(user_id, experiment_keys) |
107 | 109 | Event.new(:post, CONVERSION_EVENT_ENDPOINT, @params, POST_HEADERS) |
108 | 110 | end |
@@ -161,26 +163,47 @@ def add_decision(experiment_key, variation_id) |
161 | 163 | } |
162 | 164 | end |
163 | 165 |
|
164 | | - def add_conversion_event(event_key, event_value) |
| 166 | + def add_event_tags(event_tags) |
| 167 | + @params['eventFeatures'] ||= [] |
| 168 | + @params['eventMetrics'] ||= [] |
| 169 | + |
| 170 | + return if event_tags.nil? |
| 171 | + |
| 172 | + event_tags.each_pair do |event_tag_key, event_tag_value| |
| 173 | + next if event_tag_value.nil? |
| 174 | + |
| 175 | + event_feature = { |
| 176 | + 'id' => event_tag_key, |
| 177 | + 'type' => 'custom', |
| 178 | + 'value' => event_tag_value, |
| 179 | + 'shouldIndex' => false, |
| 180 | + } |
| 181 | + @params['eventFeatures'].push(event_feature) |
| 182 | + |
| 183 | + end |
| 184 | + |
| 185 | + event_value = Helpers::EventTagUtils.get_revenue_value(event_tags) |
| 186 | + |
| 187 | + if event_value |
| 188 | + event_metric = { |
| 189 | + 'name' => 'revenue', |
| 190 | + 'value' => event_value |
| 191 | + } |
| 192 | + @params['eventMetrics'].push(event_metric) |
| 193 | + end |
| 194 | + |
| 195 | + end |
| 196 | + |
| 197 | + def add_conversion_event(event_key) |
165 | 198 | # Add conversion event information to the event. |
166 | 199 | # |
167 | 200 | # event_key - Event key representing the event which needs to be recorded. |
168 | | - # event_value - Value associated with the event. Can be used to represent revenue in cents. |
169 | 201 |
|
170 | 202 | event_id = @config.event_key_map[event_key]['id'] |
171 | 203 | event_name = @config.event_key_map[event_key]['key'] |
172 | 204 |
|
173 | 205 | @params['eventEntityId'] = event_id |
174 | | - @params['eventFeatures'] = [] |
175 | 206 | @params['eventName'] = event_name |
176 | | - @params['eventMetrics'] = [] |
177 | | - |
178 | | - if event_value |
179 | | - @params['eventMetrics'].push({ |
180 | | - 'name' => 'revenue', |
181 | | - 'value' => event_value, |
182 | | - }) |
183 | | - end |
184 | 207 | end |
185 | 208 |
|
186 | 209 | def add_layer_states(user_id, experiment_keys) |
@@ -241,18 +264,21 @@ def create_impression_event(experiment_key, variation_id, user_id, attributes) |
241 | 264 | Event.new(:get, sprintf(OFFLINE_API_PATH, project_id: @params[Params::PROJECT_ID]), @params, {}) |
242 | 265 | end |
243 | 266 |
|
244 | | - def create_conversion_event(event_key, user_id, attributes, event_value, experiment_keys) |
| 267 | + def create_conversion_event(event_key, user_id, attributes, event_tags, experiment_keys) |
245 | 268 | # Create conversion Event to be sent to the logging endpoint. |
246 | 269 | # |
247 | 270 | # event_key - Goal key representing the event which needs to be recorded. |
248 | 271 | # user_id - ID for user. |
249 | 272 | # attributes - Hash representing user attributes and values which need to be recorded. |
250 | | - # event_value - Value associated with the event. Can be used to represent revenue in cents. |
| 273 | + # event_tags - Hash representing metadata associated with the event. |
251 | 274 | # experiment_keys - Array of valid experiment keys for the goal |
252 | 275 | # |
253 | 276 | # Returns event hash encapsulating the conversion event. |
254 | 277 |
|
255 | 278 | @params = {} |
| 279 | + |
| 280 | + event_value = Helpers::EventTagUtils.get_revenue_value(event_tags) |
| 281 | + |
256 | 282 | add_common_params(user_id, attributes) |
257 | 283 | add_conversion_goal(event_key, event_value) |
258 | 284 | add_experiment_variation_params(user_id, experiment_keys) |
|
0 commit comments