Class: Hackle::Bucketer
- Inherits:
-
Object
- Object
- Hackle::Bucketer
- Defined in:
- lib/hackle/decision/bucketer.rb
Instance Method Summary collapse
- #bucketing(bucket:, user:) ⇒ Slot?
- #calculate_slot_number(seed:, slot_size:, user_id:) ⇒ Integer
- #hash(data:, seed:) ⇒ Integer
Instance Method Details
#bucketing(bucket:, user:) ⇒ Slot?
12 13 14 15 16 17 18 19 |
# File 'lib/hackle/decision/bucketer.rb', line 12 def bucketing(bucket:, user:) slot_number = calculate_slot_number( seed: bucket.seed, slot_size: bucket.slot_size, user_id: user.id ) bucket.get_slot(slot_number: slot_number) end |
#calculate_slot_number(seed:, slot_size:, user_id:) ⇒ Integer
26 27 28 29 |
# File 'lib/hackle/decision/bucketer.rb', line 26 def calculate_slot_number(seed:, slot_size:, user_id:) hash_value = hash(data: user_id, seed: seed) hash_value.abs % slot_size end |
#hash(data:, seed:) ⇒ Integer
35 36 37 38 39 40 41 42 |
# File 'lib/hackle/decision/bucketer.rb', line 35 def hash(data:, seed:) unsigned_value = MurmurHash3::V32.str_hash(data, seed) if (unsigned_value & 0x80000000).zero? unsigned_value else -((unsigned_value ^ 0xFFFFFFFF) + 1) end end |