Class: Hackle::Bucketer

Inherits:
Object
  • Object
show all
Defined in:
lib/hackle/decision/bucketer.rb

Instance Method Summary collapse

Instance Method Details

#bucketing(bucket:, user:) ⇒ Slot?

Parameters:

Returns:



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

Parameters:

  • seed (Integer)
  • slot_size (Integer)
  • user_id (String)

Returns:

  • (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

Parameters:

  • data (String)
  • seed (Integer)

Returns:

  • (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