class Crudboy::ID

Private Class Methods

long() click to toggle source
# File lib/crudboy/id.rb, line 22
def long
  ts = (Time.now.to_f * 1000).to_i
  if ts < @last_timestamp
    raise 'Clock moved backwards.'
  end

  if ts == @last_timestamp
    @sequence = (@sequence + 1) & @sequence_mask
    if (@sequence == 0)
      ts = til_next_millis(@last_timestamp)
    end
  else
    @sequence = 0
  end
  @last_timestamp = ts

  ((ts - @id_epoch) << @timestamp_left_shift) | (@data_center_id << @data_center_id_shift) | (@worker_id << @worker_id_shift) | @sequence
end
til_next_millis(last_timestamp) click to toggle source
# File lib/crudboy/id.rb, line 48
def til_next_millis(last_timestamp)
  ts = (Time.now.to_f * 1000).to_i
  while ts <= last_timestamp
    ts = (Time.now.to_f * 1000).to_i
  end
  ts
end
uuid() click to toggle source
# File lib/crudboy/id.rb, line 41
def uuid
  require 'securerandom'
  SecureRandom.uuid.gsub('-', '')
end