# File lib/optimizely_server_side/experiment.rb, line 65 def primary_variation @primary_variation ||= @variations.find(&:primary) end
class OptimizelyServerSide::Experiment
Public Class Methods
new(experiment_key, selected_variation_key)
click to toggle source
# 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
Public Instance Methods
applicable_variation()
click to toggle source
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
# 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
method_missing(key, *args, &blk)
click to toggle source
Support
for variation_three, variation_four till variation_n
Calls superclass method
# 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
omniture_tag(evar: nil)
click to toggle source
Hidden omniture tag for HTML tracking
# 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_variation()
click to toggle source
Primary variation is where primary: true
start() { |self| ... }
click to toggle source
Starts the experiment
# File lib/optimizely_server_side/experiment.rb, line 25 def start yield(self) self.applicable_variation end
variation_default(key, opts = {}, &blk)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/optimizely_server_side/experiment.rb, line 34 def variation_two(key, opts = {}, &blk) add_variation(key, opts, &blk) end
Private Instance Methods
add_variation(key, opts = {}, &blk)
click to toggle source
Add all the variation to the variations collection
# File lib/optimizely_server_side/experiment.rb, line 77 def add_variation(key, opts = {}, &blk) Variation.new( key: key, primary: opts[:primary] || false, content: blk ).tap do |variation_instance| @variations << variation_instance end end
variation_selector()
click to toggle source
Scope to query on selected variation
# File lib/optimizely_server_side/experiment.rb, line 72 def variation_selector ->(variation) { variation.key == @selected_variation_key } end