class Hackle::Bucketer
Public Instance Methods
bucketing(bucket:, user:)
click to toggle source
@param bucket [Bucket] @param user [User]
@return [Slot, nil]
# 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:)
click to toggle source
@param seed [Integer] @param slot_size [Integer] @param user_id [String]
@return [Integer]
# 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:)
click to toggle source
@param data [String] @param seed [Integer]
@return [Integer]
# 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