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.
Direct Known Subclasses
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
private
Implements the Comparable interface for sorting KSUIDs.
-
#==(other) ⇒ Boolean
Checks whether this KSUID is equal to another.
-
#eql?(other) ⇒ Boolean
Checks whether this KSUID hashes to the same hash key as another.
-
#hash ⇒ Integer
Generates the key to use when using a KSUID as a hash key.
-
#initialize(payload: nil, time: Time.now) ⇒ KSUID::Type
constructor
Instantiates a new KSUID type.
-
#inspect ⇒ String
Prints the KSUID for debugging within a console.
-
#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
33 34 35 36 37 38 |
# File 'lib/ksuid/type.rb', line 33 def initialize(payload: nil, time: Time.now) payload ||= KSUID.config.random_generator.call 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
46 47 48 |
# File 'lib/ksuid/type.rb', line 46 def <=>(other) to_time <=> other.to_time end |
#==(other) ⇒ Boolean
Checks whether this KSUID is equal to another
59 60 61 |
# File 'lib/ksuid/type.rb', line 59 def ==(other) other.to_s == to_s end |
#eql?(other) ⇒ Boolean
Checks whether this KSUID hashes to the same hash key as another
72 73 74 |
# File 'lib/ksuid/type.rb', line 72 def eql?(other) hash == other.hash end |
#hash ⇒ Integer
Generates the key to use when using a KSUID as a hash key
89 90 91 |
# File 'lib/ksuid/type.rb', line 89 def hash @uid.hash end |
#inspect ⇒ String
Prints the KSUID for debugging within a console
101 102 103 |
# File 'lib/ksuid/type.rb', line 101 def inspect "<KSUID(#{self})>" end |
#payload ⇒ String
The payload for the KSUID, as a hex-encoded string
This is generally useful for comparing against the Go tool
117 118 119 |
# File 'lib/ksuid/type.rb', line 117 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.
133 134 135 |
# File 'lib/ksuid/type.rb', line 133 def raw Utils.bytes_to_hex_string(uid) end |
#to_bytes ⇒ String
The KSUID as a byte string
147 148 149 |
# File 'lib/ksuid/type.rb', line 147 def to_bytes Utils.byte_string_from_array(uid) end |
#to_i ⇒ Integer
The KSUID as a Unix timestamp
161 162 163 |
# File 'lib/ksuid/type.rb', line 161 def to_i Utils.int_from_bytes(uid.first(BYTES[:timestamp])) end |
#to_s ⇒ String
The KSUID as a base 62-encoded string
175 176 177 |
# File 'lib/ksuid/type.rb', line 175 def to_s Base62.encode_bytes(uid) end |
#to_time ⇒ String
The time the KSUID was generated
189 190 191 |
# File 'lib/ksuid/type.rb', line 189 def to_time Time.at(to_i + EPOCH_TIME) end |