Harbor::Cache
Attributes
Public Class Methods
Public Instance Methods
delete(key)
# File lib/harbor/cache.rb, line 70 70: def delete(key) 71: logger.debug "DELETE: #{key.inspect}" if logger 72: @semaphore.synchronize do 73: @store.delete(key) 74: end 75: rescue 76: log("Harbor::Cache#put unable to delete cached content.", $!) 77: ensure 78: nil 79: end
delete_matching(key)
# File lib/harbor/cache.rb, line 81 81: def delete_matching(key) 82: logger.debug "DELETE MATCHING: #{key.inspect}" if logger 83: @semaphore.synchronize do 84: @store.delete_matching(key) 85: end 86: rescue 87: log("Harbor::Cache#put unable to delete cached content.", $!) 88: ensure 89: nil 90: end
get(key)
# File lib/harbor/cache.rb, line 46 46: def get(key) 47: if item = @store.get(key) 48: logger.debug "HIT: #{key.inspect}" if logger 49: if item.fresh? 50: logger.debug "BUMP: #{key.inspect}" if logger 51: @semaphore.synchronize do 52: @store.bump(key) 53: end 54: 55: item 56: else 57: delete(key) 58: 59: item = nil 60: end 61: else 62: item = nil 63: end 64: rescue 65: log("Harbor::Cache#get unable to retrieve cached content.", $!) 66: ensure 67: defined?(item) ? item : nil 68: end
put(key, content, ttl, maximum_age = nil)
# File lib/harbor/cache.rb, line 25 25: def put(key, content, ttl, maximum_age = nil) 26: raise PutArgumentError.new("Harbor::Cache::Memory#put expects a String value for 'key', got #{key}") unless key.is_a?(String) 27: raise PutArgumentError.new("Harbor::Cache::Memory#put expects a Fixnum value greater than 0 for 'ttl', got #{ttl}") unless ttl.is_a?(Fixnum) && ttl > 0 28: raise PutArgumentError.new("Harbor::Cache::Memory#put expects nil, or a Fixnum value greater than 0 for 'maximum_age', got #{maximum_age}") unless maximum_age.nil? || (maximum_age.is_a?(Fixnum) && maximum_age > 0) 29: raise PutArgumentError.new("Harbor::Cache::Memory#put expects a maximum_age greater than the ttl, got ttl: #{ttl}, maximum_age: #{maximum_age}") if maximum_age && ttl && (maximum_age <= ttl) 30: 31: @semaphore.synchronize do 32: # Prevent multiple writes of similar content to the cache 33: return true if (cached_item = @store.get(key)) && cached_item.fresh? && cached_item.content.hash == content.hash 34: 35: logger.debug "PUT: #{key} (ttl:#{ttl.inspect} maximum_age:#{maximum_age.inspect})" if logger 36: @store.put(key, ttl, maximum_age, content, Time.now) 37: end 38: rescue 39: log("Harbor::Cache#put unable to store cached content.", $!) 40: 41: raise if $!.is_a?(PutArgumentError) 42: ensure 43: content 44: end