Class: Cql::Uuid

Inherits:
Object
  • Object
show all
Defined in:
lib/cql/uuid.rb

Overview

Represents a UUID value.

This is a very basic implementation of UUIDs and exists more or less just to encode and decode UUIDs from and to Cassandra.

If you want to generate UUIDs see TimeUuid::Generator.

Direct Known Subclasses

TimeUuid

Instance Method Summary collapse

Constructor Details

#initialize(n) ⇒ Uuid

Creates a new UUID either from a string (expected to be on the standard 8-4-4-4-12 form, or just 32 characters without hyphens), or from a 128 bit number.

Raises:

  • (ArgumentError)

    if the string does not conform to the expected format



18
19
20
21
22
23
24
25
# File 'lib/cql/uuid.rb', line 18

def initialize(n)
  case n
  when String
    @n = from_s(n)
  else
    @n = n
  end
end

Instance Method Details

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


54
55
56
# File 'lib/cql/uuid.rb', line 54

def eql?(other)
  other.kind_of?(Uuid) && self.value == other.value
end

#hashObject



41
42
43
# File 'lib/cql/uuid.rb', line 41

def hash
  @h = (@n & 0xffffffffffffffff) ^ ((@n >> 64) & 0xffffffffffffffff)
end

#to_sObject

Returns a string representation of this UUID in the standard 8-4-4-4-12 form.



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/cql/uuid.rb', line 29

def to_s
  @s ||= begin
    parts = []
    parts << (@n >> (24 * 4)).to_s(16).rjust(8, '0')
    parts << ((@n >> (20 * 4)) & 0xffff).to_s(16).rjust(4, '0')
    parts << ((@n >> (16 * 4)) & 0xffff).to_s(16).rjust(4, '0')
    parts << ((@n >> (12 * 4)) & 0xffff).to_s(16).rjust(4, '0')
    parts << (@n & 0xffffffffffff).to_s(16).rjust(12, '0')
    parts.join('-').force_encoding(::Encoding::ASCII)
  end
end

#valueBignum

Returns the numerical representation of this UUID

Returns:

  • (Bignum)

    the 128 bit numerical representation



49
50
51
# File 'lib/cql/uuid.rb', line 49

def value
  @n
end