rack-cache 0.5.3 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rack-cache might be problematic. Click here for more details.

data/CHANGES CHANGED
@@ -1,4 +1,28 @@
1
- ## 0.6.0 / Unreleased
1
+ ## 1.0 / December 2010
2
+
3
+ * Rack::Cache is 1.0 and will now maintain semantic versioning <http://semver.org/>
4
+
5
+ * Add Dalli memcache client support and removed support for the unmaintained
6
+ memcache-client library. You will need to move your apps to Dalli before
7
+ upgrading rack-cache to 1.0.
8
+
9
+ ## 0.5.3 / September 2010
10
+
11
+ * A matching If-Modified-Since is ignored if an If-None-Match is also provided
12
+ and doesn't match. This is in line with RFC 2616.
13
+
14
+ * Converts string status codes to integers before returns to workaround bad
15
+ behaving rack middleware and apps.
16
+
17
+ * Misc doc clean up.
18
+
19
+ ## 0.5.2 / September 2009
20
+
21
+ * Exceptions raised from the metastore are not fatal. This makes a lot of
22
+ sense in most cases because its okay for the cache to be down - it
23
+ shouldn't blow up your app.
24
+
25
+ ## 0.5.1 / June 2009
2
26
 
3
27
  * Added support for memcached clusters and other advanced
4
28
  configuration provided by the memcache-client and memcached
data/README CHANGED
@@ -75,6 +75,22 @@ See the following for more information:
75
75
 
76
76
  http://snippets.aktagon.com/snippets/302
77
77
 
78
+ Using with Dalli
79
+ ----------------
80
+
81
+ Dalli is a high performance memcached client for Ruby.
82
+ More information at: https://github.com/mperham/dalli
83
+
84
+ require 'dalli'
85
+ require 'rack/cache'
86
+
87
+ use Rack::Cache,
88
+ :verbose => true,
89
+ :metastore => "memcached://localhost:11211/meta",
90
+ :entitystore => "memcached://localhost:11211/body"
91
+
92
+ run app
93
+
78
94
  Links
79
95
  -----
80
96
 
@@ -182,11 +182,12 @@ module Rack
182
182
  private
183
183
  def parse(value)
184
184
  return if value.nil? || value.empty?
185
- value.delete(' ').split(',').inject(self) do |hash,part|
185
+ value.delete(' ').split(',').each do |part|
186
+ next if part.empty?
186
187
  name, value = part.split('=', 2)
187
- hash[name.downcase] = (value || true) unless name.empty?
188
- hash
188
+ self[name.downcase] = (value || true) unless name.empty?
189
189
  end
190
+ self
190
191
  end
191
192
  end
192
193
  end
@@ -204,16 +204,16 @@ module Rack::Cache
204
204
  end
205
205
  end
206
206
 
207
- # Uses the memcache-client ruby library. This is the default unless
207
+ # Uses the Dalli ruby library. This is the default unless
208
208
  # the memcached library has already been required.
209
- class MemCache < MemCacheBase
209
+ class Dalli < MemCacheBase
210
210
  def initialize(server="localhost:11211", options={})
211
211
  @cache =
212
212
  if server.respond_to?(:stats)
213
213
  server
214
214
  else
215
- require 'memcache'
216
- ::MemCache.new(server, options)
215
+ require 'dalli'
216
+ ::Dalli::Client.new(server, options)
217
217
  end
218
218
  end
219
219
 
@@ -284,7 +284,7 @@ module Rack::Cache
284
284
  if defined?(::Memcached)
285
285
  MemCached
286
286
  else
287
- MemCache
287
+ Dalli
288
288
  end
289
289
 
290
290
  MEMCACHED = MEMCACHE
@@ -301,14 +301,14 @@ module Rack::Cache
301
301
  end
302
302
  end
303
303
 
304
- class MemCache < MemCacheBase
304
+ class Dalli < MemCacheBase
305
305
  def initialize(server="localhost:11211", options={})
306
306
  @cache =
307
307
  if server.respond_to?(:stats)
308
308
  server
309
309
  else
310
- require 'memcache'
311
- ::MemCache.new(server, options)
310
+ require 'dalli'
311
+ ::Dalli::Client.new(server, options)
312
312
  end
313
313
  end
314
314
 
@@ -368,7 +368,7 @@ module Rack::Cache
368
368
  if defined?(::Memcached)
369
369
  MemCached
370
370
  else
371
- MemCache
371
+ Dalli
372
372
  end
373
373
  MEMCACHED = MEMCACHE
374
374
 
@@ -39,11 +39,11 @@ module Rack::Cache
39
39
  fail "Unknown storage provider: #{uri.to_s}"
40
40
  end
41
41
  else
42
- # hack in support for passing a MemCache or Memcached object
42
+ # hack in support for passing a Dalli::Client or Memcached object
43
43
  # as the storage URI.
44
44
  case
45
- when defined?(::MemCache) && uri.kind_of?(::MemCache)
46
- type.const_get(:MemCache).resolve(uri)
45
+ when defined?(::Dalli) && uri.kind_of?(::Dalli::Client)
46
+ type.const_get(:Dalli).resolve(uri)
47
47
  when defined?(::Memcached) && uri.respond_to?(:stats)
48
48
  type.const_get(:MemCached).resolve(uri)
49
49
  else
data/rack-cache.gemspec CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
 
5
5
  s.name = 'rack-cache'
6
- s.version = '0.5.3'
7
- s.date = '2010-09-10'
6
+ s.version = '1.0'
7
+ s.date = '2010-12-24'
8
8
 
9
9
  s.description = "HTTP Caching for Rack"
10
10
  s.summary = "HTTP Caching for Rack"
