@@ -267,7 +267,7 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
267267 to_return = Hash . new
268268 sanitized_feature_flag_names . each { |name |
269269 to_return [ name . to_sym ] = control_treatment_with_config
270- impressions << @impressions_manager . build_impression ( matching_key , bucketing_key , name . to_sym , control_treatment_with_config . merge ( { label : Engine ::Models ::Label ::NOT_READY } ) , { attributes : attributes , time : nil } )
270+ impressions << { :impression => @impressions_manager . build_impression ( matching_key , bucketing_key , name . to_sym , control_treatment_with_config . merge ( { :label => Engine ::Models ::Label ::NOT_READY } ) , false , { attributes : attributes , time : nil } ) , :disabled => false }
271271 }
272272 @impressions_manager . track ( impressions )
273273 return to_return
@@ -278,7 +278,6 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
278278 valid_feature_flag_names << feature_flag_name unless feature_flag_name . nil?
279279 }
280280 start = Time . now
281- impressions_total = [ ]
282281
283282 feature_flags = @splits_repository . splits ( valid_feature_flag_names )
284283 treatments = Hash . new
@@ -291,15 +290,14 @@ def treatments(key, feature_flag_names, attributes = {}, calling_method = 'get_t
291290 next
292291 end
293292 treatments_labels_change_numbers , impressions = evaluate_treatment ( feature_flag , key , bucketing_key , matching_key , attributes , calling_method )
294- impressions_total . concat ( impressions ) unless impressions . nil?
295293 treatments [ key ] =
296294 {
297295 treatment : treatments_labels_change_numbers [ :treatment ] ,
298296 config : treatments_labels_change_numbers [ :config ]
299297 }
298+ @impressions_manager . track ( impressions ) unless impressions . empty?
300299 end
301300 record_latency ( calling_method , start )
302- @impressions_manager . track ( impressions_total ) unless impressions_total . empty?
303301
304302 treatments . merge ( invalid_treatments )
305303 end
@@ -332,50 +330,50 @@ def treatment(key, feature_flag_name, attributes = {}, split_data = nil, store_i
332330 end
333331
334332 feature_flag = @splits_repository . get_split ( feature_flag_name )
335- treatments , impressions = evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple )
333+ treatments , impressions_decorator = evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple )
336334
337- @impressions_manager . track ( impressions ) unless impressions . nil?
335+ @impressions_manager . track ( impressions_decorator ) unless impressions_decorator . nil?
338336 treatments
339337 end
340338
341339 def evaluate_treatment ( feature_flag , feature_flag_name , bucketing_key , matching_key , attributes , calling_method , multiple = false )
342- impressions = [ ]
340+ impressions_decorator = [ ]
343341 begin
344342 start = Time . now
345343 if feature_flag . nil? && ready?
346344 @config . logger . warn ( "#{ calling_method } : you passed #{ feature_flag_name } that " \
347345 'does not exist in this environment, please double check what feature flags exist in the Split user interface' )
348- return parsed_treatment ( control_treatment . merge ( { label : Engine ::Models ::Label ::NOT_FOUND } ) , multiple ) , nil
346+ return parsed_treatment ( control_treatment . merge ( { :label => Engine ::Models ::Label ::NOT_FOUND } ) , multiple ) , nil
349347 end
350- treatment_data =
348+
351349 if !feature_flag . nil? && ready?
352- @evaluator . evaluate_feature_flag (
350+ treatment_data = @evaluator . evaluate_feature_flag (
353351 { bucketing_key : bucketing_key , matching_key : matching_key } , feature_flag , attributes
354352 )
353+ impressions_disabled = feature_flag [ :impressionsDisabled ]
355354 else
356355 @config . logger . error ( "#{ calling_method } : the SDK is not ready, results may be incorrect for feature flag #{ feature_flag_name } . Make sure to wait for SDK readiness before using this method." )
357- control_treatment . merge ( { label : Engine ::Models ::Label ::NOT_READY } )
356+ treatment_data = control_treatment . merge ( { :label => Engine ::Models ::Label ::NOT_READY } )
357+ impressions_disabled = false
358358 end
359359
360360 record_latency ( calling_method , start )
361- impression = @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , treatment_data , { attributes : attributes , time : nil } )
362- impressions << impression unless impression . nil?
361+ impression_decorator = { : impression => @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , treatment_data , impressions_disabled , { attributes : attributes , time : nil } ) , :disabled => impressions_disabled }
362+ impressions_decorator << impression_decorator unless impression_decorator . nil?
363363 rescue StandardError => e
364364 @config . log_found_exception ( __method__ . to_s , e )
365-
366365 record_exception ( calling_method )
366+ impression_decorator = { :impression => @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , control_treatment , false , { attributes : attributes , time : nil } ) , :disabled => false }
367+ impressions_decorator << impression_decorator unless impression_decorator . nil?
367368
368- impression = @impressions_manager . build_impression ( matching_key , bucketing_key , feature_flag_name , control_treatment , { attributes : attributes , time : nil } )
369- impressions << impression unless impression . nil?
370-
371- return parsed_treatment ( control_treatment . merge ( { label : Engine ::Models ::Label ::EXCEPTION } ) , multiple ) , impressions
369+ return parsed_treatment ( control_treatment . merge ( { :label => Engine ::Models ::Label ::EXCEPTION } ) , multiple ) , impressions_decorator
372370 end
373371
374- return parsed_treatment ( treatment_data , multiple ) , impressions
372+ return parsed_treatment ( treatment_data , multiple ) , impressions_decorator
375373 end
376374
377375 def control_treatment
378- { treatment : Engine ::Models ::Treatment ::CONTROL }
376+ { :treatment => Engine ::Models ::Treatment ::CONTROL }
379377 end
380378
381379 def control_treatment_with_config
0 commit comments