Class: RaceGuard::Distributed::KeyBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/race_guard/distributed/key_builder.rb

Overview

Builds bounded, stable lock keys from a namespace + optional resource segment.

Raw resource values are never embedded verbatim (cardinality / key length); they are hashed with SHA-256 (hex prefix).

Constant Summary collapse

MAX_NAME_BYTES =
128
RESOURCE_HASH_HEX_CHARS =
16

Class Method Summary collapse

Class Method Details

.build(name:, resource: nil, prefix: nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/race_guard/distributed/key_builder.rb', line 16

def build(name:, resource: nil, prefix: nil)
  pfx =
    if prefix.nil? || (prefix.respond_to?(:empty?) && prefix.empty?)
      'race_guard:distributed:'
    else
      prefix.to_s
    end
  seg = sanitize_name_segment(name)
  r = resource_segment(resource)
  r ? "#{pfx}v1:#{seg}:#{r}" : "#{pfx}v1:#{seg}"
end

.resource_digest(resource) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/race_guard/distributed/key_builder.rb', line 28

def resource_digest(resource)
  return nil if resource.nil?

  s = resource.to_s
  return nil if s.empty?

  Digest::SHA256.hexdigest(s)[0, RESOURCE_HASH_HEX_CHARS]
end