@@ -62,11 +62,12 @@ Gem::Specification.new do |s|
62
62
  s.add_dependency 'rack', '>= 0.4'
63
63
 
64
64
  s.add_development_dependency 'test-spec'
65
+ s.add_development_dependency 'memcached'
66
+ s.add_development_dependency 'dalli'
65
67
 
66
68
  s.has_rdoc = true
67
69
  s.homepage = "http://tomayko.com/src/rack-cache/"
68
70
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rack::Cache", "--main", "Rack::Cache"]
69
71
  s.require_paths = %w[lib]
70
- s.rubyforge_project = 'wink'
71
72
  s.rubygems_version = '1.1.1'
72
73
  end
@@ -49,6 +49,12 @@ describe 'Rack::Cache::CacheControl' do
49
49
  cache_control['max-age'].should.equal '600'
50
50
  end
51
51
 
52
+ it 'strips blank segments' do
53
+ cache_control = Rack::Cache::CacheControl.new('max-age=600,,max-stale=300')
54
+ cache_control['max-age'].should.equal '600'
55
+ cache_control['max-stale'].should.equal '300'
56
+ end
57
+
52
58
  it 'removes all directives with #clear' do
53
59
  cache_control = Rack::Cache::CacheControl.new('max-age=600, must-revalidate')
54
60
  cache_control.clear
@@ -188,12 +188,12 @@ describe 'Rack::Cache::EntityStore' do
188
188
  end
189
189
 
190
190
 
191
- need_memcache 'entity store tests' do
192
- describe 'MemCache' do
191
+ need_dalli 'entity store tests' do
192
+ describe 'Dalli' do
193
193
  it_should_behave_like 'A Rack::Cache::EntityStore Implementation'
194
194
  before do
195
- $memcache.flush_all
196
- @store = Rack::Cache::EntityStore::MemCache.new($memcache)
195
+ $dalli.flush_all
196
+ @store = Rack::Cache::EntityStore::Dalli.new($dalli)
197
197
  end
198
198
  after do
199
199
  @store = nil
@@ -261,13 +261,13 @@ describe 'Rack::Cache::MetaStore' do
261
261
  end
262
262
  end
263
263
 
264
- need_memcache 'metastore tests' do
265
- describe 'MemCache' do
264
+ need_dalli 'metastore tests' do
265
+ describe 'Dalli' do
266
266
  it_should_behave_like 'A Rack::Cache::MetaStore Implementation'
267
267
  before :each do
268
268
  @temp_dir = create_temp_directory
269
- $memcache.flush_all
270
- @store = Rack::Cache::MetaStore::MemCache.new($memcache)
269
+ $dalli.flush_all
270
+ @store = Rack::Cache::MetaStore::Dalli.new($dalli)
271
271
  @entity_store = Rack::Cache::EntityStore::Heap.new
272
272
  end
273
273
  end
data/test/spec_setup.rb CHANGED
@@ -15,7 +15,7 @@ end
15
15
  # of the MemCached meta and entity stores.
16
16
  ENV['MEMCACHED'] ||= 'localhost:11211'
17
17
  $memcached = nil
18
- $memcache = nil
18
+ $dalli = nil
19
19
 
20
20
  def have_memcached?(server=ENV['MEMCACHED'])
21
21
  return $memcached unless $memcached.nil?
@@ -36,36 +36,36 @@ end
36
36
 
37
37
  have_memcached?
38
38
 
39
- def have_memcache?(server=ENV['MEMCACHED'])
40
- return $memcache unless $memcache.nil?
41
- require 'memcache'
42
- $memcache = MemCache.new(server)
43
- $memcache.set('ping', '')
39
+ def have_dalli?(server=ENV['MEMCACHED'])
40
+ return $dalli unless $dalli.nil?
41
+ require 'dalli'
42
+ $dalli = Dalli::Client.new(server)
43
+ $dalli.set('ping', '')
44
44
  true
45
45
  rescue LoadError => boom
46
- $memcache = false
46
+ $dalli = false
47
47
  false
48
48
  rescue => boom
49
- STDERR.puts "memcache not working. related tests will be skipped."
50
- $memcache = false
49
+ STDERR.puts "dalli not working. related tests will be skipped."
50
+ $dalli = false
51
51
  false
52
52
  end
53
53
 
54
- have_memcache?
54
+ have_dalli?
55
55
 
56
- def need_memcached(forwhat)
57
- if have_memcached?
56
+ def need_dalli(forwhat)
57
+ if have_dalli?
58
58
  yield
59
59
  else
60
- STDERR.puts "skipping memcached #{forwhat}"
60
+ STDERR.puts "skipping Dalli #{forwhat}"
61
61
  end
62
62
  end
63
63
 
64
- def need_memcache(forwhat)
65
- if have_memcache?
64
+ def need_memcached(forwhat)
65
+ if have_memcached?
66
66
  yield
67
67
  else
68
- STDERR.puts "skipping memcache #{forwhat}"
68
+ STDERR.puts "skipping memcached #{forwhat}"
69
69
  end
70
70
  end
71
71
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-cache
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 5
9
- - 3
10
- version: 0.5.3
9
+ version: "1.0"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Ryan Tomayko
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-09-10 00:00:00 -07:00
17
+ date: 2010-12-24 00:00:00 -08:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -47,6 +46,34 @@ dependencies:
47
46
  version: "0"
48
47
  type: :development
49
48
  version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: memcached
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: dalli
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
50
77
  description: HTTP Caching for Rack
51
78
  email: r@tomayko.com
52
79
  executables: []
@@ -132,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
159
  version: "0"
133
160
  requirements: []
134
161
 
135
- rubyforge_project: wink
162
+ rubyforge_project:
136
163
  rubygems_version: 1.3.7
137
164
  signing_key:
138
165
  specification_version: 2