lacquer 0.5.8 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -5
- data/lib/generators/lacquer/templates/initializer.rb +33 -33
- data/lib/generators/lacquer/templates/varnish.vcl.erb +102 -102
- data/lib/lacquer/cache_utils.rb +3 -0
- data/lib/lacquer/sidekiq_worker.rb +11 -0
- data/lib/lacquer/version.rb +1 -1
- data/spec/lacquer/cache_control_spec.rb +1 -1
- data/spec/lacquer/cache_utils_spec.rb +15 -4
- data/spec/lacquer/delayed_job_job_spec.rb +2 -2
- data/spec/lacquer/resque_job_spec.rb +2 -2
- data/spec/lacquer/sidekiq_worker_spec.rb +15 -0
- data/spec/lacquer/varnish_spec.rb +28 -28
- data/spec/lacquer/varnishd_spec.rb +7 -7
- data/spec/spec_helper.rb +12 -0
- metadata +18 -29
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 67124eacec337f8d11e5e72c7a03d899b759d17a
|
4
|
+
data.tar.gz: a985a3d7fc01d062afc82d86c5c6c76fe45faffc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 40278b6b726c88845e9b9c411f1baae3020b36e6faac77b1ae08b295d34aba8e1607223c2127b728ef74c4fc284e8b9b71387eb66f16d4678fefda1c8a579e3f
|
7
|
+
data.tar.gz: 3522c1e552018600eec6b1a08c7c9a1e363013aa406ab2ad0c18adcba42b974235bf4aa1f683dbf4f2032d269b989d027255e7c5400f4045e3179289642583ea
|
data/.gitignore
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
*.gem
|
2
|
-
.bundle
|
3
|
-
.DS_Store
|
4
|
-
Gemfile.lock
|
5
|
-
pkg/*
|
1
|
+
*.gem
|
2
|
+
.bundle
|
3
|
+
.DS_Store
|
4
|
+
Gemfile.lock
|
5
|
+
pkg/*
|
@@ -1,33 +1,33 @@
|
|
1
|
-
Lacquer.configure do |config|
|
2
|
-
# Globally enable/disable cache
|
3
|
-
config.enable_cache = true
|
4
|
-
|
5
|
-
# Unless overridden in a controller or action, the default will be used
|
6
|
-
config.default_ttl = 1.week
|
7
|
-
|
8
|
-
# Can be :none, :delayed_job, :resque
|
9
|
-
config.job_backend = :none
|
10
|
-
|
11
|
-
# Array of Varnish servers to manage
|
12
|
-
config.varnish_servers << {
|
13
|
-
:host => "0.0.0.0", :port => 6082 # if you have authentication enabled, add :secret => "your secret"
|
14
|
-
}
|
15
|
-
|
16
|
-
# Number of retries
|
17
|
-
config.retries = 5
|
18
|
-
|
19
|
-
# Config handler (optional, if you use Hoptoad or another error tracking service)
|
20
|
-
# config.command_error_handler = lambda { |s| HoptoadNotifier.notify(s) }
|
21
|
-
|
22
|
-
|
23
|
-
### Varnish - 2.x / 3.x .. VCL-Changes
|
24
|
-
### https://www.varnish-cache.org/docs/trunk/installation/upgrade.html
|
25
|
-
|
26
|
-
# => Purge Command ( "url.purge" for Varnish 2.x .. "ban.url" for Varnish 3.x )
|
27
|
-
# => purges are now called bans in Varnish 3.x .. purge() and purge_url() are now respectively ban() and ban_url()
|
28
|
-
config.purge_command = "url.purge"
|
29
|
-
|
30
|
-
# => VCL_Fetch Pass Command ( "pass" for Varnish 2.x .. "hit_for_pass" for Varnish 3.x )
|
31
|
-
# => pass in vcl_fetch renamed to hit_for_pass in Varnish 3.x
|
32
|
-
config.pass_command = "pass"
|
33
|
-
end
|
1
|
+
Lacquer.configure do |config|
|
2
|
+
# Globally enable/disable cache
|
3
|
+
config.enable_cache = true
|
4
|
+
|
5
|
+
# Unless overridden in a controller or action, the default will be used
|
6
|
+
config.default_ttl = 1.week
|
7
|
+
|
8
|
+
# Can be :none, :delayed_job, :resque, :sidekiq
|
9
|
+
config.job_backend = :none
|
10
|
+
|
11
|
+
# Array of Varnish servers to manage
|
12
|
+
config.varnish_servers << {
|
13
|
+
:host => "0.0.0.0", :port => 6082 # if you have authentication enabled, add :secret => "your secret"
|
14
|
+
}
|
15
|
+
|
16
|
+
# Number of retries
|
17
|
+
config.retries = 5
|
18
|
+
|
19
|
+
# Config handler (optional, if you use Hoptoad or another error tracking service)
|
20
|
+
# config.command_error_handler = lambda { |s| HoptoadNotifier.notify(s) }
|
21
|
+
|
22
|
+
|
23
|
+
### Varnish - 2.x / 3.x .. VCL-Changes
|
24
|
+
### https://www.varnish-cache.org/docs/trunk/installation/upgrade.html
|
25
|
+
|
26
|
+
# => Purge Command ( "url.purge" for Varnish 2.x .. "ban.url" for Varnish 3.x )
|
27
|
+
# => purges are now called bans in Varnish 3.x .. purge() and purge_url() are now respectively ban() and ban_url()
|
28
|
+
config.purge_command = "url.purge"
|
29
|
+
|
30
|
+
# => VCL_Fetch Pass Command ( "pass" for Varnish 2.x .. "hit_for_pass" for Varnish 3.x )
|
31
|
+
# => pass in vcl_fetch renamed to hit_for_pass in Varnish 3.x
|
32
|
+
config.pass_command = "pass"
|
33
|
+
end
|
@@ -1,102 +1,102 @@
|
|
1
|
-
backend default {
|
2
|
-
.host = "<%= backend.split(':').first %>";
|
3
|
-
.port = "<%= backend.split(':').last %>";
|
4
|
-
}
|
5
|
-
|
6
|
-
# Handling of requests that are received from clients.
|
7
|
-
# First decide whether or not to lookup data in the cache.
|
8
|
-
sub vcl_recv {
|
9
|
-
# Pipe requests that are non-RFC2616 or CONNECT which is weird.
|
10
|
-
if (req.request != "GET" &&
|
11
|
-
req.request != "HEAD" &&
|
12
|
-
req.request != "PUT" &&
|
13
|
-
req.request != "POST" &&
|
14
|
-
req.request != "TRACE" &&
|
15
|
-
req.request != "OPTIONS" &&
|
16
|
-
req.request != "DELETE") {
|
17
|
-
return(pipe);
|
18
|
-
}
|
19
|
-
|
20
|
-
if (req.backend.healthy) {
|
21
|
-
set req.grace = 30s;
|
22
|
-
} else {
|
23
|
-
set req.grace = 1h;
|
24
|
-
}
|
25
|
-
|
26
|
-
# Pass requests that are not GET or HEAD
|
27
|
-
if (req.request != "GET" && req.request != "HEAD") {
|
28
|
-
return(pass);
|
29
|
-
}
|
30
|
-
|
31
|
-
# Handle compression correctly. Varnish treats headers literally, not
|
32
|
-
# semantically. So it is very well possible that there are cache misses
|
33
|
-
# because the headers sent by different browsers aren't the same.
|
34
|
-
# @see: http://varnish.projects.linpro.no/wiki/FAQ/Compression
|
35
|
-
if (req.http.Accept-Encoding) {
|
36
|
-
if (req.http.Accept-Encoding ~ "gzip") {
|
37
|
-
# if the browser supports it, we'll use gzip
|
38
|
-
set req.http.Accept-Encoding = "gzip";
|
39
|
-
} elsif (req.http.Accept-Encoding ~ "deflate") {
|
40
|
-
# next, try deflate if it is supported
|
41
|
-
set req.http.Accept-Encoding = "deflate";
|
42
|
-
} else {
|
43
|
-
# unknown algorithm. Probably junk, remove it
|
44
|
-
remove req.http.Accept-Encoding;
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
# Clear cookie and authorization headers, set grace time, lookup in the cache
|
49
|
-
unset req.http.Cookie;
|
50
|
-
unset req.http.Authorization;
|
51
|
-
return(lookup);
|
52
|
-
}
|
53
|
-
|
54
|
-
# Called when entering pipe mode
|
55
|
-
sub vcl_pipe {
|
56
|
-
# If we don't set the Connection: close header, any following
|
57
|
-
# requests from the client will also be piped through and
|
58
|
-
# left untouched by varnish. We don't want that.
|
59
|
-
set req.http.connection = "close";
|
60
|
-
return(pipe);
|
61
|
-
}
|
62
|
-
|
63
|
-
# Called when the requested object has been retrieved from the
|
64
|
-
# backend, or the request to the backend has failed
|
65
|
-
sub vcl_fetch {
|
66
|
-
# Set the grace time
|
67
|
-
set beresp.grace = 1h;
|
68
|
-
|
69
|
-
# Do not cache the object if the status is not in the 200s
|
70
|
-
if (beresp.status >= 300) {
|
71
|
-
# Remove the Set-Cookie header
|
72
|
-
remove beresp.http.Set-Cookie;
|
73
|
-
return(<%= Lacquer.configuration.pass_command %>);
|
74
|
-
}
|
75
|
-
|
76
|
-
# Do not cache the object if the backend application does not want us to.
|
77
|
-
if (beresp.http.Cache-Control ~ "(no-cache|no-store|private|must-revalidate)") {
|
78
|
-
return(<%= Lacquer.configuration.pass_command %>);
|
79
|
-
}
|
80
|
-
|
81
|
-
# Everything below here should be cached
|
82
|
-
|
83
|
-
# Remove the Set-Cookie header
|
84
|
-
remove beresp.http.Set-Cookie;
|
85
|
-
|
86
|
-
# Deliver the object
|
87
|
-
return(deliver);
|
88
|
-
}
|
89
|
-
|
90
|
-
# Called before the response is sent back to the client
|
91
|
-
sub vcl_deliver {
|
92
|
-
# Force browsers and intermediary caches to always check back with us
|
93
|
-
set resp.http.Cache-Control = "private, max-age=0, must-revalidate";
|
94
|
-
set resp.http.Pragma = "no-cache";
|
95
|
-
|
96
|
-
# Add a header to indicate a cache HIT/MISS
|
97
|
-
if (obj.hits > 0) {
|
98
|
-
set resp.http.X-Cache = "HIT";
|
99
|
-
} else {
|
100
|
-
set resp.http.X-Cache = "MISS";
|
101
|
-
}
|
102
|
-
}
|
1
|
+
backend default {
|
2
|
+
.host = "<%= backend.split(':').first %>";
|
3
|
+
.port = "<%= backend.split(':').last %>";
|
4
|
+
}
|
5
|
+
|
6
|
+
# Handling of requests that are received from clients.
|
7
|
+
# First decide whether or not to lookup data in the cache.
|
8
|
+
sub vcl_recv {
|
9
|
+
# Pipe requests that are non-RFC2616 or CONNECT which is weird.
|
10
|
+
if (req.request != "GET" &&
|
11
|
+
req.request != "HEAD" &&
|
12
|
+
req.request != "PUT" &&
|
13
|
+
req.request != "POST" &&
|
14
|
+
req.request != "TRACE" &&
|
15
|
+
req.request != "OPTIONS" &&
|
16
|
+
req.request != "DELETE") {
|
17
|
+
return(pipe);
|
18
|
+
}
|
19
|
+
|
20
|
+
if (req.backend.healthy) {
|
21
|
+
set req.grace = 30s;
|
22
|
+
} else {
|
23
|
+
set req.grace = 1h;
|
24
|
+
}
|
25
|
+
|
26
|
+
# Pass requests that are not GET or HEAD
|
27
|
+
if (req.request != "GET" && req.request != "HEAD") {
|
28
|
+
return(pass);
|
29
|
+
}
|
30
|
+
|
31
|
+
# Handle compression correctly. Varnish treats headers literally, not
|
32
|
+
# semantically. So it is very well possible that there are cache misses
|
33
|
+
# because the headers sent by different browsers aren't the same.
|
34
|
+
# @see: http://varnish.projects.linpro.no/wiki/FAQ/Compression
|
35
|
+
if (req.http.Accept-Encoding) {
|
36
|
+
if (req.http.Accept-Encoding ~ "gzip") {
|
37
|
+
# if the browser supports it, we'll use gzip
|
38
|
+
set req.http.Accept-Encoding = "gzip";
|
39
|
+
} elsif (req.http.Accept-Encoding ~ "deflate") {
|
40
|
+
# next, try deflate if it is supported
|
41
|
+
set req.http.Accept-Encoding = "deflate";
|
42
|
+
} else {
|
43
|
+
# unknown algorithm. Probably junk, remove it
|
44
|
+
remove req.http.Accept-Encoding;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
# Clear cookie and authorization headers, set grace time, lookup in the cache
|
49
|
+
unset req.http.Cookie;
|
50
|
+
unset req.http.Authorization;
|
51
|
+
return(lookup);
|
52
|
+
}
|
53
|
+
|
54
|
+
# Called when entering pipe mode
|
55
|
+
sub vcl_pipe {
|
56
|
+
# If we don't set the Connection: close header, any following
|
57
|
+
# requests from the client will also be piped through and
|
58
|
+
# left untouched by varnish. We don't want that.
|
59
|
+
set req.http.connection = "close";
|
60
|
+
return(pipe);
|
61
|
+
}
|
62
|
+
|
63
|
+
# Called when the requested object has been retrieved from the
|
64
|
+
# backend, or the request to the backend has failed
|
65
|
+
sub vcl_fetch {
|
66
|
+
# Set the grace time
|
67
|
+
set beresp.grace = 1h;
|
68
|
+
|
69
|
+
# Do not cache the object if the status is not in the 200s
|
70
|
+
if (beresp.status >= 300) {
|
71
|
+
# Remove the Set-Cookie header
|
72
|
+
remove beresp.http.Set-Cookie;
|
73
|
+
return(<%= Lacquer.configuration.pass_command %>);
|
74
|
+
}
|
75
|
+
|
76
|
+
# Do not cache the object if the backend application does not want us to.
|
77
|
+
if (beresp.http.Cache-Control ~ "(no-cache|no-store|private|must-revalidate)") {
|
78
|
+
return(<%= Lacquer.configuration.pass_command %>);
|
79
|
+
}
|
80
|
+
|
81
|
+
# Everything below here should be cached
|
82
|
+
|
83
|
+
# Remove the Set-Cookie header
|
84
|
+
remove beresp.http.Set-Cookie;
|
85
|
+
|
86
|
+
# Deliver the object
|
87
|
+
return(deliver);
|
88
|
+
}
|
89
|
+
|
90
|
+
# Called before the response is sent back to the client
|
91
|
+
sub vcl_deliver {
|
92
|
+
# Force browsers and intermediary caches to always check back with us
|
93
|
+
set resp.http.Cache-Control = "private, max-age=0, must-revalidate";
|
94
|
+
set resp.http.Pragma = "no-cache";
|
95
|
+
|
96
|
+
# Add a header to indicate a cache HIT/MISS
|
97
|
+
if (obj.hits > 0) {
|
98
|
+
set resp.http.X-Cache = "HIT";
|
99
|
+
} else {
|
100
|
+
set resp.http.X-Cache = "MISS";
|
101
|
+
}
|
102
|
+
}
|
data/lib/lacquer/cache_utils.rb
CHANGED
data/lib/lacquer/version.rb
CHANGED
@@ -16,7 +16,7 @@ describe Lacquer::CacheControl do
|
|
16
16
|
it "returns urls to expire for object" do
|
17
17
|
cache_control = described_class.new
|
18
18
|
cache_control.register :class_section, :url => "^/sv/class_sections/%s.*$", :args => "[0-9]+"
|
19
|
-
cache_control.urls_for(:class_section,
|
19
|
+
cache_control.urls_for(:class_section, double("ClassSection", :to_param => 1)).should == ["^/sv/class_sections/1.*$"]
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
2
|
require 'lacquer/delayed_job_job'
|
3
|
+
require 'lacquer/resque_job'
|
4
|
+
require 'lacquer/sidekiq_worker'
|
3
5
|
|
4
6
|
describe "Lacquer" do
|
5
7
|
before(:each) do
|
@@ -8,8 +10,8 @@ describe "Lacquer" do
|
|
8
10
|
|
9
11
|
describe "talking to varnish" do
|
10
12
|
before(:each) do
|
11
|
-
@varnish_stub =
|
12
|
-
Lacquer::Varnish.stub
|
13
|
+
@varnish_stub = double('varnish')
|
14
|
+
Lacquer::Varnish.stub(:new).and_return(@varnish_stub)
|
13
15
|
end
|
14
16
|
|
15
17
|
describe "when backend is :none" do
|
@@ -45,6 +47,15 @@ describe "Lacquer" do
|
|
45
47
|
@controller.clear_cache_for('/', '/blog/posts')
|
46
48
|
end
|
47
49
|
end
|
50
|
+
|
51
|
+
describe "when backend is :sidekiq" do
|
52
|
+
it "sends commands to a sidekiq queue" do
|
53
|
+
Lacquer.configuration.job_backend = :sidekiq
|
54
|
+
|
55
|
+
Lacquer::SidekiqWorker.should_receive(:perform_async).once
|
56
|
+
@controller.clear_cache_for('/', '/blog/posts')
|
57
|
+
end
|
58
|
+
end
|
48
59
|
end
|
49
60
|
|
50
61
|
describe "when cache is enabled" do
|
@@ -71,8 +82,8 @@ describe "Lacquer" do
|
|
71
82
|
end
|
72
83
|
|
73
84
|
it "should allow purge by non-controller sweepers" do
|
74
|
-
@varnish_stub =
|
75
|
-
Lacquer::Varnish.stub
|
85
|
+
@varnish_stub = double('varnish')
|
86
|
+
Lacquer::Varnish.stub(:new).and_return(@varnish_stub)
|
76
87
|
|
77
88
|
@sweeper = SweeperClass.new
|
78
89
|
|
@@ -5,8 +5,8 @@ describe "DelayedJobJob" do
|
|
5
5
|
it "should purge the parameter" do
|
6
6
|
require File.expand_path('lib/lacquer/delayed_job_job')
|
7
7
|
|
8
|
-
@varnish_mock =
|
9
|
-
Lacquer::Varnish.stub
|
8
|
+
@varnish_mock = double('varnish')
|
9
|
+
Lacquer::Varnish.stub(:new).and_return(@varnish_mock)
|
10
10
|
|
11
11
|
@varnish_mock.should_receive(:purge).with('/').exactly(1).times
|
12
12
|
Lacquer::DelayedJobJob.new('/').perform
|
@@ -5,8 +5,8 @@ describe "ResqueJob" do
|
|
5
5
|
it "should purge the parameter" do
|
6
6
|
require File.expand_path('lib/lacquer/resque_job')
|
7
7
|
|
8
|
-
@varnish_mock =
|
9
|
-
Lacquer::Varnish.stub
|
8
|
+
@varnish_mock = double('varnish')
|
9
|
+
Lacquer::Varnish.stub(:new).and_return(@varnish_mock)
|
10
10
|
|
11
11
|
@varnish_mock.should_receive(:purge).with('/').exactly(1).times
|
12
12
|
Lacquer::ResqueJob.perform('/')
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
|
+
|
3
|
+
describe "SidekiqWorker" do
|
4
|
+
describe "perform" do
|
5
|
+
it "should purge the parameter" do
|
6
|
+
require File.expand_path('lib/lacquer/sidekiq_worker')
|
7
|
+
|
8
|
+
@varnish_mock = double('varnish')
|
9
|
+
Lacquer::Varnish.stub(:new).and_return(@varnish_mock)
|
10
|
+
|
11
|
+
@varnish_mock.should_receive(:purge).with('/').exactly(1).times
|
12
|
+
Lacquer::SidekiqWorker.new.perform('/')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -2,30 +2,30 @@ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
|
2
2
|
|
3
3
|
describe "Varnish" do
|
4
4
|
before(:each) do
|
5
|
-
@telnet_mock =
|
6
|
-
Net::Telnet.stub
|
7
|
-
@telnet_mock.stub
|
8
|
-
@telnet_mock.stub
|
9
|
-
@telnet_mock.stub
|
10
|
-
@telnet_mock.stub
|
5
|
+
@telnet_mock = double('Net::Telnet')
|
6
|
+
Net::Telnet.stub(:new).and_return(@telnet_mock)
|
7
|
+
@telnet_mock.stub(:close)
|
8
|
+
@telnet_mock.stub(:cmd)
|
9
|
+
@telnet_mock.stub(:puts)
|
10
|
+
@telnet_mock.stub(:waitfor)
|
11
11
|
Lacquer.configuration.retries.should == 5
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "with any command" do
|
15
15
|
describe "when connection is unsuccessful" do
|
16
16
|
it "should raise a Lacquer::VarnishError" do
|
17
|
-
@telnet_mock.stub
|
18
|
-
|
17
|
+
@telnet_mock.stub(:cmd).and_raise(Timeout::Error)
|
18
|
+
expect {
|
19
19
|
Lacquer::Varnish.new.purge('/')
|
20
|
-
}.
|
20
|
+
}.to raise_error(Lacquer::VarnishError)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should retry on failure before erroring" do
|
24
|
-
@telnet_mock.stub
|
24
|
+
@telnet_mock.stub(:cmd).and_raise(Timeout::Error)
|
25
25
|
Net::Telnet.should_receive(:new).exactly(5).times
|
26
|
-
|
26
|
+
expect {
|
27
27
|
Lacquer::Varnish.new.purge('/')
|
28
|
-
}.
|
28
|
+
}.to raise_error(Lacquer::VarnishError)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should close the connection afterwards" do
|
@@ -44,13 +44,13 @@ describe "Varnish" do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should return successfully when using correct secret" do
|
47
|
-
@telnet_mock.stub
|
48
|
-
@telnet_mock.stub
|
49
|
-
@telnet_mock.stub
|
47
|
+
@telnet_mock.stub(:waitfor).with("Match" => /^107/).and_yield("107 59 \nhaalpffwlcvblmdrinpnjwigwsbiiigq\n\nAuthentication required.\n\n")
|
48
|
+
@telnet_mock.stub(:cmd).with("String" => "auth a4aefcde4b0ee27268af1c9ed613e3220601276b48f9ae5914f801db6c8ef612", "Match" => /\d{3}/).and_yield('200')
|
49
|
+
@telnet_mock.stub(:cmd).with("String" => "url.purge /", "Match" => /\n\n/).and_yield('200')
|
50
50
|
|
51
|
-
|
51
|
+
expect {
|
52
52
|
Lacquer::Varnish.new.purge('/')
|
53
|
-
}.
|
53
|
+
}.not_to raise_error
|
54
54
|
end
|
55
55
|
|
56
56
|
after(:each) do
|
@@ -63,13 +63,13 @@ describe "Varnish" do
|
|
63
63
|
Lacquer.configuration.varnish_servers.first[:secret] = "the wrong secret"
|
64
64
|
end
|
65
65
|
it "should raise Lacquer::AuthenticationError when using wrong secret" do
|
66
|
-
@telnet_mock.stub
|
67
|
-
@telnet_mock.stub
|
68
|
-
@telnet_mock.stub
|
66
|
+
@telnet_mock.stub(:waitfor).with("Match" => /^107/).and_yield("107 59 \nhaalpffwlcvblmdrinpnjwigwsbiiigq\n\nAuthentication required.\n\n")
|
67
|
+
@telnet_mock.stub(:cmd).with("String" => "auth 767dc6ec9eca6e4155d20c8479d3a1a10cf88d92c3846388a830d7fd966d58f9", "Match" => /\d{3}/).and_yield('107')
|
68
|
+
@telnet_mock.stub(:cmd).with("url.purge /").and_yield('200')
|
69
69
|
|
70
|
-
|
70
|
+
expect {
|
71
71
|
Lacquer::Varnish.new.purge('/')
|
72
|
-
}.
|
72
|
+
}.to raise_error(Lacquer::AuthenticationError)
|
73
73
|
end
|
74
74
|
after(:each) do
|
75
75
|
Lacquer.configuration.varnish_servers.first[:secret] = nil
|
@@ -79,14 +79,14 @@ describe "Varnish" do
|
|
79
79
|
|
80
80
|
describe "when connection is unsuccessful and an error handler is set" do
|
81
81
|
before(:each) do
|
82
|
-
Lacquer.configuration.command_error_handler =
|
82
|
+
Lacquer.configuration.command_error_handler = double("command_error_handler")
|
83
83
|
end
|
84
84
|
it "should call handler on error" do
|
85
|
-
@telnet_mock.stub
|
85
|
+
@telnet_mock.stub(:cmd).and_raise(Timeout::Error)
|
86
86
|
Lacquer.configuration.command_error_handler.should_receive(:call).exactly(1).times
|
87
|
-
|
87
|
+
expect {
|
88
88
|
Lacquer::Varnish.new.purge('/')
|
89
|
-
}.
|
89
|
+
}.not_to raise_error
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -94,7 +94,7 @@ describe "Varnish" do
|
|
94
94
|
|
95
95
|
describe "when sending a stats command" do
|
96
96
|
it "should return an array of stats" do
|
97
|
-
@telnet_mock.stub
|
97
|
+
@telnet_mock.stub(:cmd).and_yield(%Q[
|
98
98
|
200 2023
|
99
99
|
6263596 Client connections accepted
|
100
100
|
6260911 Client requests received
|
@@ -169,7 +169,7 @@ Closing CLI connection
|
|
169
169
|
|
170
170
|
describe "when sending a purge command" do
|
171
171
|
it "should return successfully" do
|
172
|
-
@telnet_mock.stub
|
172
|
+
@telnet_mock.stub(:cmd).with("String" => "url.purge /", "Match" => /\n\n/).and_yield('200')
|
173
173
|
Lacquer::Varnish.new.purge('/').should be(true)
|
174
174
|
end
|
175
175
|
end
|
@@ -3,17 +3,17 @@ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
|
3
3
|
describe "Varnishd" do
|
4
4
|
before do
|
5
5
|
spec_root = Pathname.new(__FILE__).dirname.join('..').expand_path
|
6
|
-
Lacquer::Varnishd.stub
|
7
|
-
Lacquer::Varnishd.stub
|
8
|
-
Lacquer::Varnishd.stub
|
6
|
+
Lacquer::Varnishd.stub(:started_check_delay).and_return(0)
|
7
|
+
Lacquer::Varnishd.stub(:env).and_return('test')
|
8
|
+
Lacquer::Varnishd.stub(:root_path).and_return(spec_root)
|
9
9
|
end
|
10
10
|
|
11
11
|
def executes_with(regexp)
|
12
12
|
new_method = Lacquer::Varnishd.method(:new)
|
13
|
-
Lacquer::Varnishd.stub
|
13
|
+
Lacquer::Varnishd.stub(:new).and_return do |*args|
|
14
14
|
varnishd = new_method.call(*args)
|
15
15
|
varnishd.should_receive(:execute).with(regexp)
|
16
|
-
varnishd.stub
|
16
|
+
varnishd.stub(:log)
|
17
17
|
varnishd
|
18
18
|
end
|
19
19
|
end
|
@@ -66,14 +66,14 @@ describe "Varnishd" do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it "raises error if vcl_script_file is not present" do
|
69
|
-
Lacquer::Varnishd.stub
|
69
|
+
Lacquer::Varnishd.stub(:vcl_script_filename).and_return("config/file_not_found.vcl")
|
70
70
|
expect {
|
71
71
|
Lacquer::Varnishd.new.vcl_script_path
|
72
72
|
}.to raise_error
|
73
73
|
end
|
74
74
|
|
75
75
|
it "renders vcl file when erb is present" do
|
76
|
-
Lacquer::Varnishd.stub
|
76
|
+
Lacquer::Varnishd.stub(:vcl_script_filename).and_return("config/generate.vcl")
|
77
77
|
result = Lacquer::Varnishd.new.render_vcl
|
78
78
|
result.should include('.host = "0.0.0.0"')
|
79
79
|
result.should include('.port = "3000"')
|
data/spec/spec_helper.rb
CHANGED
@@ -21,6 +21,18 @@ end
|
|
21
21
|
|
22
22
|
module Resque; end
|
23
23
|
|
24
|
+
module Sidekiq
|
25
|
+
module Worker
|
26
|
+
module ClassMethods
|
27
|
+
def sidekiq_options(options); end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.included(base)
|
31
|
+
base.extend(ClassMethods)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
24
36
|
Lacquer.configure do |config|
|
25
37
|
config.enable_cache = true
|
26
38
|
config.default_ttl = 1.week
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lacquer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Russ Smith (russ@bashme.org)
|
@@ -12,28 +11,25 @@ authors:
|
|
12
11
|
autorequire:
|
13
12
|
bindir: bin
|
14
13
|
cert_chain: []
|
15
|
-
date:
|
14
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: activesupport
|
19
18
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
19
|
requirements:
|
22
|
-
- -
|
20
|
+
- - '>='
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 2.3.10
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- -
|
27
|
+
- - '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 2.3.10
|
33
30
|
- !ruby/object:Gem::Dependency
|
34
31
|
name: i18n
|
35
32
|
requirement: !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
33
|
requirements:
|
38
34
|
- - ~>
|
39
35
|
- !ruby/object:Gem::Version
|
@@ -41,7 +37,6 @@ dependencies:
|
|
41
37
|
type: :runtime
|
42
38
|
prerelease: false
|
43
39
|
version_requirements: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
40
|
requirements:
|
46
41
|
- - ~>
|
47
42
|
- !ruby/object:Gem::Version
|
@@ -49,39 +44,34 @@ dependencies:
|
|
49
44
|
- !ruby/object:Gem::Dependency
|
50
45
|
name: erubis
|
51
46
|
requirement: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
47
|
requirements:
|
54
|
-
- -
|
48
|
+
- - '>='
|
55
49
|
- !ruby/object:Gem::Version
|
56
50
|
version: '0'
|
57
51
|
type: :runtime
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
|
-
- -
|
55
|
+
- - '>='
|
63
56
|
- !ruby/object:Gem::Version
|
64
57
|
version: '0'
|
65
58
|
- !ruby/object:Gem::Dependency
|
66
59
|
name: rake
|
67
60
|
requirement: !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
61
|
requirements:
|
70
|
-
- -
|
62
|
+
- - '>='
|
71
63
|
- !ruby/object:Gem::Version
|
72
64
|
version: '0'
|
73
65
|
type: :development
|
74
66
|
prerelease: false
|
75
67
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
68
|
requirements:
|
78
|
-
- -
|
69
|
+
- - '>='
|
79
70
|
- !ruby/object:Gem::Version
|
80
71
|
version: '0'
|
81
72
|
- !ruby/object:Gem::Dependency
|
82
73
|
name: rspec
|
83
74
|
requirement: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
75
|
requirements:
|
86
76
|
- - ~>
|
87
77
|
- !ruby/object:Gem::Version
|
@@ -89,7 +79,6 @@ dependencies:
|
|
89
79
|
type: :development
|
90
80
|
prerelease: false
|
91
81
|
version_requirements: !ruby/object:Gem::Requirement
|
92
|
-
none: false
|
93
82
|
requirements:
|
94
83
|
- - ~>
|
95
84
|
- !ruby/object:Gem::Version
|
@@ -97,17 +86,15 @@ dependencies:
|
|
97
86
|
- !ruby/object:Gem::Dependency
|
98
87
|
name: yard
|
99
88
|
requirement: !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
89
|
requirements:
|
102
|
-
- -
|
90
|
+
- - '>='
|
103
91
|
- !ruby/object:Gem::Version
|
104
92
|
version: '0'
|
105
93
|
type: :development
|
106
94
|
prerelease: false
|
107
95
|
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
none: false
|
109
96
|
requirements:
|
110
|
-
- -
|
97
|
+
- - '>='
|
111
98
|
- !ruby/object:Gem::Version
|
112
99
|
version: '0'
|
113
100
|
description: Rails drop in for Varnish support.
|
@@ -139,6 +126,7 @@ files:
|
|
139
126
|
- lib/lacquer/railtie.rb
|
140
127
|
- lib/lacquer/recipes.rb
|
141
128
|
- lib/lacquer/resque_job.rb
|
129
|
+
- lib/lacquer/sidekiq_worker.rb
|
142
130
|
- lib/lacquer/tasks.rb
|
143
131
|
- lib/lacquer/varnish.rb
|
144
132
|
- lib/lacquer/varnishd.rb
|
@@ -152,33 +140,33 @@ files:
|
|
152
140
|
- spec/lacquer/cache_utils_spec.rb
|
153
141
|
- spec/lacquer/delayed_job_job_spec.rb
|
154
142
|
- spec/lacquer/resque_job_spec.rb
|
143
|
+
- spec/lacquer/sidekiq_worker_spec.rb
|
155
144
|
- spec/lacquer/varnish_spec.rb
|
156
145
|
- spec/lacquer/varnishd_spec.rb
|
157
146
|
- spec/spec_helper.rb
|
158
147
|
- tasks/lacquer.rake
|
159
148
|
homepage: http://github.com/russ/lacquer
|
160
149
|
licenses: []
|
150
|
+
metadata: {}
|
161
151
|
post_install_message:
|
162
152
|
rdoc_options: []
|
163
153
|
require_paths:
|
164
154
|
- lib
|
165
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
-
none: false
|
167
156
|
requirements:
|
168
|
-
- -
|
157
|
+
- - '>='
|
169
158
|
- !ruby/object:Gem::Version
|
170
159
|
version: '0'
|
171
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
-
none: false
|
173
161
|
requirements:
|
174
|
-
- -
|
162
|
+
- - '>='
|
175
163
|
- !ruby/object:Gem::Version
|
176
164
|
version: '0'
|
177
165
|
requirements: []
|
178
166
|
rubyforge_project: lacquer
|
179
|
-
rubygems_version:
|
167
|
+
rubygems_version: 2.0.3
|
180
168
|
signing_key:
|
181
|
-
specification_version:
|
169
|
+
specification_version: 4
|
182
170
|
summary: Rails drop in for Varnish support.
|
183
171
|
test_files:
|
184
172
|
- spec/config/generate.vcl.erb
|
@@ -188,6 +176,7 @@ test_files:
|
|
188
176
|
- spec/lacquer/cache_utils_spec.rb
|
189
177
|
- spec/lacquer/delayed_job_job_spec.rb
|
190
178
|
- spec/lacquer/resque_job_spec.rb
|
179
|
+
- spec/lacquer/sidekiq_worker_spec.rb
|
191
180
|
- spec/lacquer/varnish_spec.rb
|
192
181
|
- spec/lacquer/varnishd_spec.rb
|
193
182
|
- spec/spec_helper.rb
|