Skip to content

Commit 2eeecba

Browse files
committed
Fixes version number wackiness when alternatives are changed
I found that when I updated the alternatives in a test it kept resetting. I must have not noticed for a while, because when I checked, I was on version 30,561 yet had no results. It turned out that when you save an existing experiment, it didn't update the alternatives, so that's what I've added.
1 parent ae1384a commit 2eeecba

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

lib/split/experiment.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ def save
9898
Split.redis.sadd(:experiments, name)
9999
Split.redis.hset(:experiment_start_times, @name, Time.now)
100100
@alternatives.reverse.each {|a| Split.redis.lpush(name, a.name) }
101+
else
102+
Split.redis.del(name)
103+
@alternatives.reverse.each {|a| Split.redis.lpush(name, a.name) }
101104
end
102105
end
103106

@@ -137,10 +140,11 @@ def self.find_or_create(key, *alternatives)
137140
alts = initialize_alternatives(alternatives, name)
138141

139142
if Split.redis.exists(name)
140-
if load_alternatives_for(name) == alts.map(&:name)
143+
existing_alternatives = load_alternatives_for(name)
144+
if existing_alternatives == alts.map(&:name)
141145
experiment = self.new(name, *alternatives)
142146
else
143-
exp = self.new(name, *load_alternatives_for(name))
147+
exp = self.new(name, *existing_alternatives)
144148
exp.reset
145149
exp.alternatives.each(&:delete)
146150
experiment = self.new(name, *alternatives)

spec/experiment_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@
176176
new_blue = Split::Alternative.new('blue', 'link_color')
177177
new_blue.participant_count.should eql(0)
178178
end
179+
180+
it "should only reset once" do
181+
experiment = Split::Experiment.find_or_create('link_color', 'blue', 'red', 'green')
182+
experiment.version.should eql(0)
183+
same_experiment = Split::Experiment.find_or_create('link_color', 'blue', 'yellow', 'orange')
184+
same_experiment.version.should eql(1)
185+
same_experiment_again = Split::Experiment.find_or_create('link_color', 'blue', 'yellow', 'orange')
186+
same_experiment_again.version.should eql(1)
187+
end
179188
end
180189

181190
describe 'alternatives passed as non-strings' do

0 commit comments

Comments
 (0)