class Vanity::Adapters::MockAdapter

Mock adapter. You can use this when running in test environment, staging, wherever you don't care for collecting metrics. Doesn't store anything.

@since 1.4.0

Public Class Methods

new(options) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 17
def initialize(options)
  @metrics = @@metrics ||= {}
  @experiments = @@experiments ||= {}
end

Public Instance Methods

ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 156
  def ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false)
    alt = alternative(experiment, alternative)
    alt[:participants] ||= Set.new
    alt[:converted] ||= Set.new
    alt[:conversions] ||= 0
    if implicit
      alt[:participants] << identity
    else
participating = alt[:participants].include?(identity)
    end
    alt[:converted] << identity if implicit || participating
    alt[:conversions] += count
  end
ab_add_participant(experiment, alternative, identity) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 134
def ab_add_participant(experiment, alternative, identity)
  alt = alternative(experiment, alternative)
  alt[:participants] ||= Set.new
  alt[:participants] << identity
end
ab_assigned(experiment, identity) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 148
def ab_assigned(experiment, identity)
  alternatives_for(experiment).each do |alt_id, alt_state|
    return alt_id if alt_state[:participants].include?(identity)
  end

  nil
end
ab_counts(experiment, alternative) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 113
def ab_counts(experiment, alternative)
  alt = alternative(experiment, alternative)
  { :participants => alt[:participants] ? alt[:participants].size : 0,
    :converted    => alt[:converted] ? alt[:converted].size : 0,
    :conversions  => alt[:conversions] || 0 }
end
ab_get_outcome(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 170
def ab_get_outcome(experiment)
  @experiments[experiment] ||= {}
  @experiments[experiment][:outcome]
end
ab_not_showing(experiment, identity) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 130
def ab_not_showing(experiment, identity)
  @experiments[experiment][:showing].delete identity if @experiments[experiment] && @experiments[experiment][:showing]
end
ab_seen(experiment, identity, alternative_or_id) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 140
def ab_seen(experiment, identity, alternative_or_id)
  with_ab_seen_deprecation(experiment, identity, alternative_or_id) do |expt, ident, alt_id|
    if ab_assigned(expt, ident) == alt_id
      alt_id
    end
  end
end
ab_set_outcome(experiment, alternative = 0) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 175
def ab_set_outcome(experiment, alternative = 0)
  @experiments[experiment] ||= {}
  @experiments[experiment][:outcome] = alternative
end
ab_show(experiment, identity, alternative) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 120
def ab_show(experiment, identity, alternative)
  @experiments[experiment] ||= {}
  @experiments[experiment][:showing] ||= {}
  @experiments[experiment][:showing][identity] = alternative
end
ab_showing(experiment, identity) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 126
def ab_showing(experiment, identity)
  @experiments[experiment] && @experiments[experiment][:showing] && @experiments[experiment][:showing][identity]
end
active?() click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 22
def active?
  !!@metrics
end
destroy_experiment(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 180
def destroy_experiment(experiment)
  @experiments.delete experiment
end
destroy_metric(metric) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 66
def destroy_metric(metric)
  @metrics.delete metric
end
disconnect!() click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 26
def disconnect!
  @metrics = nil
  @experiments = nil
end
experiment_persisted?(experiment) click to toggle source

– Experiments –

# File lib/vanity/adapters/mock_adapter.rb, line 73
def experiment_persisted?(experiment)
  !!@experiments[experiment]
end
flushdb() click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 40
def flushdb
  @metrics.clear
  @experiments.clear
end
get_experiment_completed_at(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 91
def get_experiment_completed_at(experiment)
  @experiments[experiment] && @experiments[experiment][:completed_at]
end
get_experiment_created_at(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 82
def get_experiment_created_at(experiment)
  @experiments[experiment] && @experiments[experiment][:created_at]
end
get_metric_last_update_at(metric) click to toggle source

– Metrics –

# File lib/vanity/adapters/mock_adapter.rb, line 48
def get_metric_last_update_at(metric)
  @metrics[metric] && @metrics[metric][:last_update_at]
end
is_experiment_completed?(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 95
def is_experiment_completed?(experiment)
  @experiments[experiment] && @experiments[experiment][:completed_at]
end
is_experiment_enabled?(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 104
def is_experiment_enabled?(experiment)
  record = @experiments[experiment]
  if Vanity.configuration.experiments_start_enabled
    record == nil || record[:enabled] != false
  else
    record && record[:enabled] == true
  end
end
metric_track(metric, timestamp, identity, values) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 52
def metric_track(metric, timestamp, identity, values)
  @metrics[metric] ||= {}
  current = @metrics[metric][timestamp.to_date] ||= []
  values.each_with_index do |v,i|
    current[i] = (current[i] || 0) + v || 0
  end
  @metrics[metric][:last_update_at] = Time.now
end
metric_values(metric, from, to) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 61
def metric_values(metric, from, to)
  hash = @metrics[metric] || {}
  (from.to_date..to.to_date).map { |date| hash[date] || [] }
end
reconnect!() click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 31
def reconnect!
  @metrics = @@metrics
  @experiments = @@experiments
end
set_experiment_completed_at(experiment, time) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 86
def set_experiment_completed_at(experiment, time)
  @experiments[experiment] ||= {}
  @experiments[experiment][:completed_at] ||= time
end
set_experiment_created_at(experiment, time) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 77
def set_experiment_created_at(experiment, time)
  @experiments[experiment] ||= {}
  @experiments[experiment][:created_at] ||= time
end
set_experiment_enabled(experiment, enabled) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 99
def set_experiment_enabled(experiment, enabled)
  @experiments[experiment] ||= {}
  @experiments[experiment][:enabled] = enabled
end
to_s() click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 36
def to_s
  "mock:/"
end

Private Instance Methods

alternative(experiment, alternative) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 186
def alternative(experiment, alternative)
  alternatives_for(experiment)[alternative] ||= {}
  alternatives_for(experiment)[alternative]
end
alternatives_for(experiment) click to toggle source
# File lib/vanity/adapters/mock_adapter.rb, line 191
def alternatives_for(experiment)
  @experiments[experiment] ||= {}
  @experiments[experiment][:alternatives] ||= {}

  @experiments[experiment][:alternatives]
end