lacquer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,9 +2,29 @@
2
2
 
3
3
  Rails drop in for Varnish support.
4
4
 
5
- == TODO
6
- * Add DelayedJob/Resque support.
7
- * Add helpful install generators.
5
+ == Install
6
+ Basic installation
7
+
8
+ rails generate lacquer
9
+
10
+ config/initializers/lacquer.rb
11
+
12
+ Lacquer.configure do |config|
13
+ config.enable_cache = true
14
+ config.default_ttl = 1.week
15
+ config.varnish_servers << { :host => '0.0.0.0', :port => 6082 }
16
+ end
17
+
18
+ app/controllers/application_controller.rb
19
+
20
+ class ApplicationController < ActionController::Base
21
+ include Lacquer::CacheUtils
22
+ end
23
+
24
+ == Usage
25
+ To set a custom ttl for a controller:
26
+
27
+ before_filter { |controller| controller.set_cache_ttl(15.minutes) }
8
28
 
9
29
  == Note on Patches/Pull Requests
10
30
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{lacquer}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Russ Smith"]
@@ -31,6 +31,8 @@ Gem::Specification.new do |s|
31
31
  "lib/lacquer.rb",
32
32
  "lib/lacquer/cache_utils.rb",
33
33
  "lib/lacquer/configuration.rb",
34
+ "lib/lacquer/delayed_job_job.rb",
35
+ "lib/lacquer/resque_job.rb",
34
36
  "lib/lacquer/varnish_interface.rb",
35
37
  "rails/init.rb",
36
38
  "test/helper.rb",
@@ -1,5 +1,6 @@
1
1
  Lacquer.configure do |config|
2
2
  config.enable_cache = true
3
3
  config.default_ttl = 1.week
4
+ config.job_backend = :none
4
5
  config.varnish_servers << { :host => '0.0.0.0', :port => 6082 }
5
6
  end
@@ -25,7 +25,16 @@ module Lacquer
25
25
  # clear_cache_for(root_path, blog_posts_path, '/other/content/*')
26
26
  def clear_cache_for(*paths)
27
27
  paths.each do |path|
28
- VarnishInterface.send_command('url.purge ' << path)
28
+ case Lacquer.configuration.job_backend
29
+ when :delayed_job
30
+ require 'lacquer/delayed_job_job'
31
+ Delayed::Job.enqueue(DelayedJobJob.new('url.purge ' << path))
32
+ when :resque
33
+ require 'lacquer/resque_job'
34
+ Resque.enqueue(ResqueJob, 'url.purge ' << path)
35
+ when :none
36
+ VarnishInterface.send_command('url.purge ' << path)
37
+ end
29
38
  end
30
39
  end
31
40
 
@@ -11,10 +11,14 @@ module Lacquer
11
11
  # Application default ttl
12
12
  attr_accessor :default_ttl
13
13
 
14
+ # Job Backend
15
+ attr_accessor :job_backend
16
+
14
17
  def initialize
15
18
  @enable_cache = true
16
19
  @varnish_servers = []
17
20
  @default_ttl = 1.week
21
+ @job_backend = :none
18
22
  end
19
23
 
20
24
  # Returns a hash of all configurable options
@@ -0,0 +1,5 @@
1
+ class DelayedJobJob < Struct.new(:command)
2
+ def perform
3
+ VarnishInterface.send_command(command)
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class ResqueJob
2
+ @queue = :lacquer
3
+
4
+ def self.perform(command)
5
+ VarnishInterface.send_command(command)
6
+ end
7
+ end
@@ -1,5 +1,6 @@
1
1
  module Lacquer
2
2
  class VarnishInterface
3
+ # Sends commands over telnet to varnish servers listed in the config.
3
4
  def self.send_command(command)
4
5
  Lacquer.configuration.varnish_servers.each do |server|
5
6
  begin
@@ -7,5 +7,18 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
8
  require 'lacquer'
9
9
 
10
- class Test::Unit::TestCase
10
+ class ControllerClass
11
+ def self.before_filter(arg); end
12
+ def self.after_filter(arg); end
13
+
14
+ include Lacquer::CacheUtils
15
+ end
16
+
17
+ module Delayed;
18
+ module Job; end
19
+ end
20
+
21
+ module Resque; end
22
+
23
+ class ActiveSupport::TestCase
11
24
  end
@@ -1,20 +1,32 @@
1
1
  require 'helper'
2
2
 
3
- class ControllerClass
4
- def self.before_filter(arg); end
5
- def self.after_filter(arg); end
6
-
7
- include Lacquer::CacheUtils
8
- end
9
-
10
3
  class TestLacquer < ActiveSupport::TestCase
11
4
  setup do
12
5
  @controller = ControllerClass.new
13
6
  end
14
7
 
15
- should "take paths to clear cache for" do
16
- Lacquer::VarnishInterface.expects(:send_command).twice
17
- @controller.clear_cache_for('/', '/blog/posts')
8
+ context "when job backend is :none" do
9
+ should "take paths to clear cache for" do
10
+ Lacquer.configuration.job_backend = :none
11
+ Lacquer::VarnishInterface.expects(:send_command).twice
12
+ @controller.clear_cache_for('/', '/blog/posts')
13
+ end
14
+ end
15
+
16
+ context "when job backend is :delayed_job" do
17
+ should "take paths to clear cache for" do
18
+ Lacquer.configuration.job_backend = :delayed_job
19
+ Delayed::Job.expects(:enqueue).twice
20
+ @controller.clear_cache_for('/', '/blog/posts')
21
+ end
22
+ end
23
+
24
+ context "when job backend is :resque" do
25
+ should "take paths to clear cache for" do
26
+ Lacquer.configuration.job_backend = :resque
27
+ Resque.expects(:enqueue).twice
28
+ @controller.clear_cache_for('/', '/blog/posts')
29
+ end
18
30
  end
19
31
 
20
32
  context "when cache is enabled" do
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Russ Smith
@@ -42,6 +42,8 @@ files:
42
42
  - lib/lacquer.rb
43
43
  - lib/lacquer/cache_utils.rb
44
44
  - lib/lacquer/configuration.rb
45
+ - lib/lacquer/delayed_job_job.rb
46
+ - lib/lacquer/resque_job.rb
45
47
  - lib/lacquer/varnish_interface.rb
46
48
  - rails/init.rb
47
49
  - test/helper.rb