evented-memcache-client 1.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.
Files changed (43) hide show
  1. data/CHANGELOG +113 -0
  2. data/COPYING +348 -0
  3. data/README +75 -0
  4. data/Rakefile +123 -0
  5. data/doc/classes/EventMachine.html +146 -0
  6. data/doc/classes/EventMachine/Protocols.html +135 -0
  7. data/doc/classes/EventMachine/Protocols/Memcache.html +153 -0
  8. data/doc/classes/EventMachine/Protocols/Memcache/Client.html +121 -0
  9. data/doc/classes/EventMachine/Protocols/Memcache/Connectable.html +615 -0
  10. data/doc/classes/EventMachine/Protocols/Memcache/Connection.html +192 -0
  11. data/doc/classes/EventMachine/Protocols/Memcache/Sender.html +389 -0
  12. data/doc/classes/EventMachine/Protocols/Memcache/Server.html +463 -0
  13. data/doc/classes/EventMachine/Protocols/Memcache/TenaciousMC.html +277 -0
  14. data/doc/classes/MyHandler.html +197 -0
  15. data/doc/created.rid +1 -0
  16. data/doc/files/COPYING.html +473 -0
  17. data/doc/files/README.html +187 -0
  18. data/doc/files/extras/consumer_rb.html +110 -0
  19. data/doc/files/extras/producer_rb.html +110 -0
  20. data/doc/files/extras/server_rb.html +110 -0
  21. data/doc/files/lib/evented-memcache-client_rb.html +125 -0
  22. data/doc/files/lib/evented_memcache_client/client_rb.html +120 -0
  23. data/doc/files/lib/evented_memcache_client/connectable_rb.html +120 -0
  24. data/doc/files/lib/evented_memcache_client/connection_rb.html +120 -0
  25. data/doc/files/lib/evented_memcache_client/sender_rb.html +112 -0
  26. data/doc/files/lib/evented_memcache_client/server_rb.html +120 -0
  27. data/doc/files/lib/evented_memcache_client/tenacious_rb.html +120 -0
  28. data/doc/fr_class_index.html +36 -0
  29. data/doc/fr_file_index.html +38 -0
  30. data/doc/fr_method_index.html +66 -0
  31. data/doc/index.html +24 -0
  32. data/doc/rdoc-style.css +208 -0
  33. data/extras/consumer.rb +41 -0
  34. data/extras/producer.rb +22 -0
  35. data/extras/server.rb +33 -0
  36. data/lib/evented-memcache-client.rb +37 -0
  37. data/lib/evented_memcache_client/client.rb +36 -0
  38. data/lib/evented_memcache_client/connectable.rb +324 -0
  39. data/lib/evented_memcache_client/connection.rb +73 -0
  40. data/lib/evented_memcache_client/sender.rb +184 -0
  41. data/lib/evented_memcache_client/server.rb +118 -0
  42. data/lib/evented_memcache_client/tenacious.rb +106 -0
  43. metadata +115 -0
