@@ -8,62 +8,51 @@ module Datadog
88 module OpenFeature
99 # This class performs the evaluation of the feature flag
1010 class EvaluationEngine
11- attr_accessor :configuration
11+ ReconfigurationError = Class . new ( StandardError )
1212
13- ALLOWED_TYPES = %i [ boolean string number float integer object ] . freeze
13+ ALLOWED_TYPES = %w [ boolean string number float integer object ] . freeze
1414
1515 def initialize ( reporter , telemetry :, logger :)
1616 @reporter = reporter
1717 @telemetry = telemetry
1818 @logger = logger
1919
20- @mutex = Mutex . new
2120 @evaluator = NoopEvaluator . new ( nil )
22- @configuration = nil
2321 end
2422
25- def fetch_value ( flag_key :, expected_type :, evaluation_context : nil )
23+ def fetch_value ( flag_key :, default_value : , expected_type :, evaluation_context : nil )
2624 unless ALLOWED_TYPES . include? ( expected_type )
2725 message = "unknown type #{ expected_type . inspect } , allowed types #{ ALLOWED_TYPES . join ( ", " ) } "
28-
29- return ResolutionDetails . new (
30- error_code : Ext ::UNKNOWN_TYPE ,
31- error_message : message ,
32- reason : Ext ::ERROR ,
33- log? : false ,
34- error? : true
26+ return ResolutionDetails . build_error (
27+ value : default_value , error_code : Ext ::UNKNOWN_TYPE , error_message : message
3528 )
3629 end
3730
38- result = @evaluator . get_assignment ( flag_key , evaluation_context , expected_type )
31+ context = evaluation_context &.fields || { }
32+ result = @evaluator . get_assignment ( flag_key , default_value , context , expected_type )
33+
3934 @reporter . report ( result , flag_key : flag_key , context : evaluation_context )
4035
4136 result
4237 rescue => e
4338 @telemetry . report ( e , description : 'OpenFeature: Failed to fetch flag value' )
4439
45- ResolutionDetails . new (
46- error_code : Ext ::PROVIDER_FATAL ,
47- error_message : e . message ,
48- reason : Ext ::ERROR ,
49- error? : true ,
50- log? : false
40+ ResolutionDetails . build_error (
41+ value : default_value , error_code : Ext ::PROVIDER_FATAL , error_message : e . message
5142 )
5243 end
5344
54- def reconfigure!
55- @logger . debug ( 'OpenFeature: Removing configuration' ) if @ configuration. nil?
45+ def reconfigure! ( configuration )
46+ @logger . debug ( 'OpenFeature: Removing configuration' ) if configuration . nil?
5647
57- @mutex . synchronize do
58- @evaluator = NoopEvaluator . new ( @configuration )
59- end
48+ @evaluator = NoopEvaluator . new ( configuration )
6049 rescue => e
61- error_message = 'OpenFeature: Failed to reconfigure, reverting to the previous configuration'
50+ message = 'OpenFeature: Failed to reconfigure, reverting to the previous configuration'
6251
63- @logger . error ( "#{ error_message } , error #{ e . inspect } " )
64- @telemetry . report ( e , description : error_message )
52+ @logger . error ( "#{ message } , error #{ e . inspect } " )
53+ @telemetry . report ( e , description : message )
6554
66- raise e
55+ raise ReconfigurationError , e . message
6756 end
6857 end
6958 end
0 commit comments