Module: Vanity::Experiment::Definition

Defined in:
lib/vanity/experiment/definition.rb,
lib/vanity/experiment/ab_test.rb

Overview

These methods are available from experiment definitions (files located in the experiments directory, automatically loaded by Vanity). Use these methods to define your experiments, for example:

ab_test "New Banner" do
  alternatives :red, :green, :blue
  metrics :signup
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#playgroundObject (readonly)

Returns the value of attribute playground



12
13
14
# File 'lib/vanity/experiment/definition.rb', line 12

def playground
  @playground
end

Instance Method Details

#ab_test(name, &block) ⇒ Object

Define an A/B test with the given name. For example:

ab_test "New Banner" do
  alternatives :red, :green, :blue
end


699
700
701
# File 'lib/vanity/experiment/ab_test.rb', line 699

def ab_test(name, &block)
  define name, :ab_test, &block
end

#define(name, type, options = nil, &block) ⇒ Object

Defines a new experiment, given the experiment's name, type and definition block.



16
17
18
19
20
21
22
23
# File 'lib/vanity/experiment/definition.rb', line 16

def define(name, type, options = nil, &block)
  fail "Experiment #{@experiment_id} already defined in playground" if playground.experiments[@experiment_id]
  klass = Experiment.const_get(type.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase })
  experiment = klass.new(playground, @experiment_id, name, options)
  experiment.instance_eval(&block)
  experiment.save
  playground.experiments[@experiment_id] = experiment
end

#new_binding(playground, id) ⇒ Object



25
26
27
28
# File 'lib/vanity/experiment/definition.rb', line 25

def new_binding(playground, id)
  @playground, @experiment_id = playground, id
  binding
end