Skip to content

Commit 25f6330

Browse files
authored
Merge pull request #574 from Nootrobox/add-on-winner-choose-hook
Add on_winner_choose hook
2 parents f2579d7 + ce0e62b commit 25f6330

4 files changed

Lines changed: 13 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,8 @@ Split.configure do |config|
386386
# before experiment reset or deleted
387387
config.on_before_experiment_reset = -> (example) { # Do something on reset }
388388
config.on_before_experiment_delete = -> (experiment) { # Do something else on delete }
389+
# after experiment winner had been set
390+
config.on_experiment_winner_choose = -> (experiment) { # Do something on winner choose }
389391
end
390392
```
391393

lib/split/configuration.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class Configuration
2020
attr_accessor :on_experiment_reset
2121
attr_accessor :on_experiment_delete
2222
attr_accessor :on_before_experiment_reset
23+
attr_accessor :on_experiment_winner_choose
2324
attr_accessor :on_before_experiment_delete
2425
attr_accessor :include_rails_helper
2526
attr_accessor :beta_probability_simulations
@@ -216,6 +217,7 @@ def initialize
216217
@on_experiment_delete = proc{|experiment|}
217218
@on_before_experiment_reset = proc{|experiment|}
218219
@on_before_experiment_delete = proc{|experiment|}
220+
@on_experiment_winner_choose = proc{|experiment|}
219221
@db_failover_allow_parameter_override = false
220222
@allow_multiple_experiments = false
221223
@enabled = true

lib/split/experiment.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def has_winner?
155155
def winner=(winner_name)
156156
redis.hset(:experiment_winner, name, winner_name.to_s)
157157
@has_winner = true
158+
Split.configuration.on_experiment_winner_choose.call(self)
158159
end
159160

160161
def participant_count

spec/experiment_spec.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def alternative(color)
118118
experiment = Split::Experiment.new('basket_text', :alternatives => ['Basket', "Cart"], :resettable => false)
119119
expect(experiment.resettable).to be_falsey
120120
end
121-
121+
122122
context 'from configuration' do
123123
let(:experiment_name) { :my_experiment }
124124
let(:experiments) do
@@ -130,7 +130,7 @@ def alternative(color)
130130
end
131131

132132
before { Split.configuration.experiments = experiments }
133-
133+
134134
it 'assigns default values to the experiment' do
135135
expect(Split::Experiment.new(experiment_name).resettable).to eq(true)
136136
end
@@ -233,12 +233,17 @@ def alternative(color)
233233
end
234234

235235
describe 'winner=' do
236-
it "should allow you to specify a winner" do
236+
it 'should allow you to specify a winner' do
237237
experiment.save
238238
experiment.winner = 'red'
239239
expect(experiment.winner.name).to eq('red')
240240
end
241241

242+
it 'should call the on_experiment_winner_choose hook' do
243+
expect(Split.configuration.on_experiment_winner_choose).to receive(:call)
244+
experiment.winner = 'green'
245+
end
246+
242247
context 'when has_winner state is memoized' do
243248
before { expect(experiment).to_not have_winner }
244249

0 commit comments

Comments
 (0)