Module: OnRamp::Bucket

Extended by:
Bucket
Included in:
Bucket
Defined in:
lib/on_ramp/bucket.rb

Instance Method Summary collapse

Instance Method Details

#get_variant(experiment_name:, unique_id:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/on_ramp/bucket.rb', line 9

def get_variant(experiment_name:, unique_id:)
  weight = get_weight(
    unique_id: unique_id, experiment_name: experiment_name
  )

  running_total = 0.0
  cfg = OnRamp.ab_experiments[experiment_name]['variants']

  normalize_variants(cfg).each_pair do |variant_name, percentage|
    running_total += percentage
    return variant_name if weight <= running_total
  end
end

#get_weight(unique_id:, experiment_name:, version: nil) ⇒ Object



23
24
25
26
# File 'lib/on_ramp/bucket.rb', line 23

def get_weight(unique_id:, experiment_name:, version: nil)
  md5 = ::Digest::MD5.hexdigest("#{unique_id}-#{experiment_name}-#{version}")
  md5[0...8].to_i(16).to_f / 0xFFFFFFFF
end

#normalize_variants(variants_cfg) ⇒ Object



28
29
30
# File 'lib/on_ramp/bucket.rb', line 28

def normalize_variants(variants_cfg)
  variants_cfg.map { |k, v| [k, v / 100.0] }.to_h
end