Class: Dcc::Server::Storage::Memory

Inherits:
Object
  • Object
show all
Defined in:
lib/dcc/server/storage/memory.rb

Overview

In-memory storage with SHA-256-keyed entries and TTL eviction. Not thread-safe without external synchronization — wrap in a Mutex for concurrent deployments.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ttl_seconds: 300) ⇒ Memory

Returns a new instance of Memory.



14
15
16
17
# File 'lib/dcc/server/storage/memory.rb', line 14

def initialize(ttl_seconds: 300)
  @store = {}
  @ttl_seconds = ttl_seconds
end

Instance Attribute Details

#ttl_secondsObject (readonly)

Returns the value of attribute ttl_seconds.



12
13
14
# File 'lib/dcc/server/storage/memory.rb', line 12

def ttl_seconds
  @ttl_seconds
end

Instance Method Details

#clearObject



47
48
49
# File 'lib/dcc/server/storage/memory.rb', line 47

def clear
  @store.clear
end

#delete(id) ⇒ Boolean

Parameters:

  • id (String)

Returns:

  • (Boolean)


43
44
45
# File 'lib/dcc/server/storage/memory.rb', line 43

def delete(id)
  !!@store.delete(id)
end

#get(id) ⇒ Dcc::Server::Storage::Entry?

Parameters:

  • id (String)

    SHA-256 hex.

Returns:



30
31
32
33
34
35
36
37
38
39
# File 'lib/dcc/server/storage/memory.rb', line 30

def get(id)
  entry = @store[id]
  return nil unless entry

  if entry.expired?
    @store.delete(id)
    return nil
  end
  entry
end

#put(xml) ⇒ Dcc::Server::Storage::Entry

Parameters:

  • xml (String)

Returns:



21
22
23
24
25
26
# File 'lib/dcc/server/storage/memory.rb', line 21

def put(xml)
  id = ::Digest::SHA256.hexdigest(xml)
  entry = Entry.new(id: id, xml: xml, expires_at: Time.now + ttl_seconds)
  @store[id] = entry
  entry
end

#sizeObject



51
52
53
# File 'lib/dcc/server/storage/memory.rb', line 51

def size
  @store.size
end