cachetastic 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/doc/classes/ActiveRecord/Base.html +188 -0
  2. data/doc/classes/CGI/Session/CachetasticStore.html +124 -0
  3. data/doc/classes/Cachetastic/Adapters/Base.html +331 -0
  4. data/doc/classes/Cachetastic/Adapters/Drb.html +332 -0
  5. data/doc/classes/Cachetastic/Adapters/File.html +248 -0
  6. data/doc/classes/Cachetastic/Adapters/FileBase.html +309 -0
  7. data/doc/classes/Cachetastic/Adapters/HtmlFile.html +224 -0
  8. data/doc/classes/Cachetastic/Adapters/LocalMemory.html +346 -0
  9. data/doc/classes/Cachetastic/Adapters/Memcache.html +498 -0
  10. data/doc/classes/Cachetastic/Cacheable.html +264 -0
  11. data/doc/classes/Cachetastic/Cacheable/ClassAndInstanceMethods.html +287 -0
  12. data/doc/classes/Cachetastic/Cacheable/ClassOnlyMethods.html +200 -0
  13. data/doc/classes/Cachetastic/Caches/Base.html +672 -0
  14. data/doc/classes/Cachetastic/Caches/Base/RegisteredCaches.html +179 -0
  15. data/doc/classes/Cachetastic/Caches/MackSessionCache.html +119 -0
  16. data/doc/classes/Cachetastic/Caches/PageCache.html +121 -0
  17. data/doc/classes/Cachetastic/Caches/RailsSessionCache.html +154 -0
  18. data/doc/classes/Cachetastic/Connection.html +212 -0
  19. data/doc/classes/Cachetastic/Errors/UnsupportedAdapter.html +146 -0
  20. data/doc/classes/Cachetastic/Logger.html +189 -0
  21. data/doc/classes/Object.html +152 -0
  22. data/doc/created.rid +1 -0
  23. data/doc/files/README.html +207 -0
  24. data/doc/files/lib/adapters/cachetastic_adapters_base_rb.html +139 -0
  25. data/doc/files/lib/adapters/cachetastic_adapters_drb_rb.html +115 -0
  26. data/doc/files/lib/adapters/cachetastic_adapters_file_base_rb.html +109 -0
  27. data/doc/files/lib/adapters/cachetastic_adapters_file_rb.html +121 -0
  28. data/doc/files/lib/adapters/cachetastic_adapters_html_file_rb.html +137 -0
  29. data/doc/files/lib/adapters/cachetastic_adapters_local_memory_rb.html +109 -0
  30. data/doc/files/lib/adapters/cachetastic_adapters_memcache_rb.html +127 -0
  31. data/doc/files/lib/adapters/cachetastic_adapters_store_object_rb.html +101 -0
  32. data/doc/files/lib/caches/cachetastic_caches_base_rb.html +108 -0
  33. data/doc/files/lib/caches/cachetastic_caches_mack_session_cache_rb.html +107 -0
  34. data/doc/files/lib/caches/cachetastic_caches_page_cache_rb.html +109 -0
  35. data/doc/files/lib/caches/cachetastic_caches_rails_session_cache_rb.html +107 -0
  36. data/doc/files/lib/cachetastic_cacheable_rb.html +101 -0
  37. data/doc/files/lib/cachetastic_connection_rb.html +107 -0
  38. data/doc/files/lib/cachetastic_logger_rb.html +107 -0
  39. data/doc/files/lib/cachetastic_rb.html +222 -0
  40. data/doc/files/lib/errors/cachetastic_errors_unsupported_adapter_rb.html +101 -0
  41. data/doc/files/lib/rails_extensions/cachetastic_active_record_base_rb.html +101 -0
  42. data/doc/files/lib/rails_extensions/cgi_session_cachetastic_store_rb.html +109 -0
  43. data/doc/files/lib/ruby_extensions/object_rb.html +101 -0
  44. data/doc/fr_class_index.html +47 -0
  45. data/doc/fr_file_index.html +47 -0
  46. data/doc/fr_method_index.html +100 -0
  47. data/doc/index.html +24 -0
  48. data/doc/rdoc-style.css +208 -0
  49. data/lib/cachetastic.rb +21 -23
  50. data/lib/cachetastic_cacheable.rb +202 -0
  51. data/lib/rails_extensions/cachetastic_active_record_base.rb +12 -39
  52. data/lib/ruby_extensions/object.rb +8 -0
  53. data/test/active_record_test.rb +8 -8
  54. data/test/cacheable_test.rb +72 -0
  55. metadata +52 -2
  56. data/lib/helpers/cachetastic_helpers_active_record.rb +0 -46
