Sha256: 159fc494f1f4dee6f4dcc335580b42e7dfd5a776680ff9807e212134788bf8b0

Contents?: true

Size: 1.16 KB

Versions: 5

Compression:

Stored size: 1.16 KB

Contents

module Vanity
  module Experiment
    # 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
    module Definition
      attr_reader :playground

      # Defines a new experiment, given the experiment's name, type and
      # definition block.
      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

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
vanity-4.0.4 lib/vanity/experiment/definition.rb
vanity-4.0.3 lib/vanity/experiment/definition.rb
vanity-4.0.2 lib/vanity/experiment/definition.rb
vanity-4.0.1 lib/vanity/experiment/definition.rb
vanity-4.0.0 lib/vanity/experiment/definition.rb