Class: SafeMemoize::Stores::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/safe_memoize/stores/base.rb

Overview

This class is abstract.

Abstract base class for SafeMemoize cache store adapters.

Subclass this and implement all abstract methods to plug in a custom backend (Redis, Memcached, Rails.cache, etc.). The Memory class is the built-in reference implementation.

Examples:

Minimal inline implementation

class MyStore < SafeMemoize::Stores::Base
  def initialize = (@h = {})
  def read(key) = @h.fetch(key, MISS)
  def write(key, value, expires_in: nil) = (@h[key] = value)
  def delete(key) = @h.delete(key)
  def clear = @h.clear
  def keys = @h.keys
end

Direct Known Subclasses

Adapters::ConcurrentRuby, Memory, RailsCache, Redis

Constant Summary collapse

MISS =

Sentinel returned by #read to signal a cache miss.

Distinct from +nil+ and +false+, which are valid cached values.

Object.new.freeze

Instance Method Summary collapse

Instance Method Details

#clearvoid

This method is abstract.

This method returns an undefined value.

Remove all entries from the store.

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/safe_memoize/stores/base.rb', line 61

def clear
  raise NotImplementedError, "#{self.class}#clear must be implemented"
end

#delete(key) ⇒ void

This method is abstract.

This method returns an undefined value.

Delete a single entry.

Parameters:

  • key (Object)

    cache key

Raises:

  • (NotImplementedError)


53
54
55
# File 'lib/safe_memoize/stores/base.rb', line 53

def delete(key)
  raise NotImplementedError, "#{self.class}#delete must be implemented"
end

#exist?(key) ⇒ Boolean

Check whether a live entry exists for the given key.

The default delegates to #read; subclasses may override for stores with a native existence check.

Parameters:

  • key (Object)

Returns:

  • (Boolean)


80
81
82
# File 'lib/safe_memoize/stores/base.rb', line 80

def exist?(key)
  read(key) != MISS
end

#keysArray<Object>

This method is abstract.

Return all live (non-expired) keys.

Returns:

  • (Array<Object>)

Raises:

  • (NotImplementedError)


69
70
71
# File 'lib/safe_memoize/stores/base.rb', line 69

def keys
  raise NotImplementedError, "#{self.class}#keys must be implemented"
end

#read(key) ⇒ Object

This method is abstract.

Read a value from the store.

Parameters:

  • key (Object)

    cache key

Returns:

  • (Object)

    the stored value, or MISS if absent or expired

Raises:

  • (NotImplementedError)


33
34
35
# File 'lib/safe_memoize/stores/base.rb', line 33

def read(key)
  raise NotImplementedError, "#{self.class}#read must be implemented"
end

#write(key, value, expires_in: nil) ⇒ void

This method is abstract.

This method returns an undefined value.

Write a value to the store.

Parameters:

  • key (Object)

    cache key

  • value (Object)

    value to cache (may be +nil+ or +false+)

  • expires_in (Numeric, nil) (defaults to: nil)

    seconds until expiry; +nil+ means no expiry

Raises:

  • (NotImplementedError)


44
45
46
# File 'lib/safe_memoize/stores/base.rb', line 44

def write(key, value, expires_in: nil)
  raise NotImplementedError, "#{self.class}#write must be implemented"
end