From c58d20b66a003e7e650f358edc5b1b319431f039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Luis=20Leal=20Cardoso=20Junior?= Date: Sun, 9 Aug 2026 14:17:17 -0300 Subject: [PATCH 1/2] Default an experiment's goals to an empty array Assigning [] rather costs no extra Redis calls. --- lib/split/experiment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/split/experiment.rb b/lib/split/experiment.rb index 17d88e08..11f32358 100644 --- a/lib/split/experiment.rb +++ b/lib/split/experiment.rb @@ -57,7 +57,7 @@ def set_alternatives_and_options(options) ) self.alternatives = options_with_defaults[:alternatives] - self.goals = options_with_defaults[:goals] + self.goals = options_with_defaults[:goals] || [] self.resettable = options_with_defaults[:resettable] self.algorithm = options_with_defaults[:algorithm] self.metadata = options_with_defaults[:metadata] From fe08eae2d128ffa1820f1b6aac146cf07cacc3c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Luis=20Leal=20Cardoso=20Junior?= Date: Sun, 9 Aug 2026 14:18:22 -0300 Subject: [PATCH 2/2] Give alternatives a back-reference to their experiment As changing the public contract would be a bigger change. This way, calls on Dashboard are reduced. --- lib/split/alternative.rb | 3 ++- lib/split/experiment.rb | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/split/alternative.rb b/lib/split/alternative.rb index a9a673c9..8e21f80e 100644 --- a/lib/split/alternative.rb +++ b/lib/split/alternative.rb @@ -6,6 +6,7 @@ class Alternative attr_accessor :experiment_name attr_accessor :weight attr_accessor :recorded_info + attr_writer :experiment def initialize(name, experiment_name) @experiment_name = experiment_name @@ -100,7 +101,7 @@ def conversion_rate(goal = nil) end def experiment - Split::ExperimentCatalog.find(experiment_name) + @experiment ||= Split::ExperimentCatalog.find(experiment_name) end def z_score(goal = nil) diff --git a/lib/split/experiment.rb b/lib/split/experiment.rb index 11f32358..d181ee7f 100644 --- a/lib/split/experiment.rb +++ b/lib/split/experiment.rb @@ -145,6 +145,7 @@ def alternatives=(alts) Split::Alternative.new(alternative, @name) end end + @alternatives.each { |alternative| alternative.experiment = self } end def winner