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.
@@ -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
+