evented-memcache-client 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/README ADDED
@@ -0,0 +1,75 @@
1
+ = INTRODUCTION
2
+
3
+ Evented Memcache Client is a memcache client written for Ruby's
4
+ EventMachine. It implements a full (though simple) memcache client.
5
+
6
+ = INSTALLATION
7
+
8
+ You'll need eventmachine:
9
+
10
+ sudo gem install eventmachine
11
+
12
+ Then:
13
+
14
+ sudo gem install evented-memcache-client
15
+
16
+ Naturally a running memcache or starling is needed too. I use
17
+ starling:
18
+
19
+ sudo gem install starling
20
+ sudo starling -p 12345
21
+
22
+ = USAGE
23
+
24
+ Here is a producer:
25
+
26
+ require 'rubygems'
27
+ require 'eventmachine'
28
+ require 'evented-memcache-client'
29
+
30
+ callbacks = {
31
+ :open => Proc.new { |conn|
32
+ conn.set(:key => 'x', :data => Time.now.to_s)
33
+ },
34
+ :stored => Proc.new { |conn, data, args|
35
+ puts "Stored a value"
36
+ EventMachine::stop
37
+ },
38
+ }
39
+ EventMachine::run {
40
+ EventMachine::connect('127.0.0.1',
41
+ 12345,
42
+ EventMachine::Protocols::Memcache::Client,
43
+ callbacks)
44
+ }
45
+
46
+ And here is a consumer:
47
+
48
+ require 'rubygems'
49
+ require 'eventmachine'
50
+ require 'evented-memcache-client'
51
+
52
+ callbacks = {
53
+ :open => Proc.new { |conn|
54
+ puts 'Opened connection. Fetching...'
55
+ conn.get(:key => 'x')
56
+ },
57
+ :value => Proc.new { |conn, data, args|
58
+ key = args[0]
59
+ flags = args[1]
60
+ puts "Received message: '#{data}'"
61
+ puts 'Fetching more...'
62
+ conn.get(:key => 'x')
63
+ }
64
+ }
65
+ EventMachine::run {
66
+ EventMachine::connect('127.0.0.1',
67
+ 12345,
68
+ EventMachine::Protocols::Memcache::Client,
69
+ callbacks)
70
+ }
71
+
72
+ = TODO
73
+
74
+ Needs a test suite.
75
+
@@ -0,0 +1,123 @@
1
+ #############################################################################
2
+ #
3
+ # $Id$
4
+ #
5
+ # Author:: Colin Steele (colin@colinsteele.org)
6
+ # Homepage::
7
+ #
8
+ #----------------------------------------------------------------------------
9
+ #
10
+ # Copyright (C) 2008 by Colin Steele. All Rights Reserved.
11
+ # colin@colinsteele.org
12
+ #
13
+ # This program is free software; you can redistribute it and/or modify
14
+ # it under the terms of either: 1) the GNU General Public License
15
+ # as published by the Free Software Foundation; either version 2 of the
16
+ # License, or (at your option) any later version; or 2) Ruby's License.
17
+ #
18
+ # See the file COPYING for complete licensing information.
19
+ #
20
+ #---------------------------------------------------------------------------
21
+ #
22
+ #
23
+ #############################################################################
24
+
25
+ $:.unshift(File.dirname(__FILE__) + "/lib")
26
+
27
+ require 'evented-memcache-client'
28
+ require 'rubygems'
29
+ require 'rake'
30
+ require 'rubyforge'
31
+
32
+ PKG_NAME = "evented-memcache-client"
33
+ PKG_VERSION = EventMachine::Protocols::Memcache::VERSION
34
+ RUBYFORGE_GROUP_ID = 'ev-memcache-cli'
35
+ RUBYFORGE_PKG_NAME = 'ev-memcache-cli'
36
+
37
+ Gem::manage_gems
38
+ require 'rake/testtask'
39
+ require 'rake/rdoctask'
40
+ require 'rake/gempackagetask'
41
+
42
+ task :default => [:test]
43
+
44
+ desc "Create a new gem and install it"
45
+ task(:setup => :package) do
46
+ puts %x[cd pkg;pwd;sudo -p "Password:" gem install evented-memcache-client-#{PKG_VERSION}.gem]
47
+ end
48
+
49
+ desc "Recreate the CHANGELOG"
50
+ task(:changelog) do
51
+ rm 'CHANGELOG', :force => true
52
+ File.open('CHANGELOG', 'w') { |f|
53
+ f.puts "#"
54
+ f.puts "# This file is automatically generated using 'rake changelog'"
55
+ f.puts "#"
56
+ }
57
+ puts %x[git log --pretty --name-only >> CHANGELOG]
58
+ end
59
+
60
+ Rake::TestTask.new do |t|
61
+ t.libs << "test"
62
+ t.test_files = FileList['test/**/*.rb']
63
+ end
64
+
65
+ Rake::RDocTask.new do |rd|
66
+ rd.main = "README"
67
+ rd.rdoc_files.include("README", 'COPYING', "lib/**/*.rb", "extras/**/*")
68
+ rd.rdoc_dir = 'doc'
69
+ rd.title = "Evented Memcache Client"
70
+ rd.options << '--line-numbers'
71
+ rd.options << '--inline-source'
72
+ rd.options << '--main' << 'README'
73
+ end
74
+
75
+ spec = Gem::Specification.new do |s|
76
+ s.platform = Gem::Platform::RUBY
77
+ s.name = PKG_NAME
78
+ s.version = PKG_VERSION
79
+ s.author = "Colin Steele"
80
+ s.email = "colin@colinsteele.org"
81
+ s.homepage = "http://www.colinsteele.org/emc"
82
+ s.summary = "Eventmachine-based Memcache client"
83
+ s.files = Rake::FileList["{extras,lib,doc}/**/*"].to_a
84
+ s.require_path = "lib"
85
+ s.test_files = Rake::FileList["{test}/**/*test.rb"].to_a
86
+ s.has_rdoc = true
87
+ s.extra_rdoc_files = ["README", "COPYING", "Rakefile", "CHANGELOG"]
88
+ s.add_dependency("eventmachine", ">= 0.12.0")
89
+ s.rubyforge_project = 'ev-memcache-cli'
90
+ s.description = <<EOF
91
+ A memcache client built on EventMachine.
92
+ EOF
93
+ end
94
+
95
+ Rake::GemPackageTask.new(spec) do |pkg|
96
+ pkg.need_zip = true
97
+ pkg.need_tar = true
98
+ end
99
+
100
+ desc 'Package and upload the release to rubyforge.'
101
+ task :release => [:clobber_package, :package] do |t|
102
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
103
+ abort "Versions don't match #{v} vs #{version}" if v != PKG_VERSION
104
+ pkg = "pkg/#{PKG_NAME}-#{v}"
105
+
106
+ if $DEBUG then
107
+ puts "release_id = rf.add_release #{rubyforge_name.inspect}, #{name.inspect}, #{version.inspect}, \"#{pkg}.tgz\""
108
+ puts "rf.add_file #{rubyforge_name.inspect}, #{name.inspect}, release_id, \"#{pkg}.gem\""
109
+ end
110
+
111
+ rf = RubyForge.new.configure
112
+ puts "Logging in"
113
+ rf.login
114
+
115
+ c = rf.userconfig
116
+ c["release_notes"] = spec.description if spec.description
117
+ # c["release_changes"] = spec.changes if spec.changes
118
+ c["preformatted"] = true
119
+
120
+ p files = ["#{pkg}.tgz", "#{pkg}.zip", "#{pkg}.gem"]
121
+ puts "Releasing #{PKG_NAME} v. #{v}"
122
+ rf.add_release RUBYFORGE_GROUP_ID, RUBYFORGE_PKG_NAME, v, *files
123
+ end
@@ -0,0 +1,146 @@
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: EventMachine</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">EventMachine</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_rb.html">
59
+ lib/evented-memcache-client.rb
60
+ </a>
61
+ <br />
62
+ <a href="../files/lib/evented_memcache_client/client_rb.html">
63
+ lib/evented_memcache_client/client.rb
64
+ </a>
65
+ <br />
66
+ <a href="../files/lib/evented_memcache_client/connectable_rb.html">
67
+ lib/evented_memcache_client/connectable.rb
68
+ </a>
69
+ <br />
70
+ <a href="../files/lib/evented_memcache_client/connection_rb.html">
71
+ lib/evented_memcache_client/connection.rb
72
+ </a>
73
+ <br />
74
+ <a href="../files/lib/evented_memcache_client/sender_rb.html">
75
+ lib/evented_memcache_client/sender.rb
76
+ </a>
77
+ <br />
78
+ <a href="../files/lib/evented_memcache_client/server_rb.html">
79
+ lib/evented_memcache_client/server.rb
80
+ </a>
81
+ <br />
82
+ <a href="../files/lib/evented_memcache_client/tenacious_rb.html">
83
+ lib/evented_memcache_client/tenacious.rb
84
+ </a>
85
+ <br />
86
+ </td>
87
+ </tr>
88
+
89
+ </table>
90
+ </div>
91
+ <!-- banner header -->
92
+
93
+ <div id="bodyContent">
94
+
95
+
96
+
97
+ <div id="contextContent">
98
+
99
+ <div id="description">
100
+ <table>
101
+ <tr><td valign="top">Author:</td><td>Colin Steele (colin@colinsteele.org)
102
+
103
+ </td></tr>
104
+ </table>
105
+ <p>
106
+ Homepage::
107
+ </p>
108
+
109
+ </div>
110
+
111
+
112
+ </div>
113
+
114
+
115
+ </div>
116
+
117
+
118
+ <!-- if includes -->
119
+
120
+ <div id="section">
121
+
122
+ <div id="class-list">
123
+ <h3 class="section-bar">Classes and Modules</h3>
124
+
125
+ Module <a href="EventMachine/Protocols.html" class="link">EventMachine::Protocols</a><br />
126
+
127
+ </div>
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+ <!-- if method_list -->
136
+
137
+
138
+ </div>
139
+
140
+
141
+ <div id="validator-badges">
142
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
143
+ </div>
144
+
145
+ </body>
146
+ </html>
@@ -0,0 +1,135 @@
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: EventMachine::Protocols</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">EventMachine::Protocols</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_rb.html">
59
+ lib/evented-memcache-client.rb
60
+ </a>
61
+ <br />
62
+ <a href="../../files/lib/evented_memcache_client/client_rb.html">
63
+ lib/evented_memcache_client/client.rb
64
+ </a>
65
+ <br />
66
+ <a href="../../files/lib/evented_memcache_client/connectable_rb.html">
67
+ lib/evented_memcache_client/connectable.rb
68
+ </a>
69
+ <br />
70
+ <a href="../../files/lib/evented_memcache_client/connection_rb.html">
71
+ lib/evented_memcache_client/connection.rb
72
+ </a>
73
+ <br />
74
+ <a href="../../files/lib/evented_memcache_client/sender_rb.html">
75
+ lib/evented_memcache_client/sender.rb
76
+ </a>
77
+ <br />
78
+ <a href="../../files/lib/evented_memcache_client/server_rb.html">
79
+ lib/evented_memcache_client/server.rb
80
+ </a>
81
+ <br />
82
+ <a href="../../files/lib/evented_memcache_client/tenacious_rb.html">
83
+ lib/evented_memcache_client/tenacious.rb
84
+ </a>
85
+ <br />
86
+ </td>
87
+ </tr>
88
+
89
+ </table>
90
+ </div>
91
+ <!-- banner header -->
92
+
93
+ <div id="bodyContent">
94
+
95
+
96
+
97
+ <div id="contextContent">
98
+
99
+
100
+
101
+ </div>
102
+
103
+
104
+ </div>
105
+
106
+
107
+ <!-- if includes -->
108
+
109
+ <div id="section">
110
+
111
+ <div id="class-list">
112
+ <h3 class="section-bar">Classes and Modules</h3>
113
+
114
+ Module <a href="Protocols/Memcache.html" class="link">EventMachine::Protocols::Memcache</a><br />
115
+
116
+ </div>
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ <!-- if method_list -->
125
+
126
+
127
+ </div>
128
+
129
+
130
+ <div id="validator-badges">
131
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
132
+ </div>
133
+
134
+ </body>
135
+ </html>