Class: TrailGuide::Algorithms::Static

Inherits:
Algorithm
  • Object
show all
Defined in:
lib/trail_guide/algorithms/static.rb

Instance Attribute Summary

Attributes inherited from Algorithm

#experiment

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(experiment = nil, &block) ⇒ Static

Returns a new instance of Static.

Raises:

  • (ArgumentError)


8
9
10
11
12
# File 'lib/trail_guide/algorithms/static.rb', line 8

def initialize(experiment=nil, &block)
  raise ArgumentError, 'You must provide a comparison block when using the static algorithm' unless block_given?
  @block = block
  super(experiment)
end

Class Method Details

.choose!(experiment, metadata: nil, &block) ⇒ Object



4
5
6
# File 'lib/trail_guide/algorithms/static.rb', line 4

def self.choose!(experiment, metadata: nil, &block)
  new(experiment, &block).choose!(metadata: )
end

Instance Method Details

#choose!(metadata: nil) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/trail_guide/algorithms/static.rb', line 19

def choose!(metadata: nil)
  return control unless .present?

  variant = variants.find do |variant|
    @block.call(variant., )
  end
  
  variant || control
rescue => e
  TrailGuide.logger.error "#{e.class.name}: #{e.message}"
  TrailGuide.logger.error e.backtrace.first
  control
end

#new(experiment) ⇒ Object



14
15
16
17
# File 'lib/trail_guide/algorithms/static.rb', line 14

def new(experiment)
  TrailGuide.logger.warn "WARNING: Using the Static algorithm for an experiment which is configured with sticky_assignment. You should either use a different algorithm or configure sticky_assignment for the `#{experiment.experiment_name}` experiment." if experiment.configuration.sticky_assignment?
  self.class.new(experiment, &@block)
end