Skip to content

Commit

Permalink
Merge pull request #371 from spheric/master
Browse files Browse the repository at this point in the history
add a on_before_experiment_delete and on_before_experiment_reset hook
  • Loading branch information
andrew committed Apr 20, 2016
2 parents ed59575 + f798d24 commit d3a499e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,12 @@ For example:

``` ruby
Split.configure do |config|
# after experiment reset or deleted
config.on_experiment_reset = -> (example) { # Do something on reset }
config.on_experiment_delete = -> (experiment) { # Do something else on delete }
# 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 }
end
```

Expand Down
4 changes: 4 additions & 0 deletions lib/split/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class Configuration
attr_accessor :on_trial_complete
attr_accessor :on_experiment_reset
attr_accessor :on_experiment_delete
attr_accessor :on_before_experiment_reset
attr_accessor :on_before_experiment_delete
attr_accessor :include_rails_helper
attr_accessor :beta_probability_simulations
attr_accessor :redis_url
Expand Down Expand Up @@ -199,6 +201,8 @@ def initialize
@db_failover_on_db_error = proc{|error|} # e.g. use Rails logger here
@on_experiment_reset = proc{|experiment|}
@on_experiment_delete = proc{|experiment|}
@on_before_experiment_reset = proc{|experiment|}
@on_before_experiment_delete = proc{|experiment|}
@db_failover_allow_parameter_override = false
@allow_multiple_experiments = false
@enabled = true
Expand Down
2 changes: 2 additions & 0 deletions lib/split/experiment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -239,13 +239,15 @@ def resettable?
end

def reset
Split.configuration.on_before_experiment_reset.call(self)
alternatives.each(&:reset)
reset_winner
Split.configuration.on_experiment_reset.call(self)
increment_version
end

def delete
Split.configuration.on_before_experiment_delete.call(self)
alternatives.each(&:delete)
reset_winner
Split.redis.srem(:experiments, name)
Expand Down
10 changes: 10 additions & 0 deletions spec/experiment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@ def alternative(color)
expect(Split.configuration.on_experiment_delete).to receive(:call)
experiment.delete
end

it "should call the on_before_experiment_delete hook" do
expect(Split.configuration.on_before_experiment_delete).to receive(:call)
experiment.delete
end
end


Expand Down Expand Up @@ -264,6 +269,11 @@ def alternative(color)
expect(Split.configuration.on_experiment_reset).to receive(:call)
experiment.reset
end

it "should call the on_before_experiment_reset hook" do
expect(Split.configuration.on_before_experiment_reset).to receive(:call)
experiment.reset
end
end

describe 'algorithm' do
Expand Down

0 comments on commit d3a499e

Please sign in to comment.