adva-cache 0.0.1
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/lib/adva/cache/responder/purge.rb +20 -0
- data/lib/adva/cache/responder.rb +7 -0
- data/lib/adva/cache.rb +20 -0
- data/lib/adva-cache.rb +1 -0
- data/lib/testing/step_definitions.rb +55 -0
- metadata +132 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module Adva
|
2
|
+
class Cache
|
3
|
+
module Responder
|
4
|
+
module Purge
|
5
|
+
delegate :purge, :to => :controller
|
6
|
+
delegate :purge?, :to => :'controller.class'
|
7
|
+
|
8
|
+
def to_html
|
9
|
+
super.tap { purge(purge_resources) if purge?(params[:action]) }
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def purge_resources
|
15
|
+
resource.respond_to?(:persisted?) ? [resource] : []
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/adva/cache.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'adva'
|
2
|
+
|
3
|
+
require 'rack/cache'
|
4
|
+
require 'rack/cache/purge'
|
5
|
+
require 'rack/cache/tags'
|
6
|
+
|
7
|
+
module Adva
|
8
|
+
class Cache < ::Rails::Engine
|
9
|
+
autoload :Responder, 'adva/cache/responder'
|
10
|
+
|
11
|
+
include Adva::Engine
|
12
|
+
|
13
|
+
# TODO add config vars to specify rack-cache storage uris
|
14
|
+
config.app_middleware.insert_after 'Rails::Rack::Logger', ::Rack::Cache
|
15
|
+
config.app_middleware.insert_after 'Rack::Cache', ::Rack::Cache::Purge
|
16
|
+
config.app_middleware.insert_after 'Rack::Cache::Purge', ::Rack::Cache::Tags
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Adva::Responder.send(:include, Adva::Cache::Responder::Purge)
|
data/lib/adva-cache.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'adva/cache'
|
@@ -0,0 +1,55 @@
|
|
1
|
+
When /^(?:|I )have visited (.+)$/ do |page|
|
2
|
+
visit path_to(page)
|
3
|
+
follow_redirect! if redirect?
|
4
|
+
end
|
5
|
+
|
6
|
+
When /^the following urls are tagged:$/ do |table|
|
7
|
+
table.hashes.each do |attributes|
|
8
|
+
url = "http://www.example.com#{attributes[:url]}"
|
9
|
+
attributes[:tags].split(',').map(&:strip).each do |tag|
|
10
|
+
Rack::Cache::Tags::Store::ActiveRecord::Tagging.create!(:tag => tag, :url => url)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Then /^the following urls should be tagged:$/ do |table|
|
16
|
+
table.hashes.each do |hash|
|
17
|
+
url = "http://www.example.com#{hash[:url]}"
|
18
|
+
actual = Rack::Cache::Tags::Store::ActiveRecord::Tagging.where(:url => url).map(&:tag)
|
19
|
+
expected = hash[:tags].split(',').map(&:strip)
|
20
|
+
assert_equal expected, expected & actual
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Webrat::Session.class_eval do
|
25
|
+
cattr_accessor :follow_redirects
|
26
|
+
self.follow_redirects = true
|
27
|
+
|
28
|
+
def internal_redirect_with_skipping?
|
29
|
+
follow_redirects && internal_redirect_without_skipping?
|
30
|
+
end
|
31
|
+
alias_method_chain :internal_redirect?, :skipping
|
32
|
+
end
|
33
|
+
|
34
|
+
Before do
|
35
|
+
Webrat::Session.follow_redirects = true
|
36
|
+
end
|
37
|
+
|
38
|
+
When /I don't follow any http redirects/ do
|
39
|
+
Webrat::Session.follow_redirects = false
|
40
|
+
end
|
41
|
+
|
42
|
+
Then /^it should purge cache entries tagged: (.+)$/ do |tags|
|
43
|
+
expected = tags.split(',').map(&:strip)
|
44
|
+
actual = response.headers[Rack::Cache::Tags::PURGE_TAGS_HEADER]
|
45
|
+
assert actual, 'no purge tags headers found'
|
46
|
+
assert_equal expected.sort, actual.split("\n").sort
|
47
|
+
end
|
48
|
+
|
49
|
+
Then /^it should purge the cache entries: (.+)$/ do |urls|
|
50
|
+
expected = urls.split(',').map(&:strip).sort
|
51
|
+
actual = response.headers[Rack::Cache::Purge::PURGE_HEADER]
|
52
|
+
assert actual, 'no purge headers found'
|
53
|
+
actual = actual.split("\n").map { |url| url.sub('http://www.example.com', '') }.sort
|
54
|
+
assert_equal expected, actual, "did not purge the expected urls.\n expected: #{expected.inspect}\n actual: #{actual.inspect}"
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adva-cache
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Sven Fuchs
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-29 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: adva-core
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rack-cache-purge
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - "="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 27
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 0
|
47
|
+
- 2
|
48
|
+
version: 0.0.2
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rack-cache-tags
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - "="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 19
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
- 0
|
63
|
+
- 6
|
64
|
+
version: 0.0.6
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: reference_tracking
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - "="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 23
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
- 0
|
79
|
+
- 4
|
80
|
+
version: 0.0.4
|
81
|
+
type: :runtime
|
82
|
+
version_requirements: *id004
|
83
|
+
description: "[description]"
|
84
|
+
email: nobody@adva-cms.org
|
85
|
+
executables: []
|
86
|
+
|
87
|
+
extensions: []
|
88
|
+
|
89
|
+
extra_rdoc_files: []
|
90
|
+
|
91
|
+
files:
|
92
|
+
- lib/adva-cache.rb
|
93
|
+
- lib/adva/cache/responder/purge.rb
|
94
|
+
- lib/adva/cache/responder.rb
|
95
|
+
- lib/adva/cache.rb
|
96
|
+
- lib/testing/step_definitions.rb
|
97
|
+
has_rdoc: true
|
98
|
+
homepage: http://github.com/svenfuchs/adva-cms2
|
99
|
+
licenses: []
|
100
|
+
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
version: "0"
|
124
|
+
requirements: []
|
125
|
+
|
126
|
+
rubyforge_project: "[none]"
|
127
|
+
rubygems_version: 1.3.7
|
128
|
+
signing_key:
|
129
|
+
specification_version: 3
|
130
|
+
summary: "[summary]"
|
131
|
+
test_files: []
|
132
|
+
|