@@ -0,0 +1,277 @@
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: EventMachine::Protocols::Memcache::TenaciousMC</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">EventMachine::Protocols::Memcache::TenaciousMC</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../../files/lib/evented_memcache_client/tenacious_rb.html">
59
+ lib/evented_memcache_client/tenacious.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="Client.html">
69
+ Client
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
+ <a href="TenaciousMC.html">TenaciousMC</a> is a &quot;tenacious&quot;
86
+ memcache client connection. When the underlying connection is lost, it
87
+ attempts to reacquire it automatically.
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="#M000026">connection_completed</a>&nbsp;&nbsp;
100
+ <a href="#M000025">new</a>&nbsp;&nbsp;
101
+ <a href="#M000027">unbind</a>&nbsp;&nbsp;
102
+ </div>
103
+ </div>
104
+
105
+ </div>
106
+
107
+
108
+ <!-- if includes -->
109
+
110
+ <div id="section">
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ <!-- if method_list -->
120
+ <div id="methods">
121
+ <h3 class="section-bar">Public Class methods</h3>
122
+
123
+ <div id="method-M000025" class="method-detail">
124
+ <a name="M000025"></a>
125
+
126
+ <div class="method-heading">
127
+ <a href="#M000025" class="method-signature">
128
+ <span class="method-name">new</span><span class="method-args">(*args)</span>
129
+ </a>
130
+ </div>
131
+
132
+ <div class="method-description">
133
+ <p>
134
+ Create a <a href="TenaciousMC.html#M000025">new</a> &quot;tenacious&quot;
135
+ connection, which will attempt to reacquire a connection to the server if
136
+ it is lost.
137
+ </p>
138
+ <p>
139
+ Note that when you&#8216;re using <a
140
+ href="../../../EventMachine.html">EventMachine</a>, you won&#8216;t be
141
+ calling TenaciousMC::new yourself - EM does it for you when a connection is
142
+ established.
143
+ </p>
144
+ <p>
145
+ First argument as per <a
146
+ href="Client.html">EventMachine::Protocols::Memcache::Client</a>. Ie.,
147
+ callback hash, module or handler object.
148
+ </p>
149
+ <p>
150
+ Second argument is hash of options governing <a
151
+ href="TenaciousMC.html">TenaciousMC</a>&#8216;s behavior:
152
+ </p>
153
+ <pre>
154
+ { :host =&gt; 'somewhere.com', :port=&gt;12345, :interval =&gt; 5 }
155
+ </pre>
156
+ <p>
157
+ If the options hash includes a :eager key, and its value is true, then when
158
+ the connection opens, <a href="TenaciousMC.html">TenaciousMC</a> will
159
+ immediately send a &#8216;get&#8217; to the server to fetch data, using the
160
+ value of the :key option as the key fetched.
161
+ </p>
162
+ <p>
163
+ So a typical invocation:
164
+ </p>
165
+ <pre>
166
+ EventMachine::run {
167
+ EventMachine::connect('over.there',
168
+ 12345,
169
+ EventMachine::Protocols::Memcache::TenaciousMC,
170
+ MyHandlerModule,
171
+ {:host =&gt; 'over.there', :port =&gt; 12345})
172
+ }
173
+ </pre>
174
+ <p><a class="source-toggle" href="#"
175
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
176
+ <div class="method-source-code" id="M000025-source">
177
+ <pre>
178
+ <span class="ruby-comment cmt"># File lib/evented_memcache_client/tenacious.rb, line 65</span>
179
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
180
+ 66: <span class="ruby-ivar">@handle_arg</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
181
+ 67: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]
182
+ 68: <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:host</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'localhost'</span>
183
+ 69: <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:port</span>]
184
+ 70: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;No port option is set&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@port</span>
185
+ 71: <span class="ruby-ivar">@interval</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:interval</span>] <span class="ruby-operator">||</span> <span class="ruby-value">5</span>
186
+ 72: <span class="ruby-ivar">@eager</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:eager</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword kw">false</span>
187
+ 73: <span class="ruby-ivar">@key</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:key</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword kw">nil</span>
188
+ 74: <span class="ruby-keyword kw">super</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
189
+ 75: <span class="ruby-keyword kw">end</span>
190
+ </pre>
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ <h3 class="section-bar">Public Instance methods</h3>
196
+
197
+ <div id="method-M000026" class="method-detail">
198
+ <a name="M000026"></a>
199
+
200
+ <div class="method-heading">
201
+ <a href="#M000026" class="method-signature">
202
+ <span class="method-name">connection_completed</span><span class="method-args">()</span>
203
+ </a>
204
+ </div>
205
+
206
+ <div class="method-description">
207
+ <p>
208
+ Called from EM::Connection after the connection is established.
209
+ </p>
210
+ <p><a class="source-toggle" href="#"
211
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
212
+ <div class="method-source-code" id="M000026-source">
213
+ <pre>
214
+ <span class="ruby-comment cmt"># File lib/evented_memcache_client/tenacious.rb, line 78</span>
215
+ 78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connection_completed</span>
216
+ 79: <span class="ruby-keyword kw">super</span>
217
+ 80: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@eager</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@key</span>
218
+ 81: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@key</span>)
219
+ 82: <span class="ruby-keyword kw">end</span>
220
+ 83: <span class="ruby-keyword kw">end</span>
221
+ </pre>
222
+ </div>
223
+ </div>
224
+ </div>
225
+
226
+ <div id="method-M000027" class="method-detail">
227
+ <a name="M000027"></a>
228
+
229
+ <div class="method-heading">
230
+ <a href="#M000027" class="method-signature">
231
+ <span class="method-name">unbind</span><span class="method-args">()</span>
232
+ </a>
233
+ </div>
234
+
235
+ <div class="method-description">
236
+ <p>
237
+ Called from EM::Connection when the connection is dead.
238
+ </p>
239
+ <p><a class="source-toggle" href="#"
240
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
241
+ <div class="method-source-code" id="M000027-source">
242
+ <pre>
243
+ <span class="ruby-comment cmt"># File lib/evented_memcache_client/tenacious.rb, line 86</span>
244
+ 86: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unbind</span>
245
+ 87: <span class="ruby-keyword kw">super</span>
246
+ 88: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@interval</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
247
+ 89: <span class="ruby-constant">EventMachine</span><span class="ruby-operator">::</span><span class="ruby-identifier">add_timer</span>(<span class="ruby-ivar">@interval</span>) <span class="ruby-keyword kw">do</span>
248
+ 90: <span class="ruby-constant">EventMachine</span><span class="ruby-operator">::</span><span class="ruby-identifier">connect</span>(<span class="ruby-ivar">@host</span>,
249
+ 91: <span class="ruby-ivar">@port</span>,
250
+ 92: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>,
251
+ 93: <span class="ruby-ivar">@handle_arg</span>,
252
+ 94: {
253
+ 95: <span class="ruby-identifier">:host</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@host</span>,
254
+ 96: <span class="ruby-identifier">:port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@port</span>,
255
+ 97: <span class="ruby-identifier">:interval</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@interval</span>
256
+ 98: })
257
+ 99: <span class="ruby-keyword kw">end</span>
258
+ 100: <span class="ruby-keyword kw">end</span>
259
+ 101: <span class="ruby-keyword kw">end</span>
260
+ </pre>
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+
266
+ </div>
267
+
268
+
269
+ </div>
270
+
271
+
272
+ <div id="validator-badges">
273
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
274
+ </div>
275
+
276
+ </body>
277
+ </html>
@@ -0,0 +1,197 @@
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: MyHandler</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">MyHandler</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/extras/consumer_rb.html">
59
+ extras/consumer.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+
76
+
77
+ </div>
78
+
79
+ <div id="method-list">
80
+ <h3 class="section-bar">Methods</h3>
81
+
82
+ <div class="name-list">
83
+ <a href="#M000002">handle_close</a>&nbsp;&nbsp;
84
+ <a href="#M000001">handle_open</a>&nbsp;&nbsp;
85
+ <a href="#M000003">handle_value</a>&nbsp;&nbsp;
86
+ </div>
87
+ </div>
88
+
89
+ </div>
90
+
91
+
92
+ <!-- if includes -->
93
+
94
+ <div id="section">
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ <!-- if method_list -->
104
+ <div id="methods">
105
+ <h3 class="section-bar">Public Instance methods</h3>
106
+
107
+ <div id="method-M000002" class="method-detail">
108
+ <a name="M000002"></a>
109
+
110
+ <div class="method-heading">
111
+ <a href="#M000002" class="method-signature">
112
+ <span class="method-name">handle_close</span><span class="method-args">(conn)</span>
113
+ </a>
114
+ </div>
115
+
116
+ <div class="method-description">
117
+ <p><a class="source-toggle" href="#"
118
+ onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
119
+ <div class="method-source-code" id="M000002-source">
120
+ <pre>
121
+ <span class="ruby-comment cmt"># File extras/consumer.rb, line 12</span>
122
+ 12: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_close</span>(<span class="ruby-identifier">conn</span>)
123
+ 13: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@opened_at</span>
124
+ 14: <span class="ruby-identifier">puts</span> <span class="ruby-value str">'Lost connection to memcached.'</span>
125
+ 15: <span class="ruby-keyword kw">else</span>
126
+ 16: <span class="ruby-identifier">puts</span> <span class="ruby-value str">'Failed to open connection to memcached, retrying.'</span>
127
+ 17: <span class="ruby-keyword kw">end</span>
128
+ 18: <span class="ruby-keyword kw">end</span>
129
+ </pre>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <div id="method-M000001" class="method-detail">
135
+ <a name="M000001"></a>
136
+
137
+ <div class="method-heading">
138
+ <a href="#M000001" class="method-signature">
139
+ <span class="method-name">handle_open</span><span class="method-args">(conn)</span>
140
+ </a>
141
+ </div>
142
+
143
+ <div class="method-description">
144
+ <p><a class="source-toggle" href="#"
145
+ onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
146
+ <div class="method-source-code" id="M000001-source">
147
+ <pre>
148
+ <span class="ruby-comment cmt"># File extras/consumer.rb, line 8</span>
149
+ 8: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_open</span>(<span class="ruby-identifier">conn</span>)
150
+ 9: <span class="ruby-ivar">@opened_at</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
151
+ 10: <span class="ruby-identifier">puts</span> <span class="ruby-value str">'Opened connection. Fetching...'</span>
152
+ 11: <span class="ruby-keyword kw">end</span>
153
+ </pre>
154
+ </div>
155
+ </div>
156
+ </div>
157
+
158
+ <div id="method-M000003" class="method-detail">
159
+ <a name="M000003"></a>
160
+
161
+ <div class="method-heading">
162
+ <a href="#M000003" class="method-signature">
163
+ <span class="method-name">handle_value</span><span class="method-args">(conn, data, args)</span>
164
+ </a>
165
+ </div>
166
+
167
+ <div class="method-description">
168
+ <p><a class="source-toggle" href="#"
169
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
170
+ <div class="method-source-code" id="M000003-source">
171
+ <pre>
172
+ <span class="ruby-comment cmt"># File extras/consumer.rb, line 19</span>
173
+ 19: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_value</span>(<span class="ruby-identifier">conn</span>, <span class="ruby-identifier">data</span>, <span class="ruby-identifier">args</span>)
174
+ 20: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
175
+ 21: <span class="ruby-identifier">flags</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]
176
+ 22: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Received message: '#{data}'&quot;</span>
177
+ 23: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Fetching more... #{@key}.&quot;</span>
178
+ 24: <span class="ruby-identifier">conn</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">:key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>)
179
+ 25: <span class="ruby-keyword kw">end</span>
180
+ </pre>
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+
186
+ </div>
187
+
188
+
189
+ </div>
190
+
191
+
192
+ <div id="validator-badges">
193
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
194
+ </div>
195
+
196
+ </body>
197
+ </html>