Class: Chuckle::Cache
- Inherits:
-
Object
- Object
- Chuckle::Cache
- Defined in:
- lib/chuckle/cache.rb
Instance Attribute Summary collapse
-
#hits ⇒ Object
Returns the value of attribute hits.
-
#misses ⇒ Object
Returns the value of attribute misses.
Instance Method Summary collapse
- #body_path(request) ⇒ Object
- #clear(request) ⇒ Object
- #exists?(request) ⇒ Boolean
- #expired?(request) ⇒ Boolean
- #get(request) ⇒ Object
-
#initialize(client) ⇒ Cache
constructor
A new instance of Cache.
- #set(request, curl) ⇒ Object
Constructor Details
#initialize(client) ⇒ Cache
Returns a new instance of Cache.
7 8 9 10 11 |
# File 'lib/chuckle/cache.rb', line 7 def initialize(client) @client = client self.hits = self.misses = 0 end |
Instance Attribute Details
#hits ⇒ Object
Returns the value of attribute hits.
5 6 7 |
# File 'lib/chuckle/cache.rb', line 5 def hits @hits end |
#misses ⇒ Object
Returns the value of attribute misses.
5 6 7 |
# File 'lib/chuckle/cache.rb', line 5 def misses @misses end |
Instance Method Details
#body_path(request) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/chuckle/cache.rb', line 51 def body_path(request) uri = request.uri # calculate body_path s = @client.cache_dir s = "#{s}/#{pathify(uri.host)}" s = "#{s}/#{pathify(uri.path)}" if uri.query q = "?#{uri.query}" s = "#{s}#{pathify(q)}" end if body = request.body s = "#{s},#{pathify(body)}" end # shorten long paths to md5 checksum if s.length > 250 dir, base = File.dirname(s), File.basename(s) s = "#{dir}/#{Util.md5(base)}" end s end |
#clear(request) ⇒ Object
33 34 35 36 |
# File 'lib/chuckle/cache.rb', line 33 def clear(request) Util.rm_if_necessary(request.headers_path) Util.rm_if_necessary(request.body_path) end |
#exists?(request) ⇒ Boolean
38 39 40 |
# File 'lib/chuckle/cache.rb', line 38 def exists?(request) File.exists?(request.body_path) end |
#expired?(request) ⇒ Boolean
42 43 44 45 46 47 48 49 |
# File 'lib/chuckle/cache.rb', line 42 def expired?(request) return false if @client.expires_in == :never return false if !exists?(request) if File.stat(request.body_path).mtime + @client.expires_in < Time.now clear(request) true end end |
#get(request) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/chuckle/cache.rb', line 13 def get(request) if !exists?(request) || expired?(request) self.misses += 1 return end self.hits += 1 Response.new(request) end |
#set(request, curl) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/chuckle/cache.rb', line 22 def set(request, curl) # mkdirs FileUtils.mkdir_p([File.dirname(request.headers_path), File.dirname(request.body_path)]) # now mv FileUtils.mv(curl.headers_path, request.headers_path) FileUtils.mv(curl.body_path, request.body_path) Response.new(request) end |