@@ -9,13 +9,70 @@ module Core
99 #
1010 # @param evaluation_context [Hash] The evaluation context
1111 # @return [Hash] Evaluation result with flags and segments
12- def self . get_evaluation_result ( _evaluation_context )
13- # TODO: Implement core evaluation logic
12+ # returns EvaluationResultWithMetadata
13+ def get_evaluation_result ( evaluation_context )
14+ segments , segment_overrides = evaluate_segments ( evaluation_context )
15+ flags = evaluate_features ( evaluation_context , segment_overrides )
1416 {
15- flags : { } ,
16- segments : [ ]
17+ flags : flags ,
18+ segments : segments ,
1719 }
1820 end
21+
22+ # Returns { segments: EvaluationResultSegments; segmentOverrides: Record<string, SegmentOverride>; }
23+ def evaluate_segments ( evaluation_context )
24+ if evaluation_context . identities . nil? || evaluation_context . segments . nil?
25+ return [ ] , { }
26+ end
27+ segments = [ ]
28+ segment_overrides = process_segment_overrides ( evaluation_context . identities )
29+ return segments , segment_overrides
30+ end
31+
32+ # Returns Record<string: override.name, SegmentOverride>
33+ def process_segment_overrides ( _identity_segments )
34+ segment_overrides = { }
35+ return segment_overrides
36+ end
37+
38+ # returns EvaluationResultFlags<Metadata>
39+ def evaluate_features ( evaluation_context , _segment_overrides )
40+ raise NotImplementedError
41+ end
42+
43+ # Returns {value: any; reason?: string}
44+ def evaluate_feature_value ( _feature , _identity_key )
45+ raise NotImplementedError
46+ end
47+
48+ # Returns {value: any; reason?: string}
49+ def get_multivariate_feature_value ( _feature , _identity_key )
50+ raise NotImplementedError
51+ end
52+
53+ # returns boolean
54+ def should_apply_override ( _override , _existing_overrides )
55+ raise NotImplementedError
56+ end
57+
58+ private
59+
60+ # returns boolean
61+ def higher_priority? ( priority_a , priority_b )
62+ ( priority_a || Float ::INFINITY ) < ( priority_b || Float ::INFINITY )
63+ end
64+
65+ def get_targeting_match_reason ( match_object )
66+ type = match_object . type
67+
68+ if type == 'SEGMENT'
69+ return match_object . override ? "TARGETING_MATCH; segment=#{ match_object . override . segment_name } " : 'DEFAULT'
70+ end
71+
72+ return "SPLIT; weight=#{ match_object . weight } " if type == 'SPLIT'
73+
74+ 'DEFAULT'
75+ end
1976 end
2077 end
2178 end
0 commit comments