Module: Dropbox::Memoization
- Included in:
- API
- Defined in:
- lib/dropbox/memoization.rb
Overview
Adds methods to the Dropbox::Session class to support the temporary local storage of API results to reduce the number of network calls and simplify code.
Memoization is opt-in; you must explicitly indicate that you want this functionality by calling the enable_memoization method on your Scribd::Session instance. Once memoization is enabled, subsequent calls to memoized methods will hit an in-memory cache as opposed to making identical network calls.
If you would like to use your own caching strategy (for instance, your own memcache instance), set the cache_proc
and cache_clear_proc
attributes.
Enabling memoization makes removes an instance’s thread-safety.
Example:
session.('file1') # network
session.enable_memoization
session.('file1') # network
session.('file1') # cache
session.('file2') # network
session.('file2') # cache
session.disable_memoization
session.('file2') # network
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#cache_clear_proc=(prc) ⇒ Object
The cache_clear_proc takes an identifier and should invalidate it from the cache:.
-
#cache_proc=(prc) ⇒ Object
The cache_proc is a proc with two arguments, the cache identifier and the proc to call and store in the event of a cache miss:.
-
#disable_memoization ⇒ Object
Halts memoization of API calls and clears the memoization cache.
-
#enable_memoization ⇒ Object
Begins memoizing the results of API calls.
Class Method Details
.included(base) ⇒ Object
:nodoc:
37 38 39 |
# File 'lib/dropbox/memoization.rb', line 37 def self.included(base) # :nodoc: base.extend ClassMethods end |
Instance Method Details
#cache_clear_proc=(prc) ⇒ Object
The cache_clear_proc takes an identifier and should invalidate it from the cache:
instance.cache_clear_proc = Proc.new { |identifier| Rails.cache.delete identifier }
61 62 63 |
# File 'lib/dropbox/memoization.rb', line 61 def cache_clear_proc=(prc) @_memo_cache_clear_proc = prc end |
#cache_proc=(prc) ⇒ Object
The cache_proc is a proc with two arguments, the cache identifier and the proc to call and store in the event of a cache miss:
instance.cache_proc = Proc.new do |identifier, calculate_proc|
Rails.cache.fetch(identifier) { calculate_proc.call }
end
The Cache identifier will always be 64 lowercase hexadecimal characters. The second argument is a curried proc including all arguments to the original method call.
52 53 54 |
# File 'lib/dropbox/memoization.rb', line 52 def cache_proc=(prc) @_memo_cache_proc = prc end |
#disable_memoization ⇒ Object
Halts memoization of API calls and clears the memoization cache.
75 76 77 78 79 |
# File 'lib/dropbox/memoization.rb', line 75 def disable_memoization @_memoize = false @_memo_identifiers.each { |identifier| (@_memo_cache_clear_proc || Proc.new { |ident| eval "@_memo_#{ident} = nil" }).call(identifier) } @_memo_identifiers.clear end |
#enable_memoization ⇒ Object
Begins memoizing the results of API calls. Memoization is off by default for new instances.
68 69 70 71 |
# File 'lib/dropbox/memoization.rb', line 68 def enable_memoization @_memoize = true @_memo_identifiers ||= Set.new end |