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



40
41
42
43
44
45
46
# File 'lib/optimizely_server_side/experiment.rb', line 40

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



51
52
53
54
55
56
57
58
59
# File 'lib/optimizely_server_side/experiment.rb', line 51

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
# 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
  end
end

#primary_variationObject

Primary variation is where primary: true



62
63
64
# File 'lib/optimizely_server_side/experiment.rb', line 62

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

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

Starts the experiment

Yields:

  • (_self)

Yield Parameters:



22
23
24
25
# File 'lib/optimizely_server_side/experiment.rb', line 22

def start
  yield(self)
  self.applicable_variation
end

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



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

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

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



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

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

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



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

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