Class: Aikido::Zen::Cache

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/aikido/zen/cache.rb

Instance Method Summary collapse

Constructor Details

#initialize(capacity, default_value = nil, ttl:, clock: nil) ⇒ Cache

Returns a new instance of Cache.



12
13
14
15
16
17
18
# File 'lib/aikido/zen/cache.rb', line 12

def initialize(capacity, default_value = nil, ttl:, clock: nil)
  @default_value = default_value
  @ttl = ttl
  @clock = clock

  @data = CappedMap.new(capacity, mode: :lru)
end

Instance Method Details

#[](key) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/aikido/zen/cache.rb', line 37

def [](key)
  if key?(key)
    @data[key].value
  else
    @default_value
  end
end

#[]=(key, value) ⇒ Object

Returns the value that the key was set to.

Parameters:

  • key (Object)

    the key

  • value (Object)

    the value

Returns:

  • (Object)

    the value that the key was set to



27
28
29
30
31
32
33
34
35
# File 'lib/aikido/zen/cache.rb', line 27

def []=(key, value)
  if key?(key)
    entry = @data[key]
    entry.refresh
    entry.value = value
  else
    @data[key] = CacheEntry.new(value, ttl: @ttl, clock: @clock)
  end
end

#delete(key) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/aikido/zen/cache.rb', line 45

def delete(key)
  if key?(key)
    @data.delete(key).value
  else
    @data.delete(key)
    nil
  end
end

#key?(key) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/aikido/zen/cache.rb', line 20

def key?(key)
  @data.key?(key) && !@data[key].expired?
end

#to_aObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Visible for testing.



56
57
58
# File 'lib/aikido/zen/cache.rb', line 56

def to_a
  @data.map { |key, entry| [key, entry.value] }
end

#to_hObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Visible for testing.



62
63
64
# File 'lib/aikido/zen/cache.rb', line 62

def to_h
  to_a.to_h
end