Sha256: 39e2859cd586bda2d1fb41532e57f9e6163e8d24a779a41d64748a73614ee0cc
Contents?: true
Size: 1.68 KB
Versions: 1
Compression:
Stored size: 1.68 KB
Contents
# frozen_string_literal: true require_relative 'digest_generator/version' require 'xxhash' require 'byebug' # DigestGenerator module DigestGenerator extend self MASK_64BIT = 0x7FFFFFFFFFFFFFFF XXHASH_ALGO = 'xxHash' SUPPORTED_ALGORITHMS = [XXHASH_ALGO].freeze def algorithm @algorithm end def algorithm=(value) @algorithm = value end def configure_default_algo self.algorithm = XXHASH_ALGO if algorithm.nil? end # Hash 64 and mask bit 63 (0-63) to remove signedness to be compatible with postgress bigints def digest_63bit(payload) configure_default_algo send("#{algorithm.downcase}63_digest", payload) end def digest_32bit(payload) configure_default_algo send("#{algorithm.downcase}32_digest", payload) end def digest_64bit(payload) configure_default_algo send("#{algorithm.downcase}64_digest", payload) end def self.included(base) base.include(InstanceMethods) end # InstanceMethods module InstanceMethods def refresh_digest self.digest = generate_digest end private def generate_digest properties = attributes # Cache the hash version of the object digest_keys = self.class::DIGEST_VALID_KEYS values = digest_keys.map { |key| properties[key] } configure_default_algo unless SUPPORTED_ALGORITHMS.include?(XXHASH_ALGO) raise "Please ask the gem author to add support for #{algorithm}" end digest_63bit(values) end end private def xxhash63_digest(payload) XXhash.xxh64(payload) & MASK_64BIT end def xxhash64_digest(payload) XXhash.xxh64(payload) end def xxhash32_digest(payload) XXhash.xxh32(payload) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
digest_generator-0.1.1 | lib/digest_generator.rb |