cachetastic-three 3.0.0
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/LICENSE +21 -0
- data/README +89 -0
- data/doc/classes/Cachetastic/Adapters.html +180 -0
- data/doc/classes/Cachetastic/Adapters/Base.html +419 -0
- data/doc/classes/Cachetastic/Adapters/File.html +135 -0
- data/doc/classes/Cachetastic/Adapters/LocalMemory.html +125 -0
- data/doc/classes/Cachetastic/Adapters/Memcached.html +193 -0
- data/doc/classes/Cachetastic/Cache.html +425 -0
- data/doc/classes/Cachetastic/Cacheable.html +255 -0
- data/doc/classes/Cachetastic/Cacheable/ClassAndInstanceMethods.html +290 -0
- data/doc/classes/Cachetastic/Cacheable/ClassOnlyMethods.html +197 -0
- data/doc/classes/Cachetastic/Logger.html +186 -0
- data/doc/created.rid +1 -0
- data/doc/files/LICENSE.html +132 -0
- data/doc/files/README.html +222 -0
- data/doc/files/lib/cachetastic/adapters/base_rb.html +101 -0
- data/doc/files/lib/cachetastic/adapters/file_rb.html +101 -0
- data/doc/files/lib/cachetastic/adapters/local_memory_rb.html +101 -0
- data/doc/files/lib/cachetastic/adapters/memcached_rb.html +101 -0
- data/doc/files/lib/cachetastic/cache_rb.html +101 -0
- data/doc/files/lib/cachetastic/cacheable_rb.html +101 -0
- data/doc/files/lib/cachetastic/extensions/string_rb.html +108 -0
- data/doc/files/lib/cachetastic/logger_rb.html +101 -0
- data/doc/files/lib/cachetastic/store_object_rb.html +101 -0
- data/doc/files/lib/cachetastic_rb.html +112 -0
- data/doc/fr_class_index.html +36 -0
- data/doc/fr_file_index.html +38 -0
- data/doc/fr_method_index.html +52 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/cachetastic.rb +20 -0
- data/lib/cachetastic/adapters/base.rb +178 -0
- data/lib/cachetastic/adapters/file.rb +66 -0
- data/lib/cachetastic/adapters/local_memory.rb +37 -0
- data/lib/cachetastic/adapters/memcached.rb +114 -0
- data/lib/cachetastic/cache.rb +165 -0
- data/lib/cachetastic/cacheable.rb +202 -0
- data/lib/cachetastic/extensions/string.rb +8 -0
- data/lib/cachetastic/logger.rb +49 -0
- data/lib/cachetastic/store_object.rb +22 -0
- metadata +122 -0
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2009 Mark Bates
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
=What is Cachetastic?
|
2
|
+
Cachetastic is an incredibly easy to use and administer caching framework. Just because it is easy to use, does not mean that
|
3
|
+
it is light with features. Cachetastic allows you to create classes that extend <tt>Cachetastic::Cache</tt>, configure them
|
4
|
+
each individually, and much more.
|
5
|
+
|
6
|
+
Unlike other systems each cache in your system can use different backends via the use of adapters that get assigned to each
|
7
|
+
cache, and globally. You can define different expiration times, loggers, marshal methods, and more! And again, you can choose to
|
8
|
+
define these settings globally, or for each cache!
|
9
|
+
|
10
|
+
Adapters are easy to write, so if the built in adapters don't float your boat, you can easily knock one off in short order.
|
11
|
+
|
12
|
+
==Configuration:
|
13
|
+
Configuration of Cachetastic is done using the Configatron gem. I would recommend reading the documentation on it first, http://configatron.mackframework.com, before continuing.
|
14
|
+
|
15
|
+
All configuration settings hang off of the <tt>cachetastic</tt> namespace on <tt>configatron</tt>. The default settings
|
16
|
+
all hang off the <tt>defaults</tt> namespace on the <tt>cachetastic</tt> namespace, as shown below:
|
17
|
+
|
18
|
+
# This will write detailed information to the logger.
|
19
|
+
configatron.cachetastic.defaults.debug = false
|
20
|
+
|
21
|
+
# This is the type of file store to be used for this cache.
|
22
|
+
# More adapters can be developed and plugged in as desired.
|
23
|
+
# The default is Cachetastic::Adapters::LocalMemory
|
24
|
+
configatron.cachetastic.defaults.adapter = Cachetastic::Adapters::LocalMemory
|
25
|
+
configatron.cachetastic.defaults.adapter = Cachetastic::Adapters::File
|
26
|
+
configatron.cachetastic.defaults.adapter = Cachetastic::Adapters::Memcached
|
27
|
+
|
28
|
+
# This will marshall objects into and out of the store.
|
29
|
+
# The default is :none, except for Cachetastic::Adapters::File, which defaults to :yaml
|
30
|
+
configatron.cachetastic.defaults.marshall_method = :none
|
31
|
+
configatron.cachetastic.defaults.marshall_method = :yaml
|
32
|
+
configatron.cachetastic.defaults.marshall_method = :ruby
|
33
|
+
|
34
|
+
# This sets how long objects will live in the cache before they are auto expired.
|
35
|
+
configatron.cachetastic.defaults.default_expiry = 86400 # time in seconds (default: 24 hours)
|
36
|
+
|
37
|
+
# When setting objects into the cache the expiry_swing is +/- to the expiry time.
|
38
|
+
# Example: if the expiry time is 1 minute, and the swing is 15 seconds,
|
39
|
+
# objects will go into the cache with an expiry time sometime between 45 seconds and 75 seconds.
|
40
|
+
# The default is 0 seconds.
|
41
|
+
configatron.cachetastic.defaults.expiry_swing = 15
|
42
|
+
|
43
|
+
# Configure logging for the system.
|
44
|
+
# n number of logs can be configured for a cache.
|
45
|
+
log_1 = Logger.new(STDOUT)
|
46
|
+
log_1.level = Logger::DEBUG
|
47
|
+
log_2 = Logger.new("log/cachetastic.log")
|
48
|
+
log_2.level = Logger::ERROR
|
49
|
+
configatron.cachetastic.defaults.logger = [log_1, log_2]
|
50
|
+
|
51
|
+
Overriding settings per cache is very simple. Let's take the following two caches:
|
52
|
+
|
53
|
+
class UserCache < Cachetastic::Cache
|
54
|
+
end
|
55
|
+
|
56
|
+
class Admin::UserCache < Cachetastic::Cache
|
57
|
+
end
|
58
|
+
|
59
|
+
If we wanted to set the <tt>UserCache</tt> to use the <tt>Cachetastic::Adapters::File</tt> adapter and we wanted to set the adapter for
|
60
|
+
the <tt>Admin::UserCache</tt> to use <tt>Cachetastic::Adapters::Memcached</tt>, we would configure them like such:
|
61
|
+
|
62
|
+
configatron.cachetastic.user_cache.adapter = Cachetastic::Adapters::File
|
63
|
+
configatron.cachetastic.admin.user_cache.adapter = Cachetastic::Adapters::Memcached
|
64
|
+
|
65
|
+
In this scenario we have changed the adapters for each of the classes. All of the other default settings will remain intact for
|
66
|
+
each of those classes. This makes it incredibly easy to just change the one parameter you need, and not have to reset them all.
|
67
|
+
|
68
|
+
==Examples:
|
69
|
+
|
70
|
+
class MyAwesomeCache < Cachetastic::Cache
|
71
|
+
end
|
72
|
+
|
73
|
+
MyAwesomeCache.set(1, [1,2,3])
|
74
|
+
MyAwesomeCache.get(1) # => [1,2,3]
|
75
|
+
|
76
|
+
class MyAwesomeCache < Cachetastic::Cache
|
77
|
+
class << self
|
78
|
+
def get(key, x, y)
|
79
|
+
super(key) do
|
80
|
+
n = x + y
|
81
|
+
set(key, n)
|
82
|
+
n
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
MyAwesomeCache.get(1, 2, 4) # => 8
|
89
|
+
MyAwesomeCache.get(1, 4, 4) # => 8
|
@@ -0,0 +1,180 @@
|
|
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>Module: Cachetastic::Adapters</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>Module</strong></td>
|
53
|
+
<td class="class-name-in-header">Cachetastic::Adapters</td>
|
54
|
+
</tr>
|
55
|
+
<tr class="top-aligned-row">
|
56
|
+
<td><strong>In:</strong></td>
|
57
|
+
<td>
|
58
|
+
<a href="../../files/lib/cachetastic/adapters/base_rb.html">
|
59
|
+
lib/cachetastic/adapters/base.rb
|
60
|
+
</a>
|
61
|
+
<br />
|
62
|
+
<a href="../../files/lib/cachetastic/adapters/file_rb.html">
|
63
|
+
lib/cachetastic/adapters/file.rb
|
64
|
+
</a>
|
65
|
+
<br />
|
66
|
+
<a href="../../files/lib/cachetastic/adapters/local_memory_rb.html">
|
67
|
+
lib/cachetastic/adapters/local_memory.rb
|
68
|
+
</a>
|
69
|
+
<br />
|
70
|
+
<a href="../../files/lib/cachetastic/adapters/memcached_rb.html">
|
71
|
+
lib/cachetastic/adapters/memcached.rb
|
72
|
+
</a>
|
73
|
+
<br />
|
74
|
+
</td>
|
75
|
+
</tr>
|
76
|
+
|
77
|
+
</table>
|
78
|
+
</div>
|
79
|
+
<!-- banner header -->
|
80
|
+
|
81
|
+
<div id="bodyContent">
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
<div id="contextContent">
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
</div>
|
90
|
+
|
91
|
+
<div id="method-list">
|
92
|
+
<h3 class="section-bar">Methods</h3>
|
93
|
+
|
94
|
+
<div class="name-list">
|
95
|
+
<a href="#M000001">build</a>
|
96
|
+
</div>
|
97
|
+
</div>
|
98
|
+
|
99
|
+
</div>
|
100
|
+
|
101
|
+
|
102
|
+
<!-- if includes -->
|
103
|
+
|
104
|
+
<div id="section">
|
105
|
+
|
106
|
+
<div id="class-list">
|
107
|
+
<h3 class="section-bar">Classes and Modules</h3>
|
108
|
+
|
109
|
+
Class <a href="Adapters/Base.html" class="link">Cachetastic::Adapters::Base</a><br />
|
110
|
+
Class <a href="Adapters/File.html" class="link">Cachetastic::Adapters::File</a><br />
|
111
|
+
Class <a href="Adapters/LocalMemory.html" class="link">Cachetastic::Adapters::LocalMemory</a><br />
|
112
|
+
Class <a href="Adapters/Memcached.html" class="link">Cachetastic::Adapters::Memcached</a><br />
|
113
|
+
|
114
|
+
</div>
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
<!-- if method_list -->
|
123
|
+
<div id="methods">
|
124
|
+
<h3 class="section-bar">Public Class methods</h3>
|
125
|
+
|
126
|
+
<div id="method-M000001" class="method-detail">
|
127
|
+
<a name="M000001"></a>
|
128
|
+
|
129
|
+
<div class="method-heading">
|
130
|
+
<a href="#M000001" class="method-signature">
|
131
|
+
<span class="method-name">build</span><span class="method-args">(klass)</span>
|
132
|
+
</a>
|
133
|
+
</div>
|
134
|
+
|
135
|
+
<div class="method-description">
|
136
|
+
<p>
|
137
|
+
This method will return the appropriate <tt><a
|
138
|
+
href="Adapters/Base.html">Cachetastic::Adapters::Base</a></tt> class that
|
139
|
+
is defined for the Class passed in. If an adapter has not been defined for
|
140
|
+
the Class than the default adapter is returned.
|
141
|
+
</p>
|
142
|
+
<p>
|
143
|
+
Examples:
|
144
|
+
</p>
|
145
|
+
<pre>
|
146
|
+
configatron.cachetastic.defaults.adapter = Cachetastic::Adapters::LocalMemory
|
147
|
+
configatron.cachetastic.user.adapter = Cachetastic::Adapters::Memcached
|
148
|
+
Cachetastic::Adapters.build(User).class # => Cachetastic::Adapters::Memcached
|
149
|
+
Cachetastic::Adapters.build(Comment).class # => Cachetastic::Adapters::LocalMemory
|
150
|
+
</pre>
|
151
|
+
<p><a class="source-toggle" href="#"
|
152
|
+
onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
|
153
|
+
<div class="method-source-code" id="M000001-source">
|
154
|
+
<pre>
|
155
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 16</span>
|
156
|
+
16: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">build</span>(<span class="ruby-identifier">klass</span>)
|
157
|
+
17: <span class="ruby-identifier">adp</span> = <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_configatron</span>(<span class="ruby-identifier">:cachetastic</span>).<span class="ruby-identifier">adapter</span>
|
158
|
+
18: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">adp</span>.<span class="ruby-identifier">nil?</span>
|
159
|
+
19: <span class="ruby-identifier">adp</span> = <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">cachetastic</span>.<span class="ruby-identifier">defaults</span>.<span class="ruby-identifier">adapter</span>
|
160
|
+
20: <span class="ruby-keyword kw">end</span>
|
161
|
+
21: <span class="ruby-identifier">adp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">klass</span>)
|
162
|
+
22: <span class="ruby-keyword kw">end</span>
|
163
|
+
</pre>
|
164
|
+
</div>
|
165
|
+
</div>
|
166
|
+
</div>
|
167
|
+
|
168
|
+
|
169
|
+
</div>
|
170
|
+
|
171
|
+
|
172
|
+
</div>
|
173
|
+
|
174
|
+
|
175
|
+
<div id="validator-badges">
|
176
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
177
|
+
</div>
|
178
|
+
|
179
|
+
</body>
|
180
|
+
</html>
|
@@ -0,0 +1,419 @@
|
|
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::Base</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::Base</td>
|
54
|
+
</tr>
|
55
|
+
<tr class="top-aligned-row">
|
56
|
+
<td><strong>In:</strong></td>
|
57
|
+
<td>
|
58
|
+
<a href="../../../files/lib/cachetastic/adapters/base_rb.html">
|
59
|
+
lib/cachetastic/adapters/base.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
|
+
Object
|
69
|
+
</td>
|
70
|
+
</tr>
|
71
|
+
</table>
|
72
|
+
</div>
|
73
|
+
<!-- banner header -->
|
74
|
+
|
75
|
+
<div id="bodyContent">
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
<div id="contextContent">
|
80
|
+
|
81
|
+
<div id="description">
|
82
|
+
<p>
|
83
|
+
This class should be extended to create <a href="Base.html#M000003">new</a>
|
84
|
+
adapters for various backends. It is important that all subclasses call the
|
85
|
+
<tt>initialize</tt> method in this base, otherwise things just will not
|
86
|
+
work right.
|
87
|
+
</p>
|
88
|
+
<p>
|
89
|
+
This base class provides common functionality and an API for all adapters
|
90
|
+
to be used with Cachetastic.
|
91
|
+
</p>
|
92
|
+
<p>
|
93
|
+
The default settings for all adapters are:
|
94
|
+
</p>
|
95
|
+
<pre>
|
96
|
+
configatron.cachetastic.defaults.marshal_method = :none
|
97
|
+
configatron.cachetastic.defaults.expiry_swing = 0
|
98
|
+
configatron.cachetastic.defaults.default_expiry = 86400
|
99
|
+
configatron.cachetastic.defaults.debug = true
|
100
|
+
configatron.cachetastic.defaults.adapter = Cachetastic::Adapters::LocalMemory
|
101
|
+
logger = ::Logger.new(File.join(FileUtils.pwd, 'log', 'cachetastic.log'))
|
102
|
+
logger.level = ::Logger::DEBUG
|
103
|
+
configatron.cachetastic.defaults.logger = logger
|
104
|
+
</pre>
|
105
|
+
<p>
|
106
|
+
See the README for more information on what each of those settings mean,
|
107
|
+
and what are values may be used for each one.
|
108
|
+
</p>
|
109
|
+
|
110
|
+
</div>
|
111
|
+
|
112
|
+
|
113
|
+
</div>
|
114
|
+
|
115
|
+
<div id="method-list">
|
116
|
+
<h3 class="section-bar">Methods</h3>
|
117
|
+
|
118
|
+
<div class="name-list">
|
119
|
+
<a href="#M000006">delete</a>
|
120
|
+
<a href="#M000007">expire_all</a>
|
121
|
+
<a href="#M000004">get</a>
|
122
|
+
<a href="#M000003">new</a>
|
123
|
+
<a href="#M000005">set</a>
|
124
|
+
<a href="#M000008">transform_key</a>
|
125
|
+
<a href="#M000009">valid?</a>
|
126
|
+
</div>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
</div>
|
130
|
+
|
131
|
+
|
132
|
+
<!-- if includes -->
|
133
|
+
|
134
|
+
<div id="section">
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
<div id="attribute-list">
|
141
|
+
<h3 class="section-bar">Attributes</h3>
|
142
|
+
|
143
|
+
<div class="name-list">
|
144
|
+
<table>
|
145
|
+
<tr class="top-aligned-row context-row">
|
146
|
+
<td class="context-item-name">klass</td>
|
147
|
+
<td class="context-item-value"> [RW] </td>
|
148
|
+
<td class="context-item-desc">
|
149
|
+
The Class that this adapter is associated with. Note that it is a
|
150
|
+
<em>class</em> reference and not an instance reference.
|
151
|
+
|
152
|
+
</td>
|
153
|
+
</tr>
|
154
|
+
</table>
|
155
|
+
</div>
|
156
|
+
</div>
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
<!-- if method_list -->
|
161
|
+
<div id="methods">
|
162
|
+
<h3 class="section-bar">Public Class methods</h3>
|
163
|
+
|
164
|
+
<div id="method-M000003" class="method-detail">
|
165
|
+
<a name="M000003"></a>
|
166
|
+
|
167
|
+
<div class="method-heading">
|
168
|
+
<a href="#M000003" class="method-signature">
|
169
|
+
<span class="method-name">new</span><span class="method-args">(klass)</span>
|
170
|
+
</a>
|
171
|
+
</div>
|
172
|
+
|
173
|
+
<div class="method-description">
|
174
|
+
<p>
|
175
|
+
Creates a <a href="Base.html#M000003">new</a> adapter. It takes a class
|
176
|
+
reference to tie the instance of the adapter to a particular class. Note
|
177
|
+
that it is a <em>class</em> reference and not an instance reference.
|
178
|
+
</p>
|
179
|
+
<p>
|
180
|
+
Examples:
|
181
|
+
</p>
|
182
|
+
<pre>
|
183
|
+
Cachetastic::Adapters::Base.new(User)
|
184
|
+
</pre>
|
185
|
+
<p>
|
186
|
+
<a href="../Adapters.html">Adapters</a> are configured using the
|
187
|
+
Configatron gem.
|
188
|
+
</p>
|
189
|
+
<p>
|
190
|
+
Examples:
|
191
|
+
</p>
|
192
|
+
<pre>
|
193
|
+
configatron.cachetastic.user.adapter = Cachetastic::Adapters::File
|
194
|
+
configatron.cachetastic.user.expiry_time = 5.hours
|
195
|
+
configatron.cachetastic.defaults.expiry_time = 24.hours
|
196
|
+
</pre>
|
197
|
+
<p>
|
198
|
+
Refered to each adapter for its specific configuration settings.
|
199
|
+
</p>
|
200
|
+
<p><a class="source-toggle" href="#"
|
201
|
+
onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
|
202
|
+
<div class="method-source-code" id="M000003-source">
|
203
|
+
<pre>
|
204
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 67</span>
|
205
|
+
67: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">klass</span>)
|
206
|
+
68: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">klass</span> = <span class="ruby-identifier">klass</span>
|
207
|
+
69: <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">cachetastic</span>.<span class="ruby-identifier">defaults</span>.<span class="ruby-identifier">configatron_keys</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-operator">|</span>
|
208
|
+
70: <span class="ruby-identifier">define_accessor</span>(<span class="ruby-identifier">key</span>)
|
209
|
+
71: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">"#{key}="</span>, <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">cachetastic</span>.<span class="ruby-identifier">defaults</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">key</span>))
|
210
|
+
72: <span class="ruby-keyword kw">end</span>
|
211
|
+
73: <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_configatron</span>(<span class="ruby-identifier">:cachetastic</span>).<span class="ruby-identifier">configatron_keys</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-operator">|</span>
|
212
|
+
74: <span class="ruby-identifier">define_accessor</span>(<span class="ruby-identifier">key</span>)
|
213
|
+
75: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">"#{key}="</span>, <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_configatron</span>(<span class="ruby-identifier">:cachetastic</span>).<span class="ruby-identifier">send</span>(<span class="ruby-identifier">key</span>))
|
214
|
+
76: <span class="ruby-keyword kw">end</span>
|
215
|
+
77: <span class="ruby-keyword kw">end</span>
|
216
|
+
</pre>
|
217
|
+
</div>
|
218
|
+
</div>
|
219
|
+
</div>
|
220
|
+
|
221
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
222
|
+
|
223
|
+
<div id="method-M000006" class="method-detail">
|
224
|
+
<a name="M000006"></a>
|
225
|
+
|
226
|
+
<div class="method-heading">
|
227
|
+
<a href="#M000006" class="method-signature">
|
228
|
+
<span class="method-name">delete</span><span class="method-args">(key)</span>
|
229
|
+
</a>
|
230
|
+
</div>
|
231
|
+
|
232
|
+
<div class="method-description">
|
233
|
+
<p>
|
234
|
+
<b>This method MUST be implemented by a subclass!</b>
|
235
|
+
</p>
|
236
|
+
<p>
|
237
|
+
The implementation of this method should take a key and remove an object,
|
238
|
+
if it exists, from an underlying persistence store.
|
239
|
+
</p>
|
240
|
+
<p><a class="source-toggle" href="#"
|
241
|
+
onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
|
242
|
+
<div class="method-source-code" id="M000006-source">
|
243
|
+
<pre>
|
244
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 101</span>
|
245
|
+
101: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>)
|
246
|
+
102: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NoMethodError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'delete'</span>)
|
247
|
+
103: <span class="ruby-keyword kw">end</span>
|
248
|
+
</pre>
|
249
|
+
</div>
|
250
|
+
</div>
|
251
|
+
</div>
|
252
|
+
|
253
|
+
<div id="method-M000007" class="method-detail">
|
254
|
+
<a name="M000007"></a>
|
255
|
+
|
256
|
+
<div class="method-heading">
|
257
|
+
<a href="#M000007" class="method-signature">
|
258
|
+
<span class="method-name">expire_all</span><span class="method-args">()</span>
|
259
|
+
</a>
|
260
|
+
</div>
|
261
|
+
|
262
|
+
<div class="method-description">
|
263
|
+
<p>
|
264
|
+
<b>This method MUST be implemented by a subclass!</b>
|
265
|
+
</p>
|
266
|
+
<p>
|
267
|
+
The implementation of this method is expected to <a
|
268
|
+
href="Base.html#M000006">delete</a> all objects belonging to the associated
|
269
|
+
cache from the underlying persistence store. It is <b>NOT</b> meant to <a
|
270
|
+
href="Base.html#M000006">delete</a> <b>ALL</b> objects across <b>ALL</b>
|
271
|
+
caches for the underlying persistence store. That would be very very bad!!
|
272
|
+
</p>
|
273
|
+
<p><a class="source-toggle" href="#"
|
274
|
+
onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
|
275
|
+
<div class="method-source-code" id="M000007-source">
|
276
|
+
<pre>
|
277
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 112</span>
|
278
|
+
112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expire_all</span>
|
279
|
+
113: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NoMethodError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'expire_all'</span>)
|
280
|
+
114: <span class="ruby-keyword kw">end</span>
|
281
|
+
</pre>
|
282
|
+
</div>
|
283
|
+
</div>
|
284
|
+
</div>
|
285
|
+
|
286
|
+
<div id="method-M000004" class="method-detail">
|
287
|
+
<a name="M000004"></a>
|
288
|
+
|
289
|
+
<div class="method-heading">
|
290
|
+
<a href="#M000004" class="method-signature">
|
291
|
+
<span class="method-name">get</span><span class="method-args">(key)</span>
|
292
|
+
</a>
|
293
|
+
</div>
|
294
|
+
|
295
|
+
<div class="method-description">
|
296
|
+
<p>
|
297
|
+
<b>This method MUST be implemented by a subclass!</b>
|
298
|
+
</p>
|
299
|
+
<p>
|
300
|
+
The implementation of this method should take a key and return an
|
301
|
+
associated object, if available, from the underlying persistence layer.
|
302
|
+
</p>
|
303
|
+
<p><a class="source-toggle" href="#"
|
304
|
+
onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
|
305
|
+
<div class="method-source-code" id="M000004-source">
|
306
|
+
<pre>
|
307
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 84</span>
|
308
|
+
84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">key</span>)
|
309
|
+
85: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NoMethodError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'get'</span>)
|
310
|
+
86: <span class="ruby-keyword kw">end</span>
|
311
|
+
</pre>
|
312
|
+
</div>
|
313
|
+
</div>
|
314
|
+
</div>
|
315
|
+
|
316
|
+
<div id="method-M000005" class="method-detail">
|
317
|
+
<a name="M000005"></a>
|
318
|
+
|
319
|
+
<div class="method-heading">
|
320
|
+
<a href="#M000005" class="method-signature">
|
321
|
+
<span class="method-name">set</span><span class="method-args">(key, value, expiry_time = configatron.cachetastic.defaults.default_expiry)</span>
|
322
|
+
</a>
|
323
|
+
</div>
|
324
|
+
|
325
|
+
<div class="method-description">
|
326
|
+
<p>
|
327
|
+
<b>This method MUST be implemented by a subclass!</b>
|
328
|
+
</p>
|
329
|
+
<p>
|
330
|
+
The implementation of this method should take a key, a value, and an expiry
|
331
|
+
time and save it to the persistence store, where it should live until it is
|
332
|
+
either deleted by the user of the expiry time has passed.
|
333
|
+
</p>
|
334
|
+
<p><a class="source-toggle" href="#"
|
335
|
+
onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
|
336
|
+
<div class="method-source-code" id="M000005-source">
|
337
|
+
<pre>
|
338
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 93</span>
|
339
|
+
93: <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_time</span> = <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">cachetastic</span>.<span class="ruby-identifier">defaults</span>.<span class="ruby-identifier">default_expiry</span>)
|
340
|
+
94: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NoMethodError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'set'</span>)
|
341
|
+
95: <span class="ruby-keyword kw">end</span>
|
342
|
+
</pre>
|
343
|
+
</div>
|
344
|
+
</div>
|
345
|
+
</div>
|
346
|
+
|
347
|
+
<div id="method-M000008" class="method-detail">
|
348
|
+
<a name="M000008"></a>
|
349
|
+
|
350
|
+
<div class="method-heading">
|
351
|
+
<a href="#M000008" class="method-signature">
|
352
|
+
<span class="method-name">transform_key</span><span class="method-args">(key)</span>
|
353
|
+
</a>
|
354
|
+
</div>
|
355
|
+
|
356
|
+
<div class="method-description">
|
357
|
+
<p>
|
358
|
+
Allows an adapter to transform the key to a safe representation for
|
359
|
+
it‘s backend. For example, the key: ’$*…123()%~q’
|
360
|
+
is not a key for the file system, so the <a
|
361
|
+
href="File.html">Cachetastic::Adapters::File</a> class should override this
|
362
|
+
to make it safe for the file system.
|
363
|
+
</p>
|
364
|
+
<p><a class="source-toggle" href="#"
|
365
|
+
onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
|
366
|
+
<div class="method-source-code" id="M000008-source">
|
367
|
+
<pre>
|
368
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 122</span>
|
369
|
+
122: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">transform_key</span>(<span class="ruby-identifier">key</span>)
|
370
|
+
123: <span class="ruby-identifier">key</span>
|
371
|
+
124: <span class="ruby-keyword kw">end</span>
|
372
|
+
</pre>
|
373
|
+
</div>
|
374
|
+
</div>
|
375
|
+
</div>
|
376
|
+
|
377
|
+
<div id="method-M000009" class="method-detail">
|
378
|
+
<a name="M000009"></a>
|
379
|
+
|
380
|
+
<div class="method-heading">
|
381
|
+
<a href="#M000009" class="method-signature">
|
382
|
+
<span class="method-name">valid?</span><span class="method-args">()</span>
|
383
|
+
</a>
|
384
|
+
</div>
|
385
|
+
|
386
|
+
<div class="method-description">
|
387
|
+
<p>
|
388
|
+
<b>This method MUST be implemented by a subclass!</b>
|
389
|
+
</p>
|
390
|
+
<p>
|
391
|
+
The implementation of this method should return <tt>true</tt> if the
|
392
|
+
adapter is in a valid state, and <tt>false</tt> if it is not.
|
393
|
+
</p>
|
394
|
+
<p><a class="source-toggle" href="#"
|
395
|
+
onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
|
396
|
+
<div class="method-source-code" id="M000009-source">
|
397
|
+
<pre>
|
398
|
+
<span class="ruby-comment cmt"># File lib/cachetastic/adapters/base.rb, line 131</span>
|
399
|
+
131: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">valid?</span>
|
400
|
+
132: <span class="ruby-keyword kw">true</span>
|
401
|
+
133: <span class="ruby-keyword kw">end</span>
|
402
|
+
</pre>
|
403
|
+
</div>
|
404
|
+
</div>
|
405
|
+
</div>
|
406
|
+
|
407
|
+
|
408
|
+
</div>
|
409
|
+
|
410
|
+
|
411
|
+
</div>
|
412
|
+
|
413
|
+
|
414
|
+
<div id="validator-badges">
|
415
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
416
|
+
</div>
|
417
|
+
|
418
|
+
</body>
|
419
|
+
</html>
|