Sha256: cfd2ce8d5045e3fae1d8fb1fe90bbfee985fac8dd37e6420999835a2a0db45a3

Contents?: true

Size: 887 Bytes

Versions: 1

Compression:

Stored size: 887 Bytes

Contents

require "digest/sha1"
require "socket"
require "securerandom"

class PropertybaseId
  class Generator
    def generate(object: )
      PropertybaseId.new(
        object_id: pb_object_id(object),
        time: ::Time.now.to_i,
        random_int: random_32
      )
    end

    private

    def pb_object_id(object)
      PropertybaseId::Mappings.objects.fetch(object.to_s) do
        raise ArgumentError, "Object #{object.inspect} not found"
      end
    end

    def host_id
      @_host_id ||= Digest::SHA1.hexdigest(Socket.gethostname).to_i(16) % PropertybaseId.max_value(2)
    end

    def random_32
      SecureRandom::random_number("zzzzzz".to_i(36) + 1)
    end

    def next_counter
      @counter = (@counter + 1) % PropertybaseId.max_value(5)
    end

    def process_id
      "#{Process.pid}#{Thread.current.object_id}".hash % PropertybaseId.max_value(2)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
propertybase_id-0.6.0 lib/propertybase_id/generator.rb