Class: OptimizelyServerSide::Experiment

Inherits:
Object
  • Object
show all
Defined in:
lib/optimizely_server_side/experiment.rb

Instance Method Summary collapse

Constructor Details

#initialize(experiment_key, selected_variation_key) ⇒ Experiment

Returns a new instance of Experiment.



8
9
10
11
12
# File 'lib/optimizely_server_side/experiment.rb', line 8

def initialize(experiment_key, selected_variation_key)
  @selected_variation_key = selected_variation_key
  @experiment_key         = experiment_key
  @variations             = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(key, *args, &blk) ⇒ Object

Support for variation_three, variation_four till variation_n



43
44
45
46
47
48
49
# File 'lib/optimizely_server_side/experiment.rb', line 43

def method_missing(key, *args, &blk)
  if key.to_s.match('variation_')
    add_variation(args[0], args[1] || {}, &blk)
  else
    super
  end
end

Instance Method Details

#applicable_variationObject

Selects and calls the variation which is applicable In case of running test the applicable variation key is present In case of fallback / paused test we pick the primary variation



54
55
56
57
58
59
60
61
62
# File 'lib/optimizely_server_side/experiment.rb', line 54

def applicable_variation
  ActiveSupport::Notifications.instrument "oss.variation", variation: @selected_variation_key, experiment: @experiment_key, visitor_id: OptimizelyServerSide.configuration.user_attributes['visitor_id'] do
    if @variations.any?(&variation_selector)
      @variations.find(&variation_selector).call
    else
      primary_variation.call if primary_variation
    end
  end
end

#omniture_tag(evar: nil) ⇒ Object

Hidden omniture tag for HTML tracking



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

def omniture_tag(evar: nil)
  if @selected_variation_key
    #"<input type='hidden' data-optimizely=#{@experiment_key}:#{@selected_variation_key} data-optimizely-evar=#{evar}></input>".html_safe
    #{}"<input type='hidden' data-optimizely=#{@experiment_key}:#{@selected_variation_key} data-optimizely-evar=#{evar}></input>".html_safe
    key = "#{@experiment_key}:#{@selected_variation_key}"
    %Q(<input type="hidden" name="ab_#{key}" id="ab_id_#{key}" value="" data-optimizely="#{key}" data-optimizely-evar="#{evar}"/>).html_safe
  end
end

#primary_variationObject

Primary variation is where primary: true



65
66
67
# File 'lib/optimizely_server_side/experiment.rb', line 65

def primary_variation
  @primary_variation ||= @variations.find(&:primary)
end

#start {|_self| ... } ⇒ Object

Starts the experiment

Yields:

  • (_self)

Yield Parameters:



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

def start
  yield(self)
  self.applicable_variation
end

#variation_default(key, opts = {}, &blk) ⇒ Object



38
39
40
# File 'lib/optimizely_server_side/experiment.rb', line 38

def variation_default(key, opts = {}, &blk)
  add_variation(key, opts, &blk)
end

#variation_one(key, opts = {}, &blk) ⇒ Object



30
31
32
# File 'lib/optimizely_server_side/experiment.rb', line 30

def variation_one(key, opts = {}, &blk)
  add_variation(key, opts, &blk)
end

#variation_two(key, opts = {}, &blk) ⇒ Object



34
35
36
# File 'lib/optimizely_server_side/experiment.rb', line 34

def variation_two(key, opts = {}, &blk)
  add_variation(key, opts, &blk)
end