class Transit::UUID
Represents a transit UUID
extension type. @see github.com/cognitect/transit-format
Public Class Methods
new(uuid_or_most_significant_bits=nil,least_significant_bits=nil)
click to toggle source
# File lib/transit/transit_types.rb, line 89 def initialize(uuid_or_most_significant_bits=nil,least_significant_bits=nil) case uuid_or_most_significant_bits when String @string_rep = uuid_or_most_significant_bits when Array @numeric_rep = uuid_or_most_significant_bits.map {|n| twos_complement(n)} when Numeric @numeric_rep = [twos_complement(uuid_or_most_significant_bits), twos_complement(least_significant_bits)] when nil @string_rep = SecureRandom.uuid else raise "Can't build UUID from #{uuid_or_most_significant_bits.inspect}" end end
random()
click to toggle source
# File lib/transit/transit_types.rb, line 85 def self.random new end
Public Instance Methods
==(other)
click to toggle source
# File lib/transit/transit_types.rb, line 120 def ==(other) return false unless other.is_a?(self.class) if @numeric_rep other.most_significant_bits == most_significant_bits && other.least_significant_bits == least_significant_bits else other.to_s == @string_rep end end
Also aliased as: eql?
hash()
click to toggle source
# File lib/transit/transit_types.rb, line 131 def hash most_significant_bits.hash + least_significant_bits.hash end
inspect()
click to toggle source
# File lib/transit/transit_types.rb, line 116 def inspect @inspect ||= "<#{self.class} \"#{to_s}\">" end
least_significant_bits()
click to toggle source
# File lib/transit/transit_types.rb, line 112 def least_significant_bits @least_significant_bits ||= numeric_rep[1] end
most_significant_bits()
click to toggle source
# File lib/transit/transit_types.rb, line 108 def most_significant_bits @most_significant_bits ||= numeric_rep[0] end
to_s()
click to toggle source
# File lib/transit/transit_types.rb, line 104 def to_s @string_rep ||= numbers_to_string end
Private Instance Methods
digits(val, digits)
click to toggle source
# File lib/transit/transit_types.rb, line 156 def digits(val, digits) hi = 1 << (digits*4) (hi | (val & (hi - 1))).to_s(16)[1..-1] end
numbers_to_string()
click to toggle source
# File lib/transit/transit_types.rb, line 141 def numbers_to_string most_significant_bits = @numeric_rep[0] least_significant_bits = @numeric_rep[1] digits(most_significant_bits >> 32, 8) + "-" + digits(most_significant_bits >> 16, 4) + "-" + digits(most_significant_bits, 4) + "-" + digits(least_significant_bits >> 48, 4) + "-" + digits(least_significant_bits, 12) end
numeric_rep()
click to toggle source
# File lib/transit/transit_types.rb, line 137 def numeric_rep @numeric_rep ||= string_to_numbers end
string_to_numbers()
click to toggle source
# File lib/transit/transit_types.rb, line 151 def string_to_numbers str = @string_rep.delete("-") [twos_complement(str[ 0..15].hex), twos_complement(str[16..31].hex)] end
twos_complement(integer_value, num_of_bits=64)
click to toggle source
# File lib/transit/transit_types.rb, line 161 def twos_complement(integer_value, num_of_bits=64) max_signed = 2**(num_of_bits-1) max_unsigned = 2**num_of_bits (integer_value >= max_signed) ? integer_value - max_unsigned : integer_value end