Module: OpenTrace::ULID

Defined in:
lib/opentrace/ulid.rb

Constant Summary collapse

ENCODING =

Crockford Base32 alphabet (excludes I, L, O, U)

"0123456789ABCDEFGHJKMNPQRSTVWXYZ"

Class Method Summary collapse

Class Method Details

.generateObject

Generates a ULID string (26 characters, Crockford Base32 encoded).

The first 10 characters encode the current time in milliseconds, ensuring lexicographic sort order by creation time. The last 16 characters are cryptographically random.

Thread-safe: concurrent calls are serialized via a mutex to guarantee uniqueness even when called from multiple threads simultaneously.



21
22
23
24
25
26
27
28
# File 'lib/opentrace/ulid.rb', line 21

def self.generate
  MUTEX.synchronize do
    timestamp_ms = (Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond))
    randomness = SecureRandom.random_bytes(10)

    encode_timestamp(timestamp_ms) + encode_random(randomness)
  end
end