Class: Memoizable::Memory
- Inherits:
-
Object
- Object
- Memoizable::Memory
- Defined in:
- lib/memoizable/memory.rb
Overview
Storage for memoized methods
Instance Method Summary collapse
-
#[](name) ⇒ Object
Get the value from memory.
-
#[]=(name, value) ⇒ undefined
Store the value in memory.
-
#fetch(name, &block) ⇒ Object
Fetch the value from memory, or store it if it does not exist.
-
#initialize ⇒ undefined
constructor
private
Initialize the memory storage for memoized methods.
-
#key?(name) ⇒ Boolean
Test if the name has a value in memory.
-
#set(data) ⇒ Memory
Set the memory.
Constructor Details
#initialize ⇒ undefined
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.
Initialize the memory storage for memoized methods
13 14 15 16 |
# File 'lib/memoizable/memory.rb', line 13 def initialize @memory = ThreadSafe::Cache.new freeze end |
Instance Method Details
#[](name) ⇒ Object
Get the value from memory
25 26 27 28 29 |
# File 'lib/memoizable/memory.rb', line 25 def [](name) @memory.fetch(name) do fail NameError, "No method #{name} is memoized" end end |
#[]=(name, value) ⇒ undefined
Store the value in memory
39 40 41 42 43 44 45 46 |
# File 'lib/memoizable/memory.rb', line 39 def []=(name, value) memoized = true @memory.compute_if_absent(name) do memoized = false value end fail ArgumentError, "The method #{name} is already memoized" if memoized end |
#fetch(name, &block) ⇒ Object
Fetch the value from memory, or store it if it does not exist
56 57 58 |
# File 'lib/memoizable/memory.rb', line 56 def fetch(name, &block) @memory.compute_if_absent(name, &block) end |
#key?(name) ⇒ Boolean
Test if the name has a value in memory
79 80 81 |
# File 'lib/memoizable/memory.rb', line 79 def key?(name) @memory.key?(name) end |
#set(data) ⇒ Memory
Set the memory
67 68 69 70 |
# File 'lib/memoizable/memory.rb', line 67 def set(data) data.each { |name, value| self[name] = value } self end |