Skip to content

Commit 2aeb65a

Browse files
committed
feat: added-engine-function-signatures
1 parent 3d7fa00 commit 2aeb65a

File tree

4 files changed

+80
-58
lines changed

4 files changed

+80
-58
lines changed

dev_test.rb

Lines changed: 0 additions & 31 deletions
This file was deleted.

lib/flagsmith/engine/evaluation/core.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
module Flagsmith
44
module Engine
55
module Evaluation
6+
# Core evaluation logic module
67
module Core
78
# Get evaluation result from evaluation context
89
#
910
# @param evaluation_context [Hash] The evaluation context
1011
# @return [Hash] Evaluation result with flags and segments
11-
def self.get_evaluation_result(evaluation_context)
12+
def self.get_evaluation_result(_evaluation_context)
1213
# TODO: Implement core evaluation logic
1314
{
1415
flags: {},
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# frozen_string_literal: true
2+
3+
module Flagsmith
4+
module Engine
5+
module Evaluation
6+
class Engine
7+
# returns EvaluationResultWithMetadata
8+
def get_evaluation_result(_evaluation_context)
9+
{
10+
flags: {},
11+
segments: []
12+
}
13+
end
14+
15+
# Returns { segments: EvaluationResultSegments; segmentOverrides: Record<string, SegmentOverride>; }
16+
def evaluate_segments(evaluation_context); end
17+
18+
# Returns Record<string: override.nae, SegmentOverride>
19+
def process_segment_overrides(identity_segments); end
20+
21+
# returns EvaluationResultFlags<Metadata>
22+
def evalute_features(evaluation_context, segment_overrides); end
23+
24+
# Returns {value: any; reason?: string}
25+
def evaluate_feature_value(feature, identity_key); end
26+
27+
# Returns {value: any; reason?: string}
28+
def get_multivariate_feature_value(feature, identity_key); end
29+
30+
# returns boolean
31+
def should_apply_override(override, existing_overrides); end
32+
33+
private
34+
35+
# returns boolean
36+
def higher_priority?(priority_a, priority_b)
37+
priority_a || priority_b > Float::INFINITY || Float::INFINITY
38+
end
39+
40+
def get_targeting_match_reason(match_object)
41+
type = match_object.type
42+
43+
if type == 'SEGMENT'
44+
return match_object.override ? "TARGETING_MATCH; segment=#{match_object.override.segment_name}" : 'DEFAULT'
45+
end
46+
47+
return "SPLIT; weight=#{match_object.weight}" if type == 'SPLIT'
48+
49+
'DEFAULT'
50+
end
51+
end
52+
end
53+
end
54+
end

lib/flagsmith/engine/evaluation/mappers.rb

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ module Mappers
1414
def self.get_evaluation_context(environment, identity = nil, override_traits = nil)
1515
environment_context = map_environment_model_to_evaluation_context(environment)
1616
identity_context = identity ? map_identity_model_to_identity_context(identity, override_traits) : nil
17-
17+
1818
context = environment_context.dup
1919
context[:identity] = identity_context if identity_context
20-
20+
2121
context
2222
end
23-
23+
2424
# Maps environment model to evaluation context
2525
#
2626
# @param environment [Flagsmith::Engine::Environment] The environment model
@@ -105,7 +105,7 @@ def self.map_environment_model_to_evaluation_context(environment)
105105
def self.uuid_to_big_int(uuid)
106106
uuid.gsub('-', '').to_i(16)
107107
end
108-
108+
109109
# Maps identity model to identity context
110110
#
111111
# @param identity [Flagsmith::Engine::Identity] The identity model
@@ -127,7 +127,7 @@ def self.map_identity_model_to_identity_context(identity, override_traits = nil)
127127
traits: traits_hash
128128
}
129129
end
130-
130+
131131
# Maps segment rule model to rule hash
132132
#
133133
# @param rule [Flagsmith::Engine::Segments::Rule] The segment rule model
@@ -138,38 +138,37 @@ def self.map_segment_rule_model_to_rule(rule)
138138
}
139139

140140
# Map conditions if present
141-
if rule.conditions&.any?
142-
result[:conditions] = rule.conditions.map do |condition|
143-
{
144-
property: condition.property,
145-
operator: condition.operator,
146-
value: condition.value
147-
}
148-
end
149-
else
150-
result[:conditions] = []
151-
end
152-
153-
if rule.rules&.any?
154-
result[:rules] = rule.rules.map { |nested_rule| map_segment_rule_model_to_rule(nested_rule) }
155-
else
156-
result[:rules] = []
157-
end
141+
result[:conditions] = if rule.conditions&.any?
142+
rule.conditions.map do |condition|
143+
{
144+
property: condition.property,
145+
operator: condition.operator,
146+
value: condition.value
147+
}
148+
end
149+
else
150+
[]
151+
end
152+
153+
result[:rules] = if rule.rules&.any?
154+
rule.rules.map { |nested_rule| map_segment_rule_model_to_rule(nested_rule) }
155+
else
156+
[]
157+
end
158158

159159
result
160160
end
161-
161+
162162
# Maps identity overrides to segments
163163
#
164164
# @param identity_overrides [Array<Flagsmith::Engine::Identity>] Array of identity override models
165165
# @return [Hash] Segments hash for identity overrides
166166
def self.map_identity_overrides_to_segments(identity_overrides)
167-
168167
segments = {}
169168
features_to_identifiers = {}
170169

171170
identity_overrides.each do |identity|
172-
next if identity.identity_features.nil? || !identity.identity_features.any?
171+
next if identity.identity_features.nil? || identity.identity_features.none?
173172

174173
# Sort features by name for consistent hashing
175174
sorted_features = identity.identity_features.to_a.sort_by { |fs| fs.feature.name }
@@ -228,4 +227,3 @@ def self.map_identity_overrides_to_segments(identity_overrides)
228227
end
229228
end
230229
end
231-

0 commit comments

Comments
 (0)