beats-rack 0.1.0 → 0.2.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.
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