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
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>