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
-
.generate ⇒ Object
Generates a ULID string (26 characters, Crockford Base32 encoded).
Class Method Details
.generate ⇒ Object
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 = (Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)) randomness = SecureRandom.random_bytes(10) () + encode_random(randomness) end end |