Class: Planout::Experiment
- Inherits:
-
Object
- Object
- Planout::Experiment
- Defined in:
- lib/planout/experiment.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#auto_exposure_log ⇒ Object
Returns the value of attribute auto_exposure_log.
Instance Method Summary collapse
- #_assign ⇒ Object
- #as_blob(extras = {}) ⇒ Object
- #assign(params, *inputs) ⇒ Object
- #configure_logger ⇒ Object
- #get(name, default = nil) ⇒ Object
- #get_params ⇒ Object
-
#initialize(**inputs) ⇒ Experiment
constructor
A new instance of Experiment.
- #is_logged? ⇒ Boolean
- #log_event(event_type, extras = nil) ⇒ Object
- #log_exposure(extras = nil) ⇒ Object
- #requires_assignment ⇒ Object
- #requires_exposure_logging ⇒ Object
- #salt ⇒ Object
- #salt=(value) ⇒ Object
- #setup ⇒ Object
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_log ⇒ Object
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
#_assign ⇒ Object
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_logger ⇒ Object
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_params ⇒ Object
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
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_assignment ⇒ Object
52 53 54 |
# File 'lib/planout/experiment.rb', line 52 def requires_assignment _assign if !@assigned end |
#requires_exposure_logging ⇒ Object
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 |
#salt ⇒ Object
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 |
#setup ⇒ Object
32 33 34 |
# File 'lib/planout/experiment.rb', line 32 def setup nil end |