From c6a0d76638fb3134b75aa7f368800709af00b50f Mon Sep 17 00:00:00 2001 From: Gennady Minenkov Date: Wed, 26 Jun 2019 11:55:29 +0300 Subject: [PATCH 1/2] Add on_winner_choose hook --- README.md | 2 ++ lib/split/configuration.rb | 2 ++ lib/split/experiment.rb | 1 + spec/experiment_spec.rb | 11 ++++++++--- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 836c2057..ef9015a9 100644 --- a/README.md +++ b/README.md @@ -386,6 +386,8 @@ Split.configure do |config| # before experiment reset or deleted config.on_before_experiment_reset = -> (example) { # Do something on reset } config.on_before_experiment_delete = -> (experiment) { # Do something else on delete } + # after experiment winner had been set + config.on_winner_choose = -> (experiment) { # Do something on winner choose } end ``` diff --git a/lib/split/configuration.rb b/lib/split/configuration.rb index 5647fa49..e66b2d81 100644 --- a/lib/split/configuration.rb +++ b/lib/split/configuration.rb @@ -20,6 +20,7 @@ class Configuration attr_accessor :on_experiment_reset attr_accessor :on_experiment_delete attr_accessor :on_before_experiment_reset + attr_accessor :on_winner_choose attr_accessor :on_before_experiment_delete attr_accessor :include_rails_helper attr_accessor :beta_probability_simulations @@ -216,6 +217,7 @@ def initialize @on_experiment_delete = proc{|experiment|} @on_before_experiment_reset = proc{|experiment|} @on_before_experiment_delete = proc{|experiment|} + @on_winner_choose = proc{|experiment|} @db_failover_allow_parameter_override = false @allow_multiple_experiments = false @enabled = true diff --git a/lib/split/experiment.rb b/lib/split/experiment.rb index b9c5fac7..8ae1f775 100644 --- a/lib/split/experiment.rb +++ b/lib/split/experiment.rb @@ -155,6 +155,7 @@ def has_winner? def winner=(winner_name) redis.hset(:experiment_winner, name, winner_name.to_s) @has_winner = true + Split.configuration.on_winner_choose.call(self) end def participant_count diff --git a/spec/experiment_spec.rb b/spec/experiment_spec.rb index fe7ec44a..ee92e3a7 100644 --- a/spec/experiment_spec.rb +++ b/spec/experiment_spec.rb @@ -118,7 +118,7 @@ def alternative(color) experiment = Split::Experiment.new('basket_text', :alternatives => ['Basket', "Cart"], :resettable => false) expect(experiment.resettable).to be_falsey end - + context 'from configuration' do let(:experiment_name) { :my_experiment } let(:experiments) do @@ -130,7 +130,7 @@ def alternative(color) end before { Split.configuration.experiments = experiments } - + it 'assigns default values to the experiment' do expect(Split::Experiment.new(experiment_name).resettable).to eq(true) end @@ -233,12 +233,17 @@ def alternative(color) end describe 'winner=' do - it "should allow you to specify a winner" do + it 'should allow you to specify a winner' do experiment.save experiment.winner = 'red' expect(experiment.winner.name).to eq('red') end + it 'should call the on_winner_choose hook' do + expect(Split.configuration.on_winner_choose).to receive(:call) + experiment.winner = 'green' + end + context 'when has_winner state is memoized' do before { expect(experiment).to_not have_winner } From ce0e62bde72993f264efbdcc447a73f66168b65b Mon Sep 17 00:00:00 2001 From: Gennady Minenkov Date: Sat, 11 Apr 2020 22:48:51 +0300 Subject: [PATCH 2/2] Update winner choose hook name --- README.md | 2 +- lib/split/configuration.rb | 4 ++-- lib/split/experiment.rb | 2 +- spec/experiment_spec.rb | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ef9015a9..7b13c95f 100644 --- a/README.md +++ b/README.md @@ -387,7 +387,7 @@ Split.configure do |config| config.on_before_experiment_reset = -> (example) { # Do something on reset } config.on_before_experiment_delete = -> (experiment) { # Do something else on delete } # after experiment winner had been set - config.on_winner_choose = -> (experiment) { # Do something on winner choose } + config.on_experiment_winner_choose = -> (experiment) { # Do something on winner choose } end ``` diff --git a/lib/split/configuration.rb b/lib/split/configuration.rb index e66b2d81..e36cbca3 100644 --- a/lib/split/configuration.rb +++ b/lib/split/configuration.rb @@ -20,7 +20,7 @@ class Configuration attr_accessor :on_experiment_reset attr_accessor :on_experiment_delete attr_accessor :on_before_experiment_reset - attr_accessor :on_winner_choose + attr_accessor :on_experiment_winner_choose attr_accessor :on_before_experiment_delete attr_accessor :include_rails_helper attr_accessor :beta_probability_simulations @@ -217,7 +217,7 @@ def initialize @on_experiment_delete = proc{|experiment|} @on_before_experiment_reset = proc{|experiment|} @on_before_experiment_delete = proc{|experiment|} - @on_winner_choose = proc{|experiment|} + @on_experiment_winner_choose = proc{|experiment|} @db_failover_allow_parameter_override = false @allow_multiple_experiments = false @enabled = true diff --git a/lib/split/experiment.rb b/lib/split/experiment.rb index 8ae1f775..36a7a26f 100644 --- a/lib/split/experiment.rb +++ b/lib/split/experiment.rb @@ -155,7 +155,7 @@ def has_winner? def winner=(winner_name) redis.hset(:experiment_winner, name, winner_name.to_s) @has_winner = true - Split.configuration.on_winner_choose.call(self) + Split.configuration.on_experiment_winner_choose.call(self) end def participant_count diff --git a/spec/experiment_spec.rb b/spec/experiment_spec.rb index ee92e3a7..c90f865d 100644 --- a/spec/experiment_spec.rb +++ b/spec/experiment_spec.rb @@ -239,8 +239,8 @@ def alternative(color) expect(experiment.winner.name).to eq('red') end - it 'should call the on_winner_choose hook' do - expect(Split.configuration.on_winner_choose).to receive(:call) + it 'should call the on_experiment_winner_choose hook' do + expect(Split.configuration.on_experiment_winner_choose).to receive(:call) experiment.winner = 'green' end