Class: Ablab::Run

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(experiment, session_id, request) ⇒ Run

Returns a new instance of Run.



122
123
124
# File 'lib/ablab.rb', line 122

def initialize(experiment, session_id, request)
  @experiment, @session_id, @request = experiment, session_id, request
end

Instance Attribute Details

#experimentObject (readonly)

Returns the value of attribute experiment.



120
121
122
# File 'lib/ablab.rb', line 120

def experiment
  @experiment
end

#requestObject (readonly)

Returns the value of attribute request.



120
121
122
# File 'lib/ablab.rb', line 120

def request
  @request
end

#session_idObject (readonly)

Returns the value of attribute session_id.



120
121
122
# File 'lib/ablab.rb', line 120

def session_id
  @session_id
end

Instance Method Details

#drawObject



153
154
155
156
157
# File 'lib/ablab.rb', line 153

def draw
  sid_hash = Digest::SHA1.hexdigest(session_id)[-8..-1].to_i(16)
  exp_hash = Digest::SHA1.hexdigest(experiment.name.to_s)[-8..-1].to_i(16)
  ((sid_hash ^ exp_hash) % 1000) / 10.0
end

#groupObject



138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/ablab.rb', line 138

def group
  return @group unless @group.nil?
  if forced = forced_group
    return forced
  end
  d = draw / experiment.percentage_of_visitors
  return nil if d >= 1
  tot_weight = experiment.groups.map(&:weight).reduce(:+).to_f
  @group = experiment.groups.reduce(0) do |t, group|
    t += group.weight / tot_weight
    break group if d < t
    t
  end.try(:name)
end

#in_group?(name) ⇒ Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/ablab.rb', line 126

def in_group?(name)
  group == name
end

#perform_callbacks!(event) ⇒ Object



159
160
161
162
163
164
165
166
167
168
# File 'lib/ablab.rb', line 159

def perform_callbacks!(event)
  experiment.callbacks.each do |cbk|
    cbk.call(event, experiment.name, group, session_id, request)
  end
  Ablab.callbacks.each do |cbk|
    cbk.call(event, experiment.name, group, session_id, request)
  end
rescue => e
  Ablab.tracking_exception_handler.call(e)
end

#track_success!Object



134
135
136
# File 'lib/ablab.rb', line 134

def track_success!
  track!(:success)
end

#track_view!Object



130
131
132
# File 'lib/ablab.rb', line 130

def track_view!
  track!(:view)
end