varnish_sweeper 0.0.6 → 0.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.
- data/Gemfile +2 -1
- data/Gemfile.lock +2 -0
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/lib/varnish.rb +9 -3
- data/spec/spec_helper.rb +20 -14
- data/spec/varnish_sweeper/varnish_spec.rb +60 -0
- data/spec/{varnish_sweeper_spec.rb → varnish_sweeper/varnish_sweeper_spec.rb} +1 -1
- data/varnish_sweeper.gemspec +15 -11
- metadata +66 -36
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activesupport (2.3.10)
|
4
5
|
curb (0.7.9)
|
5
6
|
diff-lcs (1.1.2)
|
6
7
|
git (1.2.5)
|
@@ -44,6 +45,7 @@ PLATFORMS
|
|
44
45
|
ruby
|
45
46
|
|
46
47
|
DEPENDENCIES
|
48
|
+
activesupport (= 2.3.10)
|
47
49
|
bundler (~> 1.0.0)
|
48
50
|
curb
|
49
51
|
jeweler (~> 1.5.0.pre6)
|
data/Rakefile
CHANGED
@@ -13,12 +13,12 @@ require 'jeweler'
|
|
13
13
|
Jeweler::Tasks.new do |gem|
|
14
14
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
15
|
gem.name = "varnish_sweeper"
|
16
|
-
gem.homepage = "http://github.com/
|
16
|
+
gem.homepage = "http://github.com/moviepilot/varnish_sweeper"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{A few helper functions that help caching web pages}
|
19
|
-
gem.description = %Q{
|
20
|
-
gem.email = "
|
21
|
-
gem.authors = ["Daniel Bornkessel"]
|
18
|
+
gem.summary = %Q{A few helper functions that help caching and sweeping web pages using varnish}
|
19
|
+
gem.description = %Q{A few helper functions that help caching and sweeping web pages using varnish}
|
20
|
+
gem.email = "developers@moviepilot.com"
|
21
|
+
gem.authors = ["Daniel Bornkessel", "Tim Bleck"]
|
22
22
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
23
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
24
|
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/varnish.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module Varnish
|
2
|
+
|
2
3
|
def make_cacheable(options = {})
|
3
4
|
if should_be_cached?(options)
|
4
5
|
headers['Cache-Control'] = cache_control_text(options)
|
@@ -9,15 +10,20 @@ module Varnish
|
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
12
|
-
def sweep_cache_for(obj)
|
13
|
+
def sweep_cache_for(obj, options = {})
|
13
14
|
return unless obj
|
14
15
|
if cache_data = Rails.cache.read( varnish_cache_key(obj) )
|
15
16
|
Rails.cache.delete( varnish_cache_key(obj) )
|
16
|
-
|
17
|
+
if options[:instant]
|
18
|
+
SweeperJob.perform(cache_data[:urls])
|
19
|
+
else
|
20
|
+
Resque.enqueue(SweeperJob, cache_data[:urls])
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
20
|
-
protected
|
25
|
+
protected
|
26
|
+
|
21
27
|
def cache_control_text(options)
|
22
28
|
return unless should_be_cached?(options)
|
23
29
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,21 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
require 'rack'
|
4
|
+
require 'ostruct'
|
5
|
+
require "active_support"
|
6
|
+
require 'varnish_sweeper'
|
7
|
+
|
1
8
|
class ApplicationController
|
2
|
-
|
9
|
+
include Varnish
|
3
10
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
11
|
+
def headers
|
12
|
+
@headers ||= {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def request
|
16
|
+
@request ||= OpenStruct.new(:headers => {})
|
8
17
|
end
|
9
|
-
end
|
10
18
|
|
19
|
+
end
|
11
20
|
|
12
|
-
|
13
|
-
require 'rspec'
|
21
|
+
class Rails
|
14
22
|
|
15
|
-
|
16
|
-
|
17
|
-
|
23
|
+
def self.cache
|
24
|
+
@@cache ||= ActiveSupport::Cache::MemoryStore.new
|
25
|
+
end
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
27
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Varnish do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@controller = ApplicationController.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :make_cachable do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@controller.request.headers['X_VARNISH'] = 'Varnish'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should set the Cache-Control header to private if the option private is set" do
|
16
|
+
@controller.make_cacheable(:private => true, :s_max_age => 3600)
|
17
|
+
@controller.headers["Cache-Control"].should == 'private, s-maxage=3600'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should set the Cache-Control header to public including the given s_max_age" do
|
21
|
+
@controller.make_cacheable(:s_max_age => 3600)
|
22
|
+
@controller.headers["Cache-Control"].should == 'public, s-maxage=3600'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set the Cache-Control header to public including the given max_age" do
|
26
|
+
@controller.make_cacheable(:max_age => 3600)
|
27
|
+
@controller.headers["Cache-Control"].should == 'public, max-age=3600'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe :sweep_cache_for do
|
33
|
+
|
34
|
+
before do
|
35
|
+
@obj = mock('Model')
|
36
|
+
@controller.stub!(:varnish_cache_key).with(@obj).and_return("cache_key")
|
37
|
+
Rails.cache.write("cache_key", :urls => ["cached_url"])
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'asynchronous sweeping (default)' do
|
41
|
+
|
42
|
+
it "should enqueue the sweeping job with resque" do
|
43
|
+
Resque.should_receive(:enqueue).with(SweeperJob, ["cached_url"])
|
44
|
+
@controller.sweep_cache_for(@obj)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'instant sweeping (with option :instant => true)' do
|
50
|
+
|
51
|
+
it "should sweep the cache instantly" do
|
52
|
+
SweeperJob.should_receive(:perform).with(["cached_url"])
|
53
|
+
@controller.sweep_cache_for(@obj, :instant => true)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/varnish_sweeper.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{varnish_sweeper}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Daniel Bornkessel"]
|
12
|
-
s.date = %q{2011-
|
13
|
-
s.description = %q{
|
14
|
-
s.email = %q{
|
11
|
+
s.authors = ["Daniel Bornkessel", "Tim Bleck"]
|
12
|
+
s.date = %q{2011-03-31}
|
13
|
+
s.description = %q{A few helper functions that help caching and sweeping web pages using varnish}
|
14
|
+
s.email = %q{developers@moviepilot.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
@@ -29,27 +29,29 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/varnish.rb",
|
30
30
|
"lib/varnish_sweeper.rb",
|
31
31
|
"spec/spec_helper.rb",
|
32
|
-
"spec/
|
32
|
+
"spec/varnish_sweeper/varnish_spec.rb",
|
33
|
+
"spec/varnish_sweeper/varnish_sweeper_spec.rb",
|
33
34
|
"varnish_sweeper.gemspec"
|
34
35
|
]
|
35
|
-
s.homepage = %q{http://github.com/
|
36
|
+
s.homepage = %q{http://github.com/moviepilot/varnish_sweeper}
|
36
37
|
s.licenses = ["MIT"]
|
37
38
|
s.require_paths = ["lib"]
|
38
|
-
s.rubygems_version = %q{1.
|
39
|
-
s.summary = %q{A few helper functions that help caching web pages}
|
39
|
+
s.rubygems_version = %q{1.5.2}
|
40
|
+
s.summary = %q{A few helper functions that help caching and sweeping web pages using varnish}
|
40
41
|
s.test_files = [
|
41
42
|
"spec/spec_helper.rb",
|
42
|
-
"spec/
|
43
|
+
"spec/varnish_sweeper/varnish_spec.rb",
|
44
|
+
"spec/varnish_sweeper/varnish_sweeper_spec.rb"
|
43
45
|
]
|
44
46
|
|
45
47
|
if s.respond_to? :specification_version then
|
46
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
48
|
s.specification_version = 3
|
48
49
|
|
49
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
51
|
s.add_runtime_dependency(%q<resque>, [">= 0"])
|
51
52
|
s.add_runtime_dependency(%q<resque-loner>, [">= 0"])
|
52
53
|
s.add_runtime_dependency(%q<curb>, [">= 0"])
|
54
|
+
s.add_runtime_dependency(%q<activesupport>, ["= 2.3.10"])
|
53
55
|
s.add_development_dependency(%q<rspec>, ["~> 2.0.0"])
|
54
56
|
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
55
57
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -59,6 +61,7 @@ Gem::Specification.new do |s|
|
|
59
61
|
s.add_dependency(%q<resque>, [">= 0"])
|
60
62
|
s.add_dependency(%q<resque-loner>, [">= 0"])
|
61
63
|
s.add_dependency(%q<curb>, [">= 0"])
|
64
|
+
s.add_dependency(%q<activesupport>, ["= 2.3.10"])
|
62
65
|
s.add_dependency(%q<rspec>, ["~> 2.0.0"])
|
63
66
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
64
67
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -69,6 +72,7 @@ Gem::Specification.new do |s|
|
|
69
72
|
s.add_dependency(%q<resque>, [">= 0"])
|
70
73
|
s.add_dependency(%q<resque-loner>, [">= 0"])
|
71
74
|
s.add_dependency(%q<curb>, [">= 0"])
|
75
|
+
s.add_dependency(%q<activesupport>, ["= 2.3.10"])
|
72
76
|
s.add_dependency(%q<rspec>, ["~> 2.0.0"])
|
73
77
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
74
78
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
metadata
CHANGED
@@ -1,137 +1,164 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: varnish_sweeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
8
|
+
- 1
|
7
9
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.6
|
10
|
+
version: 0.1.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Daniel Bornkessel
|
14
|
+
- Tim Bleck
|
13
15
|
autorequire:
|
14
16
|
bindir: bin
|
15
17
|
cert_chain: []
|
16
18
|
|
17
|
-
date: 2011-
|
19
|
+
date: 2011-03-31 00:00:00 +02:00
|
18
20
|
default_executable:
|
19
21
|
dependencies:
|
20
22
|
- !ruby/object:Gem::Dependency
|
21
23
|
name: resque
|
22
|
-
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
25
|
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
30
|
-
type: :runtime
|
31
33
|
prerelease: false
|
32
|
-
|
34
|
+
type: :runtime
|
35
|
+
requirement: *id001
|
33
36
|
- !ruby/object:Gem::Dependency
|
34
37
|
name: resque-loner
|
35
|
-
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
36
39
|
none: false
|
37
40
|
requirements:
|
38
41
|
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
40
44
|
segments:
|
41
45
|
- 0
|
42
46
|
version: "0"
|
43
|
-
type: :runtime
|
44
47
|
prerelease: false
|
45
|
-
|
48
|
+
type: :runtime
|
49
|
+
requirement: *id002
|
46
50
|
- !ruby/object:Gem::Dependency
|
47
51
|
name: curb
|
48
|
-
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
49
53
|
none: false
|
50
54
|
requirements:
|
51
55
|
- - ">="
|
52
56
|
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
53
58
|
segments:
|
54
59
|
- 0
|
55
60
|
version: "0"
|
61
|
+
prerelease: false
|
56
62
|
type: :runtime
|
63
|
+
requirement: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: activesupport
|
66
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - "="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 23
|
72
|
+
segments:
|
73
|
+
- 2
|
74
|
+
- 3
|
75
|
+
- 10
|
76
|
+
version: 2.3.10
|
57
77
|
prerelease: false
|
58
|
-
|
78
|
+
type: :runtime
|
79
|
+
requirement: *id004
|
59
80
|
- !ruby/object:Gem::Dependency
|
60
81
|
name: rspec
|
61
|
-
|
82
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
62
83
|
none: false
|
63
84
|
requirements:
|
64
85
|
- - ~>
|
65
86
|
- !ruby/object:Gem::Version
|
87
|
+
hash: 15
|
66
88
|
segments:
|
67
89
|
- 2
|
68
90
|
- 0
|
69
91
|
- 0
|
70
92
|
version: 2.0.0
|
71
|
-
type: :development
|
72
93
|
prerelease: false
|
73
|
-
|
94
|
+
type: :development
|
95
|
+
requirement: *id005
|
74
96
|
- !ruby/object:Gem::Dependency
|
75
97
|
name: yard
|
76
|
-
|
98
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
77
99
|
none: false
|
78
100
|
requirements:
|
79
101
|
- - ~>
|
80
102
|
- !ruby/object:Gem::Version
|
103
|
+
hash: 7
|
81
104
|
segments:
|
82
105
|
- 0
|
83
106
|
- 6
|
84
107
|
- 0
|
85
108
|
version: 0.6.0
|
86
|
-
type: :development
|
87
109
|
prerelease: false
|
88
|
-
|
110
|
+
type: :development
|
111
|
+
requirement: *id006
|
89
112
|
- !ruby/object:Gem::Dependency
|
90
113
|
name: bundler
|
91
|
-
|
114
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
92
115
|
none: false
|
93
116
|
requirements:
|
94
117
|
- - ~>
|
95
118
|
- !ruby/object:Gem::Version
|
119
|
+
hash: 23
|
96
120
|
segments:
|
97
121
|
- 1
|
98
122
|
- 0
|
99
123
|
- 0
|
100
124
|
version: 1.0.0
|
101
|
-
type: :development
|
102
125
|
prerelease: false
|
103
|
-
|
126
|
+
type: :development
|
127
|
+
requirement: *id007
|
104
128
|
- !ruby/object:Gem::Dependency
|
105
129
|
name: jeweler
|
106
|
-
|
130
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
107
131
|
none: false
|
108
132
|
requirements:
|
109
133
|
- - ~>
|
110
134
|
- !ruby/object:Gem::Version
|
135
|
+
hash: 1923832021
|
111
136
|
segments:
|
112
137
|
- 1
|
113
138
|
- 5
|
114
139
|
- 0
|
115
|
-
-
|
140
|
+
- pre
|
141
|
+
- 6
|
116
142
|
version: 1.5.0.pre6
|
117
|
-
type: :development
|
118
143
|
prerelease: false
|
119
|
-
|
144
|
+
type: :development
|
145
|
+
requirement: *id008
|
120
146
|
- !ruby/object:Gem::Dependency
|
121
147
|
name: rcov
|
122
|
-
|
148
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
123
149
|
none: false
|
124
150
|
requirements:
|
125
151
|
- - ">="
|
126
152
|
- !ruby/object:Gem::Version
|
153
|
+
hash: 3
|
127
154
|
segments:
|
128
155
|
- 0
|
129
156
|
version: "0"
|
130
|
-
type: :development
|
131
157
|
prerelease: false
|
132
|
-
|
133
|
-
|
134
|
-
|
158
|
+
type: :development
|
159
|
+
requirement: *id009
|
160
|
+
description: A few helper functions that help caching and sweeping web pages using varnish
|
161
|
+
email: developers@moviepilot.com
|
135
162
|
executables: []
|
136
163
|
|
137
164
|
extensions: []
|
@@ -152,10 +179,11 @@ files:
|
|
152
179
|
- lib/varnish.rb
|
153
180
|
- lib/varnish_sweeper.rb
|
154
181
|
- spec/spec_helper.rb
|
155
|
-
- spec/
|
182
|
+
- spec/varnish_sweeper/varnish_spec.rb
|
183
|
+
- spec/varnish_sweeper/varnish_sweeper_spec.rb
|
156
184
|
- varnish_sweeper.gemspec
|
157
185
|
has_rdoc: true
|
158
|
-
homepage: http://github.com/
|
186
|
+
homepage: http://github.com/moviepilot/varnish_sweeper
|
159
187
|
licenses:
|
160
188
|
- MIT
|
161
189
|
post_install_message:
|
@@ -168,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
196
|
requirements:
|
169
197
|
- - ">="
|
170
198
|
- !ruby/object:Gem::Version
|
171
|
-
hash:
|
199
|
+
hash: 3
|
172
200
|
segments:
|
173
201
|
- 0
|
174
202
|
version: "0"
|
@@ -177,16 +205,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
205
|
requirements:
|
178
206
|
- - ">="
|
179
207
|
- !ruby/object:Gem::Version
|
208
|
+
hash: 3
|
180
209
|
segments:
|
181
210
|
- 0
|
182
211
|
version: "0"
|
183
212
|
requirements: []
|
184
213
|
|
185
214
|
rubyforge_project:
|
186
|
-
rubygems_version: 1.
|
215
|
+
rubygems_version: 1.5.2
|
187
216
|
signing_key:
|
188
217
|
specification_version: 3
|
189
|
-
summary: A few helper functions that help caching web pages
|
218
|
+
summary: A few helper functions that help caching and sweeping web pages using varnish
|
190
219
|
test_files:
|
191
220
|
- spec/spec_helper.rb
|
192
|
-
- spec/
|
221
|
+
- spec/varnish_sweeper/varnish_spec.rb
|
222
|
+
- spec/varnish_sweeper/varnish_sweeper_spec.rb
|