class PlanOut::Experiment

Attributes

auto_exposure_log[RW]

Public Class Methods

new(**inputs) click to toggle source
# File lib/plan_out/experiment.rb, line 8
def initialize(**inputs)
  @inputs = inputs
  @exposure_logged = false
  @_salt = nil
  @in_experiment = true
  @name = self.class.name
  @auto_exposure_log = true

  setup  # sets name, salt, etc.

  @assignment = Assignment.new(salt)
  @assigned = false

  @logger = nil
  setup
end

Public Instance Methods

_assign() click to toggle source
# File lib/plan_out/experiment.rb, line 25
def _assign
  configure_logger
  assign(@assignment, **@inputs)
  @in_experiment = @assignment.get(:in_experiment, @in_experiment)
  @assigned = true
end
as_blob(extras = {}) click to toggle source
# File lib/plan_out/experiment.rb, line 99
def as_blob(extras = {})
  d = {
    name: @name,
    time: Time.now.to_i,
    salt: salt,
    inputs: @inputs,
    params: @assignment.data
  }

  d.merge!(extras)
end
assign(params, *inputs) click to toggle source
# File lib/plan_out/experiment.rb, line 76
def assign(params, *inputs)
  # up to child class to implement
  nil
end
auto_exposure_log=(value) click to toggle source
# File lib/plan_out/experiment.rb, line 44
def auto_exposure_log=(value)
  @auto_exposure_log = value
end
configure_logger() click to toggle source
# File lib/plan_out/experiment.rb, line 48
def configure_logger
  nil
end
get(name, default = nil) click to toggle source
# File lib/plan_out/experiment.rb, line 70
def get(name, default = nil)
  requires_assignment
  requires_exposure_logging
  @assignment.get(name, default)
end
get_params() click to toggle source
# File lib/plan_out/experiment.rb, line 64
def get_params
  requires_assignment
  requires_exposure_logging
  @assignment.get_params
end
is_logged?() click to toggle source
# File lib/plan_out/experiment.rb, line 56
def is_logged?
  @logged
end
log_event(event_type, extras = nil) click to toggle source
# File lib/plan_out/experiment.rb, line 81
def log_event(event_type, extras = nil)
  if extras.nil?
    extra_payload = {event: event_type}
  else
    extra_payload = {
      event: event_type,
      extra_data: extras.clone
    }
  end

  log(as_blob(extra_payload))
end
log_exposure(extras = nil) click to toggle source
# File lib/plan_out/experiment.rb, line 94
def log_exposure(extras = nil)
  @exposure_logged = true
  log_event(:exposure, extras)
end
requires_assignment() click to toggle source
# File lib/plan_out/experiment.rb, line 52
def requires_assignment
  _assign if !@assigned
end
requires_exposure_logging() click to toggle source
# File lib/plan_out/experiment.rb, line 60
def requires_exposure_logging
  log_exposure if @auto_exposure_log && @in_experiment && !@exposure_logged
end
salt() click to toggle source
# File lib/plan_out/experiment.rb, line 40
def salt
  @_salt || @name
end
salt=(value) click to toggle source
# File lib/plan_out/experiment.rb, line 36
def salt=(value)
  @_salt = value
end
setup() click to toggle source
# File lib/plan_out/experiment.rb, line 32
def setup
  nil
end