Harbor Documentation

Attributes

  • logger [RW] (Not documented)

Public Class Methods

new(store)

      # File lib/harbor/cache.rb, line 17
17:     def initialize(store)
18:       raise ArgumentError.new("Harbor::Cache.new expects a non-null 'store' parameter") unless store
19:       logger.debug "INIT: #{store.inspect}" if logger
20: 
21:       @store = store
22:       @semaphore = Mutex.new
23:     end

redis(connection, name = nil)

      # File lib/harbor/cache.rb, line 8
 8:     def self.redis(connection, name = nil)
 9:       require "harbor/cache/redis"
10:       self.new(Harbor::Cache::Redis.new(connection, name))
11:     end

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

Private Instance Methods

log(message, error)

      # File lib/harbor/cache.rb, line 94
94:     def log(message, error)
95:       if @logger
96:         @logger.fatal("#{message} #{$!}\n#{$!.message}\nBacktrace:\n#{$!.backtrace.join("\n")}")
97:       end
98:     end