Module: OnRamp::Bucket
Instance Method Summary collapse
- #get_variant(experiment_name:, unique_id:) ⇒ Object
- #get_weight(unique_id:, experiment_name:, version: nil) ⇒ Object
- #normalize_variants(variants_cfg) ⇒ Object
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 |