Class: KSUID::Type
Overview
Encapsulates the data type for a KSUID
This is the main class that you will interact with in this gem. You will not typically generate these directly, but this is the resulting data type for all of the main generation methods on the KSUID module.
A KSUID type has two pieces of information contained within its byte-encoded data:
-
The timestamp associated with the KSUID (stored as the first 4 bytes)
-
The payload, or random data, for the KSUID (stored as the last 16 bytes)
The type gives you access to several handles into these data.
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
private
Implements the Comparable interface for sorting KSUIDs.
-
#==(other) ⇒ Boolean
Checks whether this KSUID is equal to another.
-
#initialize(payload: nil, time: Time.now) ⇒ KSUID::Type
constructor
Instantiates a new KSUID type.
-
#payload ⇒ String
The payload for the KSUID, as a hex-encoded string.
-
#raw ⇒ String
The KSUID as a hex-encoded string.
-
#to_bytes ⇒ String
The KSUID as a byte string.
-
#to_i ⇒ Integer
The KSUID as a Unix timestamp.
-
#to_s ⇒ String
The KSUID as a base 62-encoded string.
-
#to_time ⇒ String
The time the KSUID was generated.
Constructor Details
#initialize(payload: nil, time: Time.now) ⇒ KSUID::Type
Instantiates a new KSUID type
37 38 39 40 41 42 |
# File 'lib/ksuid/type.rb', line 37 def initialize(payload: nil, time: Time.now) payload ||= SecureRandom.random_bytes(BYTES[:payload]) byte_encoding = Utils.int_to_bytes(time.to_i - EPOCH_TIME) @uid = byte_encoding.bytes + payload.bytes end |
Instance Method Details
#<=>(other) ⇒ Integer
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Implements the Comparable interface for sorting KSUIDs
50 51 52 |
# File 'lib/ksuid/type.rb', line 50 def <=>(other) to_time <=> other.to_time end |
#==(other) ⇒ Boolean
Checks whether this KSUID is equal to another
63 64 65 |
# File 'lib/ksuid/type.rb', line 63 def ==(other) other.to_s == to_s end |
#payload ⇒ String
The payload for the KSUID, as a hex-encoded string
This is generally useful for comparing against the Go tool
79 80 81 |
# File 'lib/ksuid/type.rb', line 79 def payload Utils.bytes_to_hex_string(uid.last(BYTES[:payload])) end |
#raw ⇒ String
The KSUID as a hex-encoded string
This is generally useful for comparing against the Go tool.
95 96 97 |
# File 'lib/ksuid/type.rb', line 95 def raw Utils.bytes_to_hex_string(uid) end |
#to_bytes ⇒ String
The KSUID as a byte string
109 110 111 |
# File 'lib/ksuid/type.rb', line 109 def to_bytes Utils.byte_string_from_array(uid) end |
#to_i ⇒ Integer
The KSUID as a Unix timestamp
123 124 125 126 127 |
# File 'lib/ksuid/type.rb', line 123 def to_i unix_time = Utils.int_from_bytes(uid.first(BYTES[:timestamp])) unix_time end |
#to_s ⇒ String
The KSUID as a base 62-encoded string
139 140 141 |
# File 'lib/ksuid/type.rb', line 139 def to_s Base62.encode_bytes(uid) end |
#to_time ⇒ String
The time the KSUID was generated
153 154 155 |
# File 'lib/ksuid/type.rb', line 153 def to_time Time.at(to_i + EPOCH_TIME) end |