Class: Magick::Adapters::Memory

Inherits:
Base
  • Object
show all
Defined in:
lib/magick/adapters/memory.rb

Instance Method Summary collapse

Constructor Details

#initializeMemory

Returns a new instance of Memory.



6
7
8
9
10
11
# File 'lib/magick/adapters/memory.rb', line 6

def initialize
  @store = {}
  @mutex = Mutex.new
  @ttl = {}
  @default_ttl = 3600 # 1 hour default TTL
end

Instance Method Details

#all_featuresObject



52
53
54
55
56
57
# File 'lib/magick/adapters/memory.rb', line 52

def all_features
  mutex.synchronize do
    cleanup_expired
    store.keys
  end
end

#clearObject



59
60
61
62
63
64
# File 'lib/magick/adapters/memory.rb', line 59

def clear
  mutex.synchronize do
    @store = {}
    @ttl = {}
  end
end

#delete(feature_name) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/magick/adapters/memory.rb', line 37

def delete(feature_name)
  mutex.synchronize do
    feature_name_str = feature_name.to_s
    store.delete(feature_name_str)
    ttl.delete(feature_name_str)
  end
end

#exists?(feature_name) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
48
49
50
# File 'lib/magick/adapters/memory.rb', line 45

def exists?(feature_name)
  mutex.synchronize do
    cleanup_expired
    store.key?(feature_name.to_s)
  end
end

#get(feature_name, key) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/magick/adapters/memory.rb', line 13

def get(feature_name, key)
  # Fast path: avoid mutex if possible (use string keys directly)
  feature_name_str = feature_name.is_a?(String) ? feature_name : feature_name.to_s
  key_str = key.is_a?(String) ? key : key.to_s

  mutex.synchronize do
    cleanup_expired
    feature_data = store[feature_name_str]
    return nil unless feature_data

    value = feature_data[key_str]
    deserialize_value(value)
  end
end

#set(feature_name, key, value) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/magick/adapters/memory.rb', line 28

def set(feature_name, key, value)
  mutex.synchronize do
    feature_name_str = feature_name.to_s
    store[feature_name_str] ||= {}
    store[feature_name_str][key.to_s] = serialize_value(value)
    update_ttl(feature_name_str)
  end
end

#set_ttl(feature_name, seconds) ⇒ Object



66
67
68
69
70
# File 'lib/magick/adapters/memory.rb', line 66

def set_ttl(feature_name, seconds)
  mutex.synchronize do
    ttl[feature_name.to_s] = Time.now.to_i + seconds
  end
end