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 +4 -0
- data/README.md +1 -0
- data/beats-rack.gemspec +2 -0
- data/lib/beats/rack.rb +1 -0
- data/lib/beats/rack/cache.rb +41 -0
- data/lib/beats/version.rb +1 -1
- data/test/cache_test.rb +29 -0
- metadata +37 -12
data/HISTORY.md
CHANGED
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
@@ -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
data/test/cache_test.rb
ADDED
@@ -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.
|
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
|
+
date: 2012-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: goliath
|
16
|
-
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: *
|
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: &
|
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: *
|
57
|
+
version_requirements: *70121402432080
|
36
58
|
- !ruby/object:Gem::Dependency
|
37
59
|
name: yard
|
38
|
-
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: *
|
68
|
+
version_requirements: *70121402431640
|
47
69
|
- !ruby/object:Gem::Dependency
|
48
70
|
name: redcarpet
|
49
|
-
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: *
|
79
|
+
version_requirements: *70121402431160
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: github-markup
|
60
|
-
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: *
|
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
|