adva-cache 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,7 @@
1
+ module Adva
2
+ class Cache
3
+ module Responder
4
+ autoload :Purge, 'adva/cache/responder/purge'
5
+ end
6
+ end
7
+ 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
+