beats-rack 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.md CHANGED
@@ -1,4 +1,8 @@
1
1
 
2
+ ### 0.2.0 (2012-04-16)
3
+
4
+ * Added a monkey patched version of rack-cache
5
+
2
6
  ### 0.1.0 (2012-04-12)
3
7
 
4
8
  * Added a CORS middleware
data/README.md CHANGED
@@ -5,3 +5,4 @@ An assorted collection of Goliath compatible Rack middleware.
5
5
 
6
6
  * Beats::Rack::Cors - Adds Cross-Origin Resource Sharing headers for cross-domain Ajax calls.
7
7
  * Beats::Rack::NoCache - Adds cache headers that tells clients that the response should never be cached.
8
+ * Beats::Rack::Cache - Monkey patched version of Rack::Cache that works with Goliath.
data/beats-rack.gemspec CHANGED
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency 'goliath'
20
+ s.add_dependency 'rack-cache'
21
+ s.add_dependency 'dalli'
20
22
  s.add_development_dependency 'rake'
21
23
  s.add_development_dependency 'yard'
22
24
  s.add_development_dependency 'redcarpet'
data/lib/beats/rack.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require 'rubygems'
2
+ require 'beats/rack/cache'
2
3
  require 'beats/rack/cors'
3
4
  require 'beats/rack/no_cache'
@@ -0,0 +1,41 @@
1
+ require 'rack-cache'
2
+ require 'goliath/rack'
3
+ require 'async-rack'
4
+
5
+ module Rack::Cache
6
+ class Context
7
+ include AsyncRack::AsyncCallback::Mixin
8
+
9
+ def async_callback(result)
10
+ response = Response.new(*result)
11
+ @request ||= Request.new(env.dup.freeze)
12
+ store response if response.cacheable?
13
+ super result
14
+ end
15
+
16
+ def call(env)
17
+ setup_async env
18
+ if env['rack.run_once']
19
+ call! env
20
+ else
21
+ clone.call! env
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ module Beats
28
+ module Rack
29
+ class Cache < ::Rack::Cache::Context
30
+
31
+ def initialize(app, options={}, &b)
32
+ options = {
33
+ :metastore => ENV['MEMCACHE_SERVERS'] ? "memcache://#{ENV['MEMCACHE_SERVERS']}/meta" : 'heap:/',
34
+ :entitystore => ENV['MEMCACHE_SERVERS'] ? "memcache://#{ENV['MEMCACHE_SERVERS']}/body" : 'heap:/'
35
+ }.merge(options)
36
+ super(app, options, &b)
37
+ end
38
+
39
+ end
40
+ end
41
+ end
data/lib/beats/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Beats
2
2
  module Rack
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,29 @@
1
+ require File.expand_path('test/test_helper')
2
+
3
+ class CacheTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @app = lambda do |env|
7
+ [200, { 'X-Test' => 'test', 'Cache-Control' => 'max-age=3600' }, ['test']]
8
+ end
9
+ @env = Goliath::Env.new
10
+ @env['PATH_INFO'] = '/'
11
+ @env['REQUEST_METHOD'] = 'GET'
12
+ end
13
+
14
+ def test_should_cache_the_response
15
+ res = Beats::Rack::Cache.new(@app, :verbose => false).call(@env)
16
+ assert_equal 200, res[0]
17
+ assert_equal 'test', res[1]['X-Test']
18
+ assert_equal 'max-age=3600', res[1]['Cache-Control']
19
+ assert_equal 'miss, store', res[1]['X-Rack-Cache']
20
+ assert_equal ['test'], res[2]
21
+ res = Beats::Rack::Cache.new(@app, :verbose => false).call(@env)
22
+ assert_equal 200, res[0]
23
+ assert_equal 'test', res[1]['X-Test']
24
+ assert_equal 'max-age=3600', res[1]['Cache-Control']
25
+ assert_equal 'fresh', res[1]['X-Rack-Cache']
26
+ assert_equal ['test'], res[2]
27
+ end
28
+
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beats-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-12 00:00:00.000000000 Z
12
+ date: 2012-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: goliath
16
- requirement: &70107904959620 !ruby/object:Gem::Requirement
16
+ requirement: &70121402433840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,32 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70107904959620
24
+ version_requirements: *70121402433840
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack-cache
27
+ requirement: &70121402433160 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70121402433160
36
+ - !ruby/object:Gem::Dependency
37
+ name: dalli
38
+ requirement: &70121402432620 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70121402432620
25
47
  - !ruby/object:Gem::Dependency
26
48
  name: rake
27
- requirement: &70107904959200 !ruby/object:Gem::Requirement
49
+ requirement: &70121402432080 !ruby/object:Gem::Requirement
28
50
  none: false
29
51
  requirements:
30
52
  - - ! '>='
@@ -32,10 +54,10 @@ dependencies:
32
54
  version: '0'
33
55
  type: :development
34
56
  prerelease: false
35
- version_requirements: *70107904959200
57
+ version_requirements: *70121402432080
36
58
  - !ruby/object:Gem::Dependency
37
59
  name: yard
38
- requirement: &70107904958760 !ruby/object:Gem::Requirement
60
+ requirement: &70121402431640 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ! '>='
@@ -43,10 +65,10 @@ dependencies:
43
65
  version: '0'
44
66
  type: :development
45
67
  prerelease: false
46
- version_requirements: *70107904958760
68
+ version_requirements: *70121402431640
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: redcarpet
49
- requirement: &70107904958340 !ruby/object:Gem::Requirement
71
+ requirement: &70121402431160 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ! '>='
@@ -54,10 +76,10 @@ dependencies:
54
76
  version: '0'
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *70107904958340
79
+ version_requirements: *70121402431160
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: github-markup
60
- requirement: &70107904957920 !ruby/object:Gem::Requirement
82
+ requirement: &70121402430720 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ! '>='
@@ -65,7 +87,7 @@ dependencies:
65
87
  version: '0'
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *70107904957920
90
+ version_requirements: *70121402430720
69
91
  description: An assorted collection of Goliath compatible Rack middleware.
70
92
  email:
71
93
  - niklas@sutajio.se
@@ -82,9 +104,11 @@ files:
82
104
  - Rakefile
83
105
  - beats-rack.gemspec
84
106
  - lib/beats/rack.rb
107
+ - lib/beats/rack/cache.rb
85
108
  - lib/beats/rack/cors.rb
86
109
  - lib/beats/rack/no_cache.rb
87
110
  - lib/beats/version.rb
111
+ - test/cache_test.rb
88
112
  - test/cors_test.rb
89
113
  - test/no_cache_test.rb
90
114
  - test/test_helper.rb
@@ -113,6 +137,7 @@ signing_key:
113
137
  specification_version: 3
114
138
  summary: An assorted collection of Goliath compatible Rack middleware.
115
139
  test_files:
140
+ - test/cache_test.rb
116
141
  - test/cors_test.rb
117
142
  - test/no_cache_test.rb
118
143
  - test/test_helper.rb