From 6a8409e5f51625781c2c37f8753995d4b8b13434 Mon Sep 17 00:00:00 2001 From: Mike Evans Date: Mon, 28 Oct 2013 12:26:19 -0400 Subject: [PATCH] Enabling native ttl option for metastore --- lib/rack/cache/metastore.rb | 20 ++++++++++++-------- test/metastore_test.rb | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/rack/cache/metastore.rb b/lib/rack/cache/metastore.rb index 2eb56d1..5d9b170 100644 --- a/lib/rack/cache/metastore.rb +++ b/lib/rack/cache/metastore.rb @@ -80,7 +80,11 @@ def store(request, response, entity_store) headers.delete 'Age' entries.unshift [stored_env, headers] - write key, entries + if request.env['rack-cache.use_native_ttl'] + write key, entries, response.ttl + else + write key, entries + end key end @@ -154,7 +158,7 @@ def read(key) # Store an Array of request/response pairs for the given key. Concrete # implementations should not attempt to filter or concatenate the # list in any way. - def write(key, negotiations) + def write(key, negotiations, ttl = nil) raise NotImplemented end @@ -187,7 +191,7 @@ def read(key) end end - def write(key, entries) + def write(key, entries, ttl = nil) @hash[key] = Marshal.dump(entries) end @@ -225,7 +229,7 @@ def read(key) [] end - def write(key, entries) + def write(key, entries, ttl = nil) tries = 0 begin path = key_path(key) @@ -324,9 +328,9 @@ def read(key) cache.get(key) || [] end - def write(key, entries) + def write(key, entries, ttl = 0) key = hexdigest(key) - cache.set(key, entries) + cache.set(key, entries, ttl) end def purge(key) @@ -358,9 +362,9 @@ def read(key) [] end - def write(key, entries) + def write(key, entries, ttl = 0) key = hexdigest(key) - cache.set(key, entries) + cache.set(key, entries, ttl) end def purge(key) diff --git a/test/metastore_test.rb b/test/metastore_test.rb index 775c4b9..49a63c0 100644 --- a/test/metastore_test.rb +++ b/test/metastore_test.rb @@ -251,6 +251,12 @@ def purge(*args); nil end @store.read(key).length.should.equal 2 end + + it 'takes a ttl parameter for #write' do + @store.write('/test', [[{},{}],[{},{}]], 0) + tuples = @store.read('/test') + tuples.should.equal [ [{},{}], [{},{}] ] + end end