Class: Card::Cache::Temporary
- Defined in:
- card/lib/card/cache/temporary.rb
Overview
The Temporary cache is intended for a single request, script, migration, etc. It allows you to alter a card and then retrieve the card with those alterations intact without saving those changes to the database.
In practice, it’s a set of Cache-like methods for using a simple Hash.
Unlike the Shared cache, the Temporary cache can handle objects with singleton classes.
Constant Summary collapse
- MAX_KEYS =
10_000
Instance Attribute Summary collapse
-
#store ⇒ Object
readonly
Returns the value of attribute store.
Instance Method Summary collapse
-
#delete(key) ⇒ Object
-
#dump ⇒ Object
-
#exist?(key) ⇒ Boolean
-
#fetch(key) ⇒ Object
-
#fetch_multi(keys) ⇒ Object
-
#initialize(klass) ⇒ Temporary
constructor
A new instance of Temporary.
-
#read(key) ⇒ Object
-
#reset ⇒ Object
-
#write(key, value, callback: true) ⇒ Object
Constructor Details
#initialize(klass) ⇒ Temporary
Returns a new instance of Temporary.
17 18 19 20 21 |
# File 'card/lib/card/cache/temporary.rb', line 17 def initialize klass @klass = klass @store = {} @reps = 0 end |
Instance Attribute Details
#store ⇒ Object (readonly)
Returns the value of attribute store.
15 16 17 |
# File 'card/lib/card/cache/temporary.rb', line 15 def store @store end |
Instance Method Details
#delete(key) ⇒ Object
55 56 57 |
# File 'card/lib/card/cache/temporary.rb', line 55 def delete key @store.delete key end |
#dump ⇒ Object
59 60 61 62 63 |
# File 'card/lib/card/cache/temporary.rb', line 59 def dump @store.each do |k, v| p "#{k} --> #{v.inspect[0..30]}" end end |
#exist?(key) ⇒ Boolean
71 72 73 |
# File 'card/lib/card/cache/temporary.rb', line 71 def exist? key @store.key? key end |
#fetch(key) ⇒ Object
39 40 41 42 |
# File 'card/lib/card/cache/temporary.rb', line 39 def fetch key # read(key) || write(key, yield) exist?(key) ? read(key) : write(key, yield) end |
#fetch_multi(keys) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'card/lib/card/cache/temporary.rb', line 44 def fetch_multi keys @store.slice(*keys).tap do |found| missing = keys - found.keys if (newfound = missing.present? && yield(missing)) found.merge! newfound newfound.each { |key, value| write key, value } end end end |
#read(key) ⇒ Object
24 25 26 |
# File 'card/lib/card/cache/temporary.rb', line 24 def read key @store[key] end |
#reset ⇒ Object
65 66 67 68 |
# File 'card/lib/card/cache/temporary.rb', line 65 def reset @reps = 0 @store = {} end |
#write(key, value, callback: true) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'card/lib/card/cache/temporary.rb', line 29 def write key, value, callback: true within_key_counts do @store[key] = value.tap do @reps += 1 @klass.try :after_write_to_temp_cache, value if callback end end end |