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.
-
#clear ⇒ self
Remove all values from memory.
-
#delete(name) ⇒ Object
Remove a specific value from memory.
-
#fetch(name, default = (no_default = true), &block) ⇒ Object
Fetch the value from memory, or store it if it does not exist.
-
#initialize(memory) ⇒ undefined
constructor
private
Initialize the memory storage for memoized methods.
-
#marshal_dump ⇒ Hash
A hook that allows Marshal to dump the object.
-
#marshal_load(hash) ⇒ undefined
A hook that allows Marshal to load the object.
-
#store(name, value) ⇒ undefined
Store the value in memory.
Constructor Details
#initialize(memory) ⇒ 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 17 |
# File 'lib/memoizable/memory.rb', line 13 def initialize(memory) @memory = memory @monitor = Monitor.new freeze end |
Instance Method Details
#[](name) ⇒ Object
Get the value from memory
31 32 33 34 35 |
# File 'lib/memoizable/memory.rb', line 31 def [](name) fetch(name) do raise NameError, "No method #{name} is memoized" end end |
#clear ⇒ self
Remove all values from memory
138 139 140 141 142 143 |
# File 'lib/memoizable/memory.rb', line 138 def clear @monitor.synchronize do @memory.clear end self end |
#delete(name) ⇒ Object
Remove a specific value from memory
123 124 125 126 127 |
# File 'lib/memoizable/memory.rb', line 123 def delete(name) @monitor.synchronize do @memory.delete(name) end end |
#fetch(name, default = (no_default = true), &block) ⇒ Object
Fetch the value from memory, or store it if it does not exist
77 78 79 80 81 82 83 84 85 |
# File 'lib/memoizable/memory.rb', line 77 def fetch(name, default = (no_default = true), &block) @memory.fetch(name) do # check for the key @monitor.synchronize do # acquire a lock if the key is not found @memory.fetch(name) do # recheck under lock @memory[name] = resolve_fetch_value(name, no_default, default, &block) end end end end |
#marshal_dump ⇒ Hash
A hook that allows Marshal to dump the object
156 157 158 |
# File 'lib/memoizable/memory.rb', line 156 def marshal_dump @memory end |
#marshal_load(hash) ⇒ undefined
A hook that allows Marshal to load the object
173 174 175 |
# File 'lib/memoizable/memory.rb', line 173 def marshal_load(hash) initialize(hash) end |
#store(name, value) ⇒ undefined
Store the value in memory
50 51 52 53 54 55 56 |
# File 'lib/memoizable/memory.rb', line 50 def store(name, value) @monitor.synchronize do raise ArgumentError, "The method #{name} is already memoized" if @memory.key?(name) @memory[name] = value end end |