Sha256: 282fa6c5a477c0efd939e3014c9ae96fff4486c2a35dd40c3ced86ec7ff257e8

Contents?: true

Size: 692 Bytes

Versions: 5

Compression:

Stored size: 692 Bytes

Contents

# frozen_string_literal: true

module ActiveUxid
  class Ulid < ActiveUxid::Base

    def self.encode
      klass = new
      klass.uxid_encode
    end

    def uxid_encode
      (1..encoding_length).reduce('') do |str, num|
        shift = 128 - 5 * num
        "#{str}#{encoding_chars[(uxid_octect >> shift) & 0x1f]}"
      end
    end

    def uxid_bytes
      "#{uxid_unixtime_48bit}#{SecureRandom.random_bytes(10)}"
    end

    def uxid_octect
      (hi, lo) = uxid_bytes.unpack('Q>Q>')
      (hi << 64) | lo
    end

    def uxid_unixtime_flex
      (Time.current.to_f * 10_000).to_i
    end

    def uxid_unixtime_48bit
      [uxid_unixtime_flex].pack('Q>')[2..-1]
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active_uxid-5.0.1 lib/active_uxid/ulid.rb
active_uxid-5.0.0 lib/active_uxid/ulid.rb
active_uxid-1.0.13 lib/active_uxid/ulid.rb
active_uxid-1.0.12 lib/active_uxid/ulid.rb
active_uxid-1.0.11 lib/active_uxid/ulid.rb