mack-caching 0.6.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,27 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Mack/Controller/ClassMethods.html#M000001">cache_pages (Mack::Controller::ClassMethods)</a><br />
24
+ </div>
25
+ </div>
26
+ </body>
27
+ </html>
data/doc/index.html ADDED
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ mack-caching
9
+
10
+ -->
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <title>mack-caching</title>
14
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
+ </head>
16
+ <frameset rows="20%, 80%">
17
+ <frameset cols="25%,35%,45%">
18
+ <frame src="fr_file_index.html" title="Files" name="Files" />
19
+ <frame src="fr_class_index.html" name="Classes" />
20
+ <frame src="fr_method_index.html" name="Methods" />
21
+ </frameset>
22
+ <frame src="files/README.html" name="docwin" />
23
+ </frameset>
24
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,12 @@
1
+ module Mack
2
+ module Errors # :nodoc:
3
+
4
+ # Thrown when a page is uncacheable
5
+ class UncacheableError < StandardError
6
+ def initialize(message) # :nodoc:
7
+ super(message)
8
+ end
9
+ end # UncacheableError
10
+
11
+ end # Errors
12
+ end # Mack
@@ -0,0 +1,26 @@
1
+ module Mack
2
+
3
+ module Controller # :nodoc:
4
+
5
+ module ClassMethods
6
+
7
+ # Used to define which pages you would or would not like cached.
8
+ #
9
+ # Examples:
10
+ # cache_pages # => will cache all pages for a controller
11
+ # cache_pages :only => [:index, :show] # => will only cache the index and show pages for a controller
12
+ # cache_pages :except => [:delete] # => will cache all pages except for the delete page for a controller
13
+ def cache_pages(options = {})
14
+ before_filter :set_page_cache_header, options
15
+ end
16
+
17
+ end
18
+
19
+ private
20
+ def set_page_cache_header
21
+ response["cache_this_page"] = "true"
22
+ end
23
+
24
+ end # Controller
25
+
26
+ end # Mack
@@ -0,0 +1,59 @@
1
+ require File.join(File.dirname(__FILE__), "controller_extensions")
2
+ require File.join(File.dirname(__FILE__), "..", "errors")
3
+ module Mack # :nodoc:
4
+ module Caching # :nodoc:
5
+ class PageCaching # :nodoc:
6
+
7
+ def initialize(app) # :nodoc:
8
+ @app = app
9
+ end
10
+
11
+ def call(env) # :nodoc:
12
+ if app_config.use_page_caching
13
+ request = Mack::Request.new(env)
14
+ page = Cachetastic::Caches::PageCache.get(request.fullpath)
15
+ if page
16
+ response = Mack::Response.new
17
+ response["Content-Type"] = page.content_type
18
+ response.write(page.body)
19
+ return response.finish
20
+ end
21
+ ret = @app.call(env)
22
+ unless ret[2].is_a?(Rack::File)
23
+ res = ret[2]
24
+ if res["cache_this_page"] && res.successful?
25
+ Cachetastic::Caches::PageCache.set(request.fullpath, Mack::Caching::PageCaching::Page.new(res.body, res["Content-Type"]))
26
+ end
27
+ end
28
+ return ret
29
+ end
30
+ return @app.call(env)
31
+ end
32
+
33
+ class Page # :nodoc:
34
+
35
+ attr_reader :body
36
+ attr_reader :content_type
37
+
38
+ def initialize(body, content_type = "text/html")
39
+ if body.is_a?(Array)
40
+ raise Mack::Errors::UncacheableError.new("Multipart pages can not be cached!") if body.size > 1
41
+ @body = body.first
42
+ else
43
+ @body = body
44
+ end
45
+ @content_type = content_type
46
+ end
47
+
48
+ def to_s
49
+ @body
50
+ end
51
+
52
+ end # Page
53
+
54
+ end # PageCaching
55
+
56
+ end # Caching
57
+ end # Mack
58
+
59
+ Mack::Utils::RunnersRegistry.add(Mack::Caching::PageCaching, 0)
@@ -0,0 +1,14 @@
1
+ namespace :cachetastic do
2
+
3
+ namespace :page_cache do
4
+
5
+ desc "Expires the page cache."
6
+ task :expire_all => :environment do
7
+ running_time do("Cachetastic::Caches::PageCache.expire_all")
8
+ Cachetastic::Caches::PageCache.expire_all
9
+ end
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,4 @@
1
+ require File.join(File.dirname(__FILE__), "mack-caching", "errors")
2
+ require File.join(File.dirname(__FILE__), "mack-caching", "page_caching", "page_caching")
3
+
4
+ load File.join(File.dirname(__FILE__), "mack-caching", "tasks", "cachetastic.rake")
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mack-caching
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.1
5
+ platform: ruby
6
+ authors:
7
+ - markbates
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-04 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "mack-caching was developed by: markbates"
17
+ email: mark@mackframework.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - lib/mack-caching/errors.rb
26
+ - lib/mack-caching/page_caching/controller_extensions.rb
27
+ - lib/mack-caching/page_caching/page_caching.rb
28
+ - lib/mack-caching/tasks/cachetastic.rake
29
+ - lib/mack-caching.rb
30
+ - README
31
+ - doc/classes/Mack/Controller/ClassMethods.html
32
+ - doc/classes/Mack/Errors/UncacheableError.html
33
+ - doc/created.rid
34
+ - doc/files/lib/mack-caching/errors_rb.html
35
+ - doc/files/lib/mack-caching/page_caching/controller_extensions_rb.html
36
+ - doc/files/lib/mack-caching/page_caching/page_caching_rb.html
37
+ - doc/files/lib/mack-caching_rb.html
38
+ - doc/files/README.html
39
+ - doc/fr_class_index.html
40
+ - doc/fr_file_index.html
41
+ - doc/fr_method_index.html
42
+ - doc/index.html
43
+ - doc/rdoc-style.css
44
+ has_rdoc: true
45
+ homepage: http://www.mackframework.com
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.8.6
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project: magrathea
67
+ rubygems_version: 1.2.0
68
+ signing_key:
69
+ specification_version: 2
70
+ summary: Caching extensions for Mack
71
+ test_files: []
72
+