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



147
148
149
150
151
# File 'lib/ablab.rb', line 147

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
end

#groupObject



138
139
140
141
142
143
144
145
# File 'lib/ablab.rb', line 138

def group
  return @group unless @group.nil?
  forced = forced_group
  return forced if forced
  size = 1000.0 * (experiment.percentage_of_visitors) / 100.0
  idx = (draw * experiment.groups.size / size).floor
  @group = experiment.groups[idx].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



153
154
155
156
157
158
159
160
161
162
# File 'lib/ablab.rb', line 153

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