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.


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

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

717
718
719
# File 'lib/vanity/experiment/ab_test.rb', line 717

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.


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

def define(name, type, options = nil, &block)
  raise "Experiment #{@experiment_id} already defined in playground" if playground.experiments[@experiment_id]

  klass = Experiment.const_get(type.to_s.gsub(/\/(.?)/) { "::#{Regexp.last_match(1).upcase}" }.gsub(/(?:^|_)(.)/) { Regexp.last_match(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
29
# File 'lib/vanity/experiment/definition.rb', line 25

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