Skip to content

Commit 3d07313

Browse files
committed
Fix configuration for combined experiments
Made sure configuration for parent experiment is available for children(combined)
1 parent cdd66da commit 3d07313

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

lib/split/configuration.rb

+7-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ def bots
116116

117117
def experiments=(experiments)
118118
raise InvalidExperimentsFormatError.new("Experiments must be a Hash") unless experiments.respond_to?(:keys)
119-
@experiments = experiments
119+
@experiments = experiments.clone
120+
experiments.each do |name, settings|
121+
value_for(settings, :combined_experiments)&.each do |combined_name|
122+
@experiments[combined_name] =
123+
settings.reject { |k, v| [:combined_experiments, "combined_experiments"].include?(k) }
124+
end
125+
end
120126
end
121127

122128
def disabled?

spec/configuration_spec.rb

+17-2
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,28 @@
136136
alternatives:
137137
- a
138138
- b
139+
combined_experiment:
140+
alternatives:
141+
- a
142+
- b
143+
combined_experiments:
144+
- combined1
145+
- combined2
146+
resettable: false
139147
eos
140148
@config.experiments = YAML.load(experiments_yaml)
141149
end
142150

143151
it "should normalize experiments" do
144-
expect(@config.normalized_experiments).to eq({ my_experiment: { resettable: false, alternatives: [{ "Control Opt"=>0.67 },
145-
[{ "Alt One"=>0.1 }, { "Alt Two"=>0.23 }]] }, another_experiment: { alternatives: ["a", ["b"]] } })
152+
result = {
153+
my_experiment: { resettable: false, alternatives: [{ "Control Opt"=>0.67 }, [{ "Alt One"=>0.1 }, { "Alt Two"=>0.23 }]] },
154+
another_experiment: { alternatives: ["a", ["b"]] },
155+
combined_experiment: { resettable: false, alternatives: ["a", ["b"]] },
156+
combined1: { resettable: false, alternatives: ["a", ["b"]] },
157+
combined2: { resettable: false, alternatives: ["a", ["b"]] }
158+
}
159+
160+
expect(@config.normalized_experiments).to eq(result)
146161
end
147162

148163
it "should recognize metrics" do

spec/helper_spec.rb

+18
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,24 @@
476476
expect(ab_user[experiment.key]).to eq(alternative)
477477
expect(ab_user[experiment.finished_key]).to eq(true)
478478
end
479+
480+
context "combined experiment" do
481+
it "passes reset option" do
482+
Split.configuration.experiments = {
483+
combined: {
484+
alternatives: ["one", "two"],
485+
combined_experiments: [:combined1],
486+
resettable: false,
487+
},
488+
}
489+
alternative = ab_test(:combined1)
490+
experiment = Split::ExperimentCatalog.find :combined1
491+
492+
ab_finished :combined1
493+
expect(ab_user[experiment.key]).to eq(alternative)
494+
expect(ab_user[experiment.finished_key]).to eq(true)
495+
end
496+
end
479497
end
480498

481499
context "finished with metric name" do

0 commit comments

Comments
 (0)