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, &block) ⇒ Cache

Returns a new instance of Cache.



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

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

  @initialize_block = block

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

Instance Method Details

#[](key) ⇒ Object



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

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



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

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



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

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

#key?(key) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/aikido/zen/cache.rb', line 22

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.



58
59
60
# File 'lib/aikido/zen/cache.rb', line 58

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.



64
65
66
# File 'lib/aikido/zen/cache.rb', line 64

def to_h
  to_a.to_h
end