From de14163e94d4b9f7a514761908a96092de91d075 Mon Sep 17 00:00:00 2001 From: Gard Rimestad Date: Tue, 22 Aug 2023 11:23:44 +0200 Subject: [PATCH] fix: groupId --- lib/unleash/feature_toggle.rb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/unleash/feature_toggle.rb b/lib/unleash/feature_toggle.rb index 4d0d088..c22f512 100644 --- a/lib/unleash/feature_toggle.rb +++ b/lib/unleash/feature_toggle.rb @@ -40,8 +40,13 @@ def get_variant(context, fallback_variant = Unleash::FeatureToggle.disabled_vari toggle_enabled = am_enabled?(context) variants = am_enabled(context)[:variants] + strategy = am_enabled(context)[:strategy] + group_id = self.name + if strategy + group_id = strategy.params.fetch('groupId', self.name) + end - variant = resolve_variant(context, toggle_enabled, variants) + variant = resolve_variant(context, toggle_enabled, variants, group_id) choice = toggle_enabled ? :yes : :no Unleash.toggle_metrics.increment_variant(self.name, choice, variant.name) unless Unleash.configuration.disable_metrics @@ -54,11 +59,11 @@ def self.disabled_variant private - def resolve_variant(context, toggle_enabled, variants) + def resolve_variant(context, toggle_enabled, variants, group_id) return Unleash::FeatureToggle.disabled_variant unless toggle_enabled return Unleash::FeatureToggle.disabled_variant if sum_variant_defs_weights(variants) <= 0 - variant_from_override_match(context, variants) || variant_from_weights(context, resolve_stickiness(variants), variants) + variant_from_override_match(context, variants) || variant_from_weights(context, resolve_stickiness(variants), variants, group_id) end def resolve_stickiness(variants) @@ -72,6 +77,7 @@ def am_enabled?(context) def am_enabled(context) result = false + strategy = false variants = self.variant_definitions if self.enabled if self.strategies.empty? @@ -90,7 +96,8 @@ def am_enabled(context) { result: result, - variants: variants + variants: variants, + strategy: strategy } end @@ -131,8 +138,8 @@ def variant_from_override_match(context, variants) Unleash::Variant.new(name: variant.name, enabled: true, payload: variant.payload) end - def variant_from_weights(context, stickiness, variants) - variant_weight = Unleash::Strategy::Util.get_normalized_number(variant_salt(context, stickiness), self.name, sum_variant_defs_weights(variants)) + def variant_from_weights(context, stickiness, variants, group_id) + variant_weight = Unleash::Strategy::Util.get_normalized_number(variant_salt(context, stickiness), "#{group_id}", sum_variant_defs_weights(variants)) prev_weights = 0 variant_definition = variants