@@ -11,26 +11,24 @@ module Engine
1111 module Segments
1212 # Evaluator methods
1313 module Evaluator
14- extend self
1514 include Flagsmith ::Engine ::Segments ::Constants
1615 include Flagsmith ::Engine ::Utils ::HashFunc
1716
18- # Context-based segment evaluation
17+ module_function
18+ # Context-based segment evaluation (new approach)
1919 # Returns all segments that the identity belongs to based on segment rules evaluation
2020 #
2121 # @param context [Hash] Evaluation context containing identity and segment definitions
2222 # @return [Array<Hash>] Array of segments that the identity matches
2323 def get_identity_segments ( context )
2424 return [ ] unless context [ :identity ] && context [ :segments ]
2525
26- matching_segments = context [ :segments ] . values . select do |segment |
26+ context [ :segments ] . values . select do |segment |
2727 next false if segment [ :rules ] . nil? || segment [ :rules ] . empty?
2828
2929 matches = segment [ :rules ] . all? { |rule | traits_match_segment_rule_from_context ( rule , segment [ :key ] , context ) }
3030 matches
3131 end
32-
33- matching_segments
3432 end
3533
3634 # Context-based helper functions
@@ -55,7 +53,7 @@ def traits_match_segment_rule_from_context(rule, segment_key, context)
5553 # @param context [Hash] The evaluation context
5654 # @return [Boolean] True if conditions match according to rule type
5755 def evaluate_conditions_from_context ( rule , segment_key , context )
58- return true if rule [ :conditions ] . nil? || rule [ :conditions ] . empty ?
56+ return true unless rule [ :conditions ] &. any ?
5957
6058 condition_results = rule [ :conditions ] . map do |condition |
6159 traits_match_segment_condition_from_context ( condition , segment_key , context )
@@ -93,10 +91,10 @@ def traits_match_segment_condition_from_context(condition, segment_key, context)
9391
9492 return false if condition [ :property ] . nil?
9593 trait_value = get_trait_value ( condition [ :property ] , context )
96- return trait_value != nil if condition [ :operator ] == IS_SET
94+ return ! trait_value . nil? if condition [ :operator ] == IS_SET
9795 return trait_value . nil? if condition [ :operator ] == IS_NOT_SET
9896
99- if ! trait_value . nil?
97+ unless trait_value . nil?
10098 # Reuse existing Condition class logic
10199 condition_obj = Flagsmith ::Engine ::Segments ::Condition . new (
102100 operator : condition [ :operator ] ,
@@ -135,9 +133,7 @@ def evaluate_rule_conditions(rule_type, condition_results)
135133 def get_trait_value ( property , context )
136134 if property . start_with? ( '$.' )
137135 context_value = get_context_value ( property , context )
138- if !context_value . nil? && !non_primitive? ( context_value )
139- return context_value
140- end
136+ return context_value if !context_value . nil? && !non_primitive? ( context_value )
141137 end
142138
143139 traits = context . dig ( :identity , :traits ) || { }
0 commit comments