Class: Planout::Experiment

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

Direct Known Subclasses

SimpleExperiment

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**inputs) ⇒ Experiment

Returns a new instance of Experiment.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/planout/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

Instance Attribute Details

#auto_exposure_logObject

Returns the value of attribute auto_exposure_log.



6
7
8
# File 'lib/planout/experiment.rb', line 6

def auto_exposure_log
  @auto_exposure_log
end

Instance Method Details

#_assignObject



25
26
27
28
29
30
# File 'lib/planout/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 = {}) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/planout/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) ⇒ Object



76
77
78
79
# File 'lib/planout/experiment.rb', line 76

def assign(params, *inputs)
  # up to child class to implement
  nil
end

#configure_loggerObject



48
49
50
# File 'lib/planout/experiment.rb', line 48

def configure_logger
  nil
end

#get(name, default = nil) ⇒ Object



70
71
72
73
74
# File 'lib/planout/experiment.rb', line 70

def get(name, default = nil)
  requires_assignment
  requires_exposure_logging
  @assignment.get(name, default)
end

#get_paramsObject



64
65
66
67
68
# File 'lib/planout/experiment.rb', line 64

def get_params
  requires_assignment
  requires_exposure_logging
  @assignment.get_params
end

#is_logged?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/planout/experiment.rb', line 56

def is_logged?
  @logged
end

#log_event(event_type, extras = nil) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/planout/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) ⇒ Object



94
95
96
97
# File 'lib/planout/experiment.rb', line 94

def log_exposure(extras = nil)
  @exposure_logged = true
  log_event(:exposure, extras)
end

#requires_assignmentObject



52
53
54
# File 'lib/planout/experiment.rb', line 52

def requires_assignment
  _assign if !@assigned
end

#requires_exposure_loggingObject



60
61
62
# File 'lib/planout/experiment.rb', line 60

def requires_exposure_logging
  log_exposure if @auto_exposure_log && @in_experiment && !@exposure_logged
end

#saltObject



40
41
42
# File 'lib/planout/experiment.rb', line 40

def salt
  @_salt || @name
end

#salt=(value) ⇒ Object



36
37
38
# File 'lib/planout/experiment.rb', line 36

def salt=(value)
  @_salt = value
end

#setupObject



32
33
34
# File 'lib/planout/experiment.rb', line 32

def setup
  nil
end