Module: Subledger::UUID

Defined in:
lib/subledger/uuid.rb

Constant Summary collapse

SPACE =
62 ** 22
CHARS =
('0'..'9').to_a + ('a'..'z').to_a + ('A'..'Z').to_a
VALID =
/^[0-9A-Za-z]{22}$/

Class Method Summary collapse

Class Method Details

.as_bignumObject



24
25
26
# File 'lib/subledger/uuid.rb', line 24

def self.as_bignum
  SecureRandom.random_number SPACE
end

.as_stringObject



20
21
22
# File 'lib/subledger/uuid.rb', line 20

def self.as_string
  to_string as_bignum
end

.invalid?(uuid) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/subledger/uuid.rb', line 16

def self.invalid? uuid
  uuid.nil? or uuid !~ VALID
end

.to_bignum(uuid) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/subledger/uuid.rb', line 39

def self.to_bignum uuid
  bignum = 0

  power = 0

  uuid.split('').reverse.each do |character|
    bignum += CHARS.index( character ) * ( 62 ** power )
    power += 1
  end

  bignum
end

.to_string(bignum) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/subledger/uuid.rb', line 28

def self.to_string bignum
  base_62 = ''

  22.times do
    base_62 << CHARS[ bignum.modulo 62 ]
    bignum /= 62
  end

  base_62.reverse
end

.valid?(uuid) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/subledger/uuid.rb', line 12

def self.valid? uuid
  !uuid.nil? and uuid =~ VALID
end