@@ -0,0 +1,346 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Cachetastic::Adapters::LocalMemory</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Cachetastic::Adapters::LocalMemory</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../files/lib/adapters/cachetastic_adapters_local_memory_rb.html">
59
+ lib/adapters/cachetastic_adapters_local_memory.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Base.html">
69
+ Cachetastic::Adapters::Base
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <p>
85
+ An adapter/store that keeps objects in local memory. This is great for
86
+ development/testing, but probably shouldn&#8216;t be put into production.
87
+ It&#8216;s also a very good example of how to write a adapter.
88
+ </p>
89
+
90
+ </div>
91
+
92
+
93
+ </div>
94
+
95
+ <div id="method-list">
96
+ <h3 class="section-bar">Methods</h3>
97
+
98
+ <div class="name-list">
99
+ <a href="#M000025">delete</a>&nbsp;&nbsp;
100
+ <a href="#M000022">expire_all</a>&nbsp;&nbsp;
101
+ <a href="#M000023">get</a>&nbsp;&nbsp;
102
+ <a href="#M000024">set</a>&nbsp;&nbsp;
103
+ <a href="#M000021">setup</a>&nbsp;&nbsp;
104
+ <a href="#M000026">stats</a>&nbsp;&nbsp;
105
+ <a href="#M000020">valid?</a>&nbsp;&nbsp;
106
+ </div>
107
+ </div>
108
+
109
+ </div>
110
+
111
+
112
+ <!-- if includes -->
113
+
114
+ <div id="section">
115
+
116
+
117
+
118
+
119
+
120
+ <div id="attribute-list">
121
+ <h3 class="section-bar">Attributes</h3>
122
+
123
+ <div class="name-list">
124
+ <table>
125
+ <tr class="top-aligned-row context-row">
126
+ <td class="context-item-name">local_store</td>
127
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
128
+ <td class="context-item-desc"></td>
129
+ </tr>
130
+ </table>
131
+ </div>
132
+ </div>
133
+
134
+
135
+
136
+ <!-- if method_list -->
137
+ <div id="methods">
138
+ <h3 class="section-bar">Public Instance methods</h3>
139
+
140
+ <div id="method-M000025" class="method-detail">
141
+ <a name="M000025"></a>
142
+
143
+ <div class="method-heading">
144
+ <a href="#M000025" class="method-signature">
145
+ <span class="method-name">delete</span><span class="method-args">(key, delay = 0)</span>
146
+ </a>
147
+ </div>
148
+
149
+ <div class="method-description">
150
+ <p><a class="source-toggle" href="#"
151
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
152
+ <div class="method-source-code" id="M000025-source">
153
+ <pre>
154
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 37</span>
155
+ 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">delay</span> = <span class="ruby-value">0</span>)
156
+ 38: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">delay</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
157
+ 39: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>)
158
+ 40: <span class="ruby-keyword kw">else</span>
159
+ 41: <span class="ruby-identifier">so</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">key</span>)
160
+ 42: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">so</span>
161
+ 43: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">so</span>.<span class="ruby-identifier">key</span>, <span class="ruby-identifier">so</span>.<span class="ruby-identifier">value</span>, <span class="ruby-identifier">delay</span>)
162
+ 44: <span class="ruby-keyword kw">end</span>
163
+ 45: <span class="ruby-keyword kw">end</span>
164
+ 46: <span class="ruby-keyword kw">end</span>
165
+ </pre>
166
+ </div>
167
+ </div>
168
+ </div>
169
+
170
+ <div id="method-M000022" class="method-detail">
171
+ <a name="M000022"></a>
172
+
173
+ <div class="method-heading">
174
+ <a href="#M000022" class="method-signature">
175
+ <span class="method-name">expire_all</span><span class="method-args">()</span>
176
+ </a>
177
+ </div>
178
+
179
+ <div class="method-description">
180
+ <p><a class="source-toggle" href="#"
181
+ onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
182
+ <div class="method-source-code" id="M000022-source">
183
+ <pre>
184
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 16</span>
185
+ 16: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expire_all</span>
186
+ 17: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span> = {}
187
+ 18: <span class="ruby-keyword kw">end</span>
188
+ </pre>
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+ <div id="method-M000023" class="method-detail">
194
+ <a name="M000023"></a>
195
+
196
+ <div class="method-heading">
197
+ <a href="#M000023" class="method-signature">
198
+ <span class="method-name">get</span><span class="method-args">(key)</span>
199
+ </a>
200
+ </div>
201
+
202
+ <div class="method-description">
203
+ <p>
204
+ See <a href="Base.html">Cachetastic::Adapters::Base</a>
205
+ </p>
206
+ <p><a class="source-toggle" href="#"
207
+ onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
208
+ <div class="method-source-code" id="M000023-source">
209
+ <pre>
210
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 21</span>
211
+ 21: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">key</span>)
212
+ 22: <span class="ruby-identifier">so</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span>[<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>]
213
+ 23: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">so</span>
214
+ 24: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">so</span>.<span class="ruby-identifier">invalid?</span>
215
+ 25: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>)
216
+ 26: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
217
+ 27: <span class="ruby-keyword kw">end</span>
218
+ 28: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">so</span>.<span class="ruby-identifier">value</span>
219
+ 29: <span class="ruby-keyword kw">end</span>
220
+ 30: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
221
+ 31: <span class="ruby-keyword kw">end</span>
222
+ </pre>
223
+ </div>
224
+ </div>
225
+ </div>
226
+
227
+ <div id="method-M000024" class="method-detail">
228
+ <a name="M000024"></a>
229
+
230
+ <div class="method-heading">
231
+ <a href="#M000024" class="method-signature">
232
+ <span class="method-name">set</span><span class="method-args">(key, value, expiry = 0)</span>
233
+ </a>
234
+ </div>
235
+
236
+ <div class="method-description">
237
+ <p><a class="source-toggle" href="#"
238
+ onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
239
+ <div class="method-source-code" id="M000024-source">
240
+ <pre>
241
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 33</span>
242
+ 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">expiry</span> = <span class="ruby-value">0</span>)
243
+ 34: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span>[<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>] = <span class="ruby-constant">Cachetastic</span><span class="ruby-operator">::</span><span class="ruby-constant">Adapters</span><span class="ruby-operator">::</span><span class="ruby-constant">StoreObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">expiry</span>)
244
+ 35: <span class="ruby-keyword kw">end</span>
245
+ </pre>
246
+ </div>
247
+ </div>
248
+ </div>
249
+
250
+ <div id="method-M000021" class="method-detail">
251
+ <a name="M000021"></a>
252
+
253
+ <div class="method-heading">
254
+ <a href="#M000021" class="method-signature">
255
+ <span class="method-name">setup</span><span class="method-args">()</span>
256
+ </a>
257
+ </div>
258
+
259
+ <div class="method-description">
260
+ <p><a class="source-toggle" href="#"
261
+ onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
262
+ <div class="method-source-code" id="M000021-source">
263
+ <pre>
264
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 12</span>
265
+ 12: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setup</span>
266
+ 13: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span> = {}
267
+ 14: <span class="ruby-keyword kw">end</span>
268
+ </pre>
269
+ </div>
270
+ </div>
271
+ </div>
272
+
273
+ <div id="method-M000026" class="method-detail">
274
+ <a name="M000026"></a>
275
+
276
+ <div class="method-heading">
277
+ <a href="#M000026" class="method-signature">
278
+ <span class="method-name">stats</span><span class="method-args">()</span>
279
+ </a>
280
+ </div>
281
+
282
+ <div class="method-description">
283
+ <p><a class="source-toggle" href="#"
284
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
285
+ <div class="method-source-code" id="M000026-source">
286
+ <pre>
287
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 48</span>
288
+ 48: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stats</span>
289
+ 49: <span class="ruby-keyword kw">super</span>
290
+ 50: <span class="ruby-identifier">num_keys</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span>.<span class="ruby-identifier">size</span>
291
+ 51: <span class="ruby-identifier">s</span> = <span class="ruby-node">&quot;Number of Entries: #{num_keys}\n&quot;</span>
292
+ 52: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_keys</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
293
+ 53: <span class="ruby-identifier">expiries</span> = []
294
+ 54: <span class="ruby-identifier">keys</span> = []
295
+ 55: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">local_store</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>,<span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
296
+ 56: <span class="ruby-identifier">keys</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">key</span>
297
+ 57: <span class="ruby-identifier">expiries</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">expires_at</span>
298
+ 58: <span class="ruby-keyword kw">end</span>
299
+ 59: <span class="ruby-identifier">expiries</span>.<span class="ruby-identifier">sort!</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">y</span>}
300
+ 60: <span class="ruby-identifier">oldest_expiry</span> = <span class="ruby-identifier">expiries</span>.<span class="ruby-identifier">first</span>
301
+ 61: <span class="ruby-identifier">newest_expiry</span> = <span class="ruby-identifier">expiries</span>.<span class="ruby-identifier">last</span>
302
+ 62: <span class="ruby-identifier">s</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;Oldest Entry: #{oldest_expiry}\nNewest Entry: #{newest_expiry}\nKeys: #{keys.inspect}\n&quot;</span>
303
+ 63: <span class="ruby-keyword kw">end</span>
304
+ 64: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>
305
+ 65: <span class="ruby-keyword kw">end</span>
306
+ </pre>
307
+ </div>
308
+ </div>
309
+ </div>
310
+
311
+ <div id="method-M000020" class="method-detail">
312
+ <a name="M000020"></a>
313
+
314
+ <div class="method-heading">
315
+ <a href="#M000020" class="method-signature">
316
+ <span class="method-name">valid?</span><span class="method-args">()</span>
317
+ </a>
318
+ </div>
319
+
320
+ <div class="method-description">
321
+ <p><a class="source-toggle" href="#"
322
+ onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
323
+ <div class="method-source-code" id="M000020-source">
324
+ <pre>
325
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_local_memory.rb, line 8</span>
326
+ 8: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">valid?</span>
327
+ 9: <span class="ruby-keyword kw">true</span>
328
+ 10: <span class="ruby-keyword kw">end</span>
329
+ </pre>
330
+ </div>
331
+ </div>
332
+ </div>
333
+
334
+
335
+ </div>
336
+
337
+
338
+ </div>
339
+
340
+
341
+ <div id="validator-badges">
342
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
343
+ </div>
344
+
345
+ </body>
346
+ </html>
@@ -0,0 +1,498 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Cachetastic::Adapters::Memcache</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Cachetastic::Adapters::Memcache</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../files/lib/adapters/cachetastic_adapters_memcache_rb.html">
59
+ lib/adapters/cachetastic_adapters_memcache.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Base.html">
69
+ Cachetastic::Adapters::Base
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <p>
85
+ This adapter uses <a href="Memcache.html">Memcache</a> as it&#8216;s
86
+ backing. The configuration for this should look something like this:
87
+ </p>
88
+ <pre>
89
+ my_awesome_cache_options:
90
+ debug: false
91
+ adapter: memcache
92
+ marshall_method: none
93
+ default_expiry: &lt;%= 24.hours %&gt;
94
+ store_options:
95
+ c_threshold: 10_000
96
+ compression: true
97
+ debug: false
98
+ readonly: false
99
+ urlencode: false
100
+ logging:
101
+ logger_1:
102
+ type: file
103
+ file: log/memcached.log
104
+ servers:
105
+ - 127.0.0.1:11211
106
+ </pre>
107
+
108
+ </div>
109
+
110
+
111
+ </div>
112
+
113
+ <div id="method-list">
114
+ <h3 class="section-bar">Methods</h3>
115
+
116
+ <div class="name-list">
117
+ <a href="#M000010">delete</a>&nbsp;&nbsp;
118
+ <a href="#M000012">expire_all</a>&nbsp;&nbsp;
119
+ <a href="#M000011">get</a>&nbsp;&nbsp;
120
+ <a href="#M000019">get_version</a>&nbsp;&nbsp;
121
+ <a href="#M000018">increment_version</a>&nbsp;&nbsp;
122
+ <a href="#M000013">inspect</a>&nbsp;&nbsp;
123
+ <a href="#M000016">namespace</a>&nbsp;&nbsp;
124
+ <a href="#M000017">ns_versions</a>&nbsp;&nbsp;
125
+ <a href="#M000009">set</a>&nbsp;&nbsp;
126
+ <a href="#M000008">setup</a>&nbsp;&nbsp;
127
+ <a href="#M000015">stats</a>&nbsp;&nbsp;
128
+ <a href="#M000014">valid?</a>&nbsp;&nbsp;
129
+ </div>
130
+ </div>
131
+
132
+ </div>
133
+
134
+
135
+ <!-- if includes -->
136
+
137
+ <div id="section">
138
+
139
+
140
+
141
+
142
+
143
+ <div id="attribute-list">
144
+ <h3 class="section-bar">Attributes</h3>
145
+
146
+ <div class="name-list">
147
+ <table>
148
+ <tr class="top-aligned-row context-row">
149
+ <td class="context-item-name">conn</td>
150
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
151
+ <td class="context-item-desc"></td>
152
+ </tr>
153
+ <tr class="top-aligned-row context-row">
154
+ <td class="context-item-name">version</td>
155
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
156
+ <td class="context-item-desc"></td>
157
+ </tr>
158
+ </table>
159
+ </div>
160
+ </div>
161
+
162
+
163
+
164
+ <!-- if method_list -->
165
+ <div id="methods">
166
+ <h3 class="section-bar">Public Instance methods</h3>
167
+
168
+ <div id="method-M000010" class="method-detail">
169
+ <a name="M000010"></a>
170
+
171
+ <div class="method-heading">
172
+ <a href="#M000010" class="method-signature">
173
+ <span class="method-name">delete</span><span class="method-args">(key, delay = 0)</span>
174
+ </a>
175
+ </div>
176
+
177
+ <div class="method-description">
178
+ <p><a class="source-toggle" href="#"
179
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
180
+ <div class="method-source-code" id="M000010-source">
181
+ <pre>
182
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 31</span>
183
+ 31: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">delay</span> = <span class="ruby-value">0</span>)
184
+ 32: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">delay</span>)
185
+ 33: <span class="ruby-keyword kw">end</span>
186
+ </pre>
187
+ </div>
188
+ </div>
189
+ </div>
190
+
191
+ <div id="method-M000012" class="method-detail">
192
+ <a name="M000012"></a>
193
+
194
+ <div class="method-heading">
195
+ <a href="#M000012" class="method-signature">
196
+ <span class="method-name">expire_all</span><span class="method-args">()</span>
197
+ </a>
198
+ </div>
199
+
200
+ <div class="method-description">
201
+ <p><a class="source-toggle" href="#"
202
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
203
+ <div class="method-source-code" id="M000012-source">
204
+ <pre>
205
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 39</span>
206
+ 39: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expire_all</span>
207
+ 40: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">increment_version</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
208
+ 41: <span class="ruby-keyword kw">end</span>
209
+ </pre>
210
+ </div>
211
+ </div>
212
+ </div>
213
+
214
+ <div id="method-M000011" class="method-detail">
215
+ <a name="M000011"></a>
216
+
217
+ <div class="method-heading">
218
+ <a href="#M000011" class="method-signature">
219
+ <span class="method-name">get</span><span class="method-args">(key)</span>
220
+ </a>
221
+ </div>
222
+
223
+ <div class="method-description">
224
+ <p><a class="source-toggle" href="#"
225
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
226
+ <div class="method-source-code" id="M000011-source">
227
+ <pre>
228
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 35</span>
229
+ 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">key</span>)
230
+ 36: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">key</span>)
231
+ 37: <span class="ruby-keyword kw">end</span>
232
+ </pre>
233
+ </div>
234
+ </div>
235
+ </div>
236
+
237
+ <div id="method-M000013" class="method-detail">
238
+ <a name="M000013"></a>
239
+
240
+ <div class="method-heading">
241
+ <a href="#M000013" class="method-signature">
242
+ <span class="method-name">inspect</span><span class="method-args">()</span>
243
+ </a>
244
+ </div>
245
+
246
+ <div class="method-description">
247
+ <p><a class="source-toggle" href="#"
248
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
249
+ <div class="method-source-code" id="M000013-source">
250
+ <pre>
251
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 43</span>
252
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">inspect</span>
253
+ 44: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inspect</span> <span class="ruby-operator">+</span> <span class="ruby-node">&quot; &lt;version: #{self.version}&gt; #{self.conn.stats.inspect}&quot;</span>
254
+ 45: <span class="ruby-keyword kw">end</span>
255
+ </pre>
256
+ </div>
257
+ </div>
258
+ </div>
259
+
260
+ <div id="method-M000009" class="method-detail">
261
+ <a name="M000009"></a>
262
+
263
+ <div class="method-heading">
264
+ <a href="#M000009" class="method-signature">
265
+ <span class="method-name">set</span><span class="method-args">(key, value, expiry = 0)</span>
266
+ </a>
267
+ </div>
268
+
269
+ <div class="method-description">
270
+ <p><a class="source-toggle" href="#"
271
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
272
+ <div class="method-source-code" id="M000009-source">
273
+ <pre>
274
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 27</span>
275
+ 27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">expiry</span> = <span class="ruby-value">0</span>)
276
+ 28: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">expiry</span>)
277
+ 29: <span class="ruby-keyword kw">end</span>
278
+ </pre>
279
+ </div>
280
+ </div>
281
+ </div>
282
+
283
+ <div id="method-M000008" class="method-detail">
284
+ <a name="M000008"></a>
285
+
286
+ <div class="method-heading">
287
+ <a href="#M000008" class="method-signature">
288
+ <span class="method-name">setup</span><span class="method-args">()</span>
289
+ </a>
290
+ </div>
291
+
292
+ <div class="method-description">
293
+ <p><a class="source-toggle" href="#"
294
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
295
+ <div class="method-source-code" id="M000008-source">
296
+ <pre>
297
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 22</span>
298
+ 22: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setup</span>
299
+ 23: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span> = <span class="ruby-constant">MemCache</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">servers</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">store_options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">:namespace</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">namespace</span>}))
300
+ 24: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">version</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_version</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
301
+ 25: <span class="ruby-keyword kw">end</span>
302
+ </pre>
303
+ </div>
304
+ </div>
305
+ </div>
306
+
307
+ <div id="method-M000015" class="method-detail">
308
+ <a name="M000015"></a>
309
+
310
+ <div class="method-heading">
311
+ <a href="#M000015" class="method-signature">
312
+ <span class="method-name">stats</span><span class="method-args">()</span>
313
+ </a>
314
+ </div>
315
+
316
+ <div class="method-description">
317
+ <p><a class="source-toggle" href="#"
318
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
319
+ <div class="method-source-code" id="M000015-source">
320
+ <pre>
321
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 57</span>
322
+ 57: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stats</span>
323
+ 58: <span class="ruby-keyword kw">super</span>
324
+ 59: <span class="ruby-keyword kw">begin</span>
325
+ 60: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Memcache stats for all caches:&quot;</span>
326
+ 61: <span class="ruby-identifier">memc</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>
327
+ 62: <span class="ruby-identifier">puts</span> <span class="ruby-constant">Kernel</span>.<span class="ruby-identifier">pp_to_s</span>(<span class="ruby-identifier">memc</span>.<span class="ruby-identifier">stats</span>)
328
+ 63: <span class="ruby-identifier">paths</span> = <span class="ruby-value">`sh -c 'echo $PATH'`</span>
329
+ 64: <span class="ruby-identifier">paths</span> = <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">':'</span>)
330
+ 65: <span class="ruby-identifier">memcached_tool_found</span> = <span class="ruby-keyword kw">false</span>
331
+ 66: <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
332
+ 67: <span class="ruby-identifier">cmd_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">path</span>,<span class="ruby-value str">'memcached_tool'</span>))
333
+ 68: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cmd_path</span>)
334
+ 69: <span class="ruby-identifier">memcached_tool_found</span> = <span class="ruby-keyword kw">true</span>
335
+ 70: <span class="ruby-keyword kw">break</span>
336
+ 71: <span class="ruby-keyword kw">end</span>
337
+ 72: <span class="ruby-keyword kw">end</span>
338
+ 73: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">memcached_tool_found</span>
339
+ 74: <span class="ruby-identifier">app_config</span>.<span class="ruby-identifier">memcache_servers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">server</span><span class="ruby-operator">|</span>
340
+ 75: <span class="ruby-identifier">puts</span> <span class="ruby-node">`memcached_tool #{server}`</span>
341
+ 76: <span class="ruby-keyword kw">end</span>
342
+ 77: <span class="ruby-keyword kw">end</span>
343
+ 78: <span class="ruby-keyword kw">rescue</span>
344
+ 79: <span class="ruby-keyword kw">end</span>
345
+ 80: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;&quot;</span>
346
+ 81: <span class="ruby-keyword kw">end</span>
347
+ </pre>
348
+ </div>
349
+ </div>
350
+ </div>
351
+
352
+ <div id="method-M000014" class="method-detail">
353
+ <a name="M000014"></a>
354
+
355
+ <div class="method-heading">
356
+ <a href="#M000014" class="method-signature">
357
+ <span class="method-name">valid?</span><span class="method-args">()</span>
358
+ </a>
359
+ </div>
360
+
361
+ <div class="method-description">
362
+ <p><a class="source-toggle" href="#"
363
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
364
+ <div class="method-source-code" id="M000014-source">
365
+ <pre>
366
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 47</span>
367
+ 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">valid?</span>
368
+ 48: <span class="ruby-keyword kw">begin</span>
369
+ 49: <span class="ruby-keyword kw">return</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">active?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">version</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_version</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>))
370
+ 50: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
371
+ 51: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
372
+ 52: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
373
+ 53: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
374
+ 54: <span class="ruby-keyword kw">end</span>
375
+ 55: <span class="ruby-keyword kw">end</span>
376
+ </pre>
377
+ </div>
378
+ </div>
379
+ </div>
380
+
381
+ <h3 class="section-bar">Protected Instance methods</h3>
382
+
383
+ <div id="method-M000019" class="method-detail">
384
+ <a name="M000019"></a>
385
+
386
+ <div class="method-heading">
387
+ <a href="#M000019" class="method-signature">
388
+ <span class="method-name">get_version</span><span class="method-args">(name)</span>
389
+ </a>
390
+ </div>
391
+
392
+ <div class="method-description">
393
+ <p><a class="source-toggle" href="#"
394
+ onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
395
+ <div class="method-source-code" id="M000019-source">
396
+ <pre>
397
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 104</span>
398
+ 104: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_version</span>(<span class="ruby-identifier">name</span>)
399
+ 105: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
400
+ 106: <span class="ruby-identifier">v</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">ns_versions</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">name</span>)
401
+ 107: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">nil?</span>
402
+ 108: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">ns_versions</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">name</span>, <span class="ruby-value">1</span>)
403
+ 109: <span class="ruby-identifier">v</span> = <span class="ruby-value">1</span>
404
+ 110: <span class="ruby-keyword kw">end</span>
405
+ 111: <span class="ruby-identifier">v</span>
406
+ 112: <span class="ruby-keyword kw">end</span>
407
+ </pre>
408
+ </div>
409
+ </div>
410
+ </div>
411
+
412
+ <div id="method-M000018" class="method-detail">
413
+ <a name="M000018"></a>
414
+
415
+ <div class="method-heading">
416
+ <a href="#M000018" class="method-signature">
417
+ <span class="method-name">increment_version</span><span class="method-args">(name)</span>
418
+ </a>
419
+ </div>
420
+
421
+ <div class="method-description">
422
+ <p><a class="source-toggle" href="#"
423
+ onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
424
+ <div class="method-source-code" id="M000018-source">
425
+ <pre>
426
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 98</span>
427
+ 98: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">increment_version</span>(<span class="ruby-identifier">name</span>)
428
+ 99: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
429
+ 100: <span class="ruby-identifier">v</span> = <span class="ruby-identifier">get_version</span>(<span class="ruby-identifier">name</span>)
430
+ 101: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">ns_versions</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">v</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
431
+ 102: <span class="ruby-keyword kw">end</span>
432
+ </pre>
433
+ </div>
434
+ </div>
435
+ </div>
436
+
437
+ <div id="method-M000016" class="method-detail">
438
+ <a name="M000016"></a>
439
+
440
+ <div class="method-heading">
441
+ <a href="#M000016" class="method-signature">
442
+ <span class="method-name">namespace</span><span class="method-args">()</span>
443
+ </a>
444
+ </div>
445
+
446
+ <div class="method-description">
447
+ <p><a class="source-toggle" href="#"
448
+ onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
449
+ <div class="method-source-code" id="M000016-source">
450
+ <pre>
451
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 87</span>
452
+ 87: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">namespace</span>
453
+ 88: <span class="ruby-identifier">v</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_version</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
454
+ 89: <span class="ruby-keyword kw">return</span> <span class="ruby-node">&quot;#{name}.#{v}&quot;</span>
455
+ 90: <span class="ruby-keyword kw">end</span>
456
+ </pre>
457
+ </div>
458
+ </div>
459
+ </div>
460
+
461
+ <div id="method-M000017" class="method-detail">
462
+ <a name="M000017"></a>
463
+
464
+ <div class="method-heading">
465
+ <a href="#M000017" class="method-signature">
466
+ <span class="method-name">ns_versions</span><span class="method-args">()</span>
467
+ </a>
468
+ </div>
469
+
470
+ <div class="method-description">
471
+ <p><a class="source-toggle" href="#"
472
+ onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
473
+ <div class="method-source-code" id="M000017-source">
474
+ <pre>
475
+ <span class="ruby-comment cmt"># File lib/adapters/cachetastic_adapters_memcache.rb, line 92</span>
476
+ 92: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ns_versions</span>
477
+ 93: <span class="ruby-identifier">ivar_cache</span> <span class="ruby-keyword kw">do</span>
478
+ 94: <span class="ruby-identifier">ns_conn</span> = <span class="ruby-constant">MemCache</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">servers</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">store_options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">:namespace</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:namespace_versions</span>}))
479
+ 95: <span class="ruby-keyword kw">end</span>
480
+ 96: <span class="ruby-keyword kw">end</span>
481
+ </pre>
482
+ </div>
483
+ </div>
484
+ </div>
485
+
486
+
487
+ </div>
488
+
489
+
490
+ </div>
491
+
492
+
493
+ <div id="validator-badges">
494
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
495
+ </div>
496
+
497
+ </body>
498
+ </html>