Skip to content

Commit 13057f9

Browse files
committed
feat: moved-mappers-to-engine-namespace
1 parent 7c15dd5 commit 13057f9

File tree

11 files changed

+296
-302
lines changed

11 files changed

+296
-302
lines changed

lib/flagsmith/engine/core.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
require_relative 'segments/evaluator'
1212
require_relative 'segments/models'
1313
require_relative 'utils/hash_func'
14-
require_relative 'evaluation/mappers'
14+
require_relative 'mappers'
1515
require_relative 'evaluation/core'
1616

1717
module Flagsmith

lib/flagsmith/engine/environments/models.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@ class Environment
88
attr_accessor :project, :feature_states, :amplitude_config, :segment_config,
99
:mixpanel_config, :heap_config, :identity_overrides
1010

11-
def initialize(id:, api_key:, name: nil, project:, feature_states: [], identity_overrides: [])
11+
# rubocop:disable Metrics/ParameterLists
12+
def initialize(id:, api_key:, project:, name: nil, feature_states: [], identity_overrides: [])
1213
@id = id
1314
@api_key = api_key
1415
@name = name
1516
@project = project
1617
@feature_states = feature_states
1718
@identity_overrides = identity_overrides
1819
end
20+
# rubocop:enable Metrics/ParameterLists
1921

2022
class << self
2123
# rubocop:disable Metrics/MethodLength

lib/flagsmith/engine/evaluation/mappers.rb

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

lib/flagsmith/engine/evaluation/mappers/environment.rb

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

lib/flagsmith/engine/evaluation/mappers/identity.rb

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

lib/flagsmith/engine/evaluation/mappers/segments.rb

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

lib/flagsmith/engine/mappers.rb

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# frozen_string_literal: true
2+
3+
require_relative 'mappers/environment'
4+
require_relative 'mappers/identity'
5+
require_relative 'mappers/segments'
6+
7+
module Flagsmith
8+
module Engine
9+
# Mappers for converting between models and evaluation contexts
10+
module Mappers
11+
STRONGEST_PRIORITY = Float::INFINITY
12+
WEAKEST_PRIORITY = -Float::INFINITY
13+
14+
# @param environment [Flagsmith::Engine::Environment] The environment model
15+
# @param identity [Flagsmith::Engine::Identity, nil] Optional identity model
16+
# @param override_traits [Array<Flagsmith::Engine::Identities::Trait>, nil] Optional override traits
17+
# @return [Hash] Evaluation context with environment, features, segments, and optionally identity
18+
def self.get_evaluation_context(environment, identity = nil, override_traits = nil)
19+
context = map_environment_model_to_evaluation_context(environment)
20+
context[:identity] = map_identity_model_to_identity_context(identity, override_traits) if identity
21+
context
22+
end
23+
24+
# Maps environment model to evaluation context
25+
#
26+
# @param environment [Flagsmith::Engine::Environment] The environment model
27+
# @return [Hash] Context with :environment, :features, and :segments keys
28+
def self.map_environment_model_to_evaluation_context(environment)
29+
context = {
30+
environment: Environment.build_environment_context(environment),
31+
features: Environment.build_features_context(environment.feature_states),
32+
segments: Segments.build_segments_context(environment.project.segments)
33+
}
34+
35+
context[:segments].merge!(Identity.map_overrides_to_segments(environment.identity_overrides)) if environment.identity_overrides&.any?
36+
37+
context
38+
end
39+
40+
# Maps identity model to identity context
41+
#
42+
# @param identity [Flagsmith::Engine::Identity] The identity model
43+
# @param override_traits [Array<Flagsmith::Engine::Identities::Trait>, nil] Optional override traits
44+
# @return [Hash] Identity context with :identifier, :key, and :traits
45+
def self.map_identity_model_to_identity_context(identity, override_traits = nil)
46+
Identity.build_environment_context(identity, override_traits)
47+
end
48+
49+
# Maps segment rule model to rule hash
50+
#
51+
# @param rule [Flagsmith::Engine::Segments::Rule] The segment rule model
52+
# @return [Hash] Mapped rule with :type, :conditions, and :rules
53+
def self.map_segment_rule_model_to_rule(rule)
54+
Segments.map_rule(rule)
55+
end
56+
57+
# Maps identity overrides to segments
58+
#
59+
# @param identity_overrides [Array<Flagsmith::Engine::Identity>] Array of identity override models
60+
# @return [Hash] Segments hash for identity overrides
61+
def self.map_identity_overrides_to_segments(identity_overrides)
62+
Identity.map_overrides_to_segments(identity_overrides)
63+
end
64+
end
65+
end
66+
end

0 commit comments

Comments
 (0)