Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.mdown
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,19 @@ def log_trial_complete(trial)
end
```

### Experiment Hooks

You can assign a proc that will be called when an experiment is reset or deleted. You can use these hooks to call methods within your application to keep data related to experiments in sync with Split.

For example:

``` ruby
Split.configure do |config|
config.on_experiment_reset = proc{ |experiment| # Do something on reset }
config.on_experiment_delete = proc{ |experiment| # Do something else on delete }
end
```

## Web Interface

Split comes with a Sinatra-based front end to get an overview of how your experiments are doing.
Expand Down
4 changes: 4 additions & 0 deletions lib/split/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class Configuration
attr_accessor :store_override
attr_accessor :on_trial_choose
attr_accessor :on_trial_complete
attr_accessor :on_experiment_reset
attr_accessor :on_experiment_delete

attr_reader :experiments

Expand Down Expand Up @@ -161,6 +163,8 @@ def initialize
@ignore_filter = proc{ |request| is_robot? || is_ignored_ip_address? }
@db_failover = false
@db_failover_on_db_error = proc{|error|} # e.g. use Rails logger here
@on_experiment_reset = proc{|experiment|}
@on_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 @@ -210,6 +210,7 @@ def resettable?
def reset
alternatives.each(&:reset)
reset_winner
Split.configuration.on_experiment_reset.call(self)
increment_version
end

Expand All @@ -219,6 +220,7 @@ def delete
Split.redis.srem(:experiments, name)
Split.redis.del(name)
delete_goals
Split.configuration.on_experiment_delete.call(self)
increment_version
end

Expand Down
10 changes: 10 additions & 0 deletions spec/experiment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,11 @@ def alternative(color)
experiment.delete
experiment.version.should eql(1)
end

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


Expand Down Expand Up @@ -219,6 +224,11 @@ def alternative(color)
experiment.reset
experiment.version.should eql(1)
end

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

describe 'algorithm' do
Expand Down