em-redislite 0.1.2 → 0.2.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/CHANGELOG ADDED
@@ -0,0 +1,7 @@
1
+ == 0.2.0 (2012-04-08)
2
+
3
+ * Rewrite to include methods for most redis commands.
4
+
5
+ == 0.1.2 (2011-06-21)
6
+
7
+ * Added Client#error?
data/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # Redis Lite
2
+
3
+ Eventmachine based adapter that talks redis 2.0 protocol
4
+
5
+ ## Installation
6
+
7
+ gem install em-redislite
8
+
9
+ ## Dependencies
10
+
11
+ * Ruby >= 1.9.1
12
+ * eventmachine
13
+ * em-synchrony (optional)
14
+
15
+ ## Unsupported commands
16
+
17
+ * Pub/Sub
18
+ * Scripting
19
+ * Server
20
+
21
+ ## Example
22
+
23
+ ### Using callbacks
24
+
25
+ ```ruby
26
+ require 'em-redislite'
27
+
28
+ EM.run do
29
+ # defaults to { host: '127.0.0.1', port: 6379 }
30
+ client = EM::Redis.connect
31
+ client.errback {|error| $stderr.puts "Redis Error: #{error}"; EM.stop }
32
+
33
+ r = client.set "mykey", "myvalue"
34
+ r.callback {|value| p value }
35
+ r.errback {|error| p error }
36
+
37
+ r = client.get "mykey"
38
+ r.callback {|value| p value }
39
+ r.errback {|error| p error }
40
+ end
41
+ ```
42
+ ### Using em-synchrony
43
+
44
+ ```ruby
45
+ require 'em-redislite'
46
+ require 'em/redis-synchrony'
47
+
48
+ EM.run do
49
+ EM.synchrony do
50
+ client = EM::Redis.connect
51
+ client.errback {|error| $stderr.puts "Redis Error: #{error}"; EM.stop }
52
+
53
+ p client.set "mykey", "myvalue"
54
+ p client.get "mykey"
55
+ EM.stop
56
+ end
57
+ end
58
+ ```
59
+
60
+ ## License
61
+ [Creative Commons Attribution - CC BY](http://creativecommons.org/licenses/by/3.0)
@@ -0,0 +1,21 @@
1
+ require 'em-synchrony'
2
+ require 'em-redislite'
3
+
4
+ module EM
5
+ module Redis
6
+ class Client < Connection
7
+ def command name, *args
8
+ EM::Synchrony.sync send_command(name, *args)
9
+ end
10
+
11
+ def send_command name, *args
12
+ defer = DefaultDeferrable.new
13
+ @pool << defer
14
+ send_data "*#{args.length + 1}\r\n" +
15
+ "$#{name.length}\r\n#{name}\r\n" +
16
+ args.map(&:to_s).inject('') {|a,v| a + "$#{v.bytesize}\r\n#{v}\r\n"}
17
+ defer
18
+ end
19
+ end
20
+ end
21
+ end
data/lib/em/redis.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  require 'eventmachine'
2
+
2
3
  module EM
3
4
  module Redis
4
- class Error < StandardError; end
5
5
 
6
+ VERSION = '0.2.0'
6
7
  DEFAULTS = { host: '127.0.0.1', port: 6379 }
7
8
 
9
+ class Error < StandardError; end
10
+
8
11
  def self.connect options = {}
9
12
  options = DEFAULTS.merge(options)
10
13
  begin
@@ -56,7 +59,7 @@ module EM
56
59
  EM.reconnect @options[:host], @options[:port], self
57
60
  end
58
61
 
59
- def unbind msg = 'lost connection'
62
+ def unbind msg = 'lost db connection'
60
63
  error = Error.new(msg)
61
64
  @pool.each {|r| r.fail(error) }
62
65
  @pool = []
@@ -101,6 +104,20 @@ module EM
101
104
 
102
105
  process_bytes(nil) if @want_bytes < 0
103
106
  end
107
+
108
+ COMMANDS = %w(
109
+ APPEND AUTH BLPOP BRPOP BRPOPLPUSH DECR DECRBY DEL DISCARD DUMP ECHO EXEC EXISTS EXPIRE EXPIREAT
110
+ GET GETBIT GETRANGE GETSET HDEL HEXISTS HGET HGETALL HINCRBY HINCRBYFLOAT HKEYS HLEN HMGET HMSET
111
+ HSET HSETNX HVALS INCR INCRBY INCRBYFLOAT KEYS LINDEX LINSERT LLEN LPOP LPUSH LPUSHX LRANGE LREM
112
+ LSET LTRIM MGET MIGRATE MOVE MSET MSETNX MULTI OBJECT PERSIST PEXPIRE PEXPIREAT PING PSETEX PTTL
113
+ QUIT RANDOMKEY RENAME RENAMENX RESTORE RPOP RPOPLPUSH RPUSH RPUSHX SADD SCARD SDIFF SDIFFSTORE
114
+ SELECT SET SETBIT SETEX SETNX SETRANGE SINTER SINTERSTORE SISMEMBER SMEMBERS SMOVE SORT SPOP
115
+ SRANDMEMBER SREM STRLEN SUNION SUNIONSTORE TTL TYPE UNWATCH WATCH ZADD ZCARD ZCOUNT ZINCRBY
116
+ ZINTERSTORE ZRANGE ZRANGEBYSCORE ZRANK ZREM ZREMRANGEBYRANK ZREMRANGEBYSCORE ZREVRANGE
117
+ ZREVRANGEBYSCORE ZREVRANK ZSCORE ZUNIONSTORE
118
+ ).freeze
119
+
120
+ COMMANDS.each {|name| send(:define_method, name.downcase) {|*args| command(name, *args) }}
104
121
  end # Client
105
122
  end # Redis
106
123
  end # EM
data/lib/em-redislite.rb CHANGED
@@ -1,2 +1 @@
1
1
  require_relative 'em/redis'
2
- require_relative 'em/redis/sugar'
@@ -1,5 +1,5 @@
1
- require 'minitest/spec'
2
- require_relative '../lib/em-redislite'
1
+ require 'minitest/autorun'
2
+ require 'em-redislite'
3
3
 
4
4
  class MiniTest::Unit::TestCase
5
5
  def em_run &block
@@ -11,5 +11,3 @@ class MiniTest::Unit::TestCase
11
11
  end
12
12
  end
13
13
  end
14
-
15
- MiniTest::Unit.autorun
@@ -4,8 +4,8 @@ describe 'Command Expire' do
4
4
  it 'should support set with expiry' do
5
5
  @success = false
6
6
  em_run do |client|
7
- r = client.set 'mykey', 'foobar', 1
8
- r = client.get 'mykey'
7
+ r = client.setex 'mykey', 1, 'foobar'
8
+ r = client.get 'mykey'
9
9
  r.callback do |value|
10
10
  EM.stop unless value == 'foobar'
11
11
  EM.add_timer(2) do
File without changes
File without changes
metadata CHANGED
@@ -1,84 +1,86 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: em-redislite
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 2
9
- version: 0.1.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Bharanee Rathna
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-06-21 00:00:00 +10:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-04-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: eventmachine
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
31
22
  type: :runtime
32
- version_requirements: *id001
33
- description: A very simple EventMachine based adapter that talks Redis protocol
34
- email: deepfryed@gmail.com
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: EventMachine based Redis client
47
+ email:
48
+ - deepfryed@gmail.com
35
49
  executables: []
36
-
37
50
  extensions: []
38
-
39
51
  extra_rdoc_files: []
40
-
41
- files:
42
- - README.rdoc
43
- - em-redislite.gemspec
44
- - lib/em-redislite.rb
45
- - lib/em/redis/sugar.rb
52
+ files:
53
+ - test/test_connection.rb
54
+ - test/test_commands.rb
55
+ - test/helper.rb
56
+ - test/test_command_expire.rb
46
57
  - lib/em/redis.rb
47
- - tests/helper.rb
48
- - tests/test_command_expire.rb
49
- - tests/test_commands.rb
50
- - tests/test_connection.rb
51
- has_rdoc: true
58
+ - lib/em/redis-synchrony.rb
59
+ - lib/em-redislite.rb
60
+ - README.md
61
+ - CHANGELOG
52
62
  homepage: http://github.com/deepfryed/em-redislite
53
63
  licenses: []
54
-
55
64
  post_install_message:
56
65
  rdoc_options: []
57
-
58
- require_paths:
66
+ require_paths:
59
67
  - lib
60
- required_ruby_version: !ruby/object:Gem::Requirement
68
+ required_ruby_version: !ruby/object:Gem::Requirement
61
69
  none: false
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- segments:
66
- - 0
67
- version: "0"
68
- required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
75
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- version: "0"
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
76
80
  requirements: []
77
-
78
81
  rubyforge_project:
79
- rubygems_version: 1.3.7
82
+ rubygems_version: 1.8.21
80
83
  signing_key:
81
84
  specification_version: 3
82
- summary: A lightweight EM based Redis adapter
85
+ summary: A lite version of EM::Redis
83
86
  test_files: []
84
-
data/README.rdoc DELETED
@@ -1,42 +0,0 @@
1
- = Redis Lite
2
-
3
- Eventmachine based adapter that talks redis 2.0 protocol
4
-
5
- == Installation
6
-
7
- gem install em-redislite
8
-
9
- === Dependencies
10
-
11
- * Ruby >= 1.9.1
12
- * eventmachine
13
-
14
- == Usage
15
-
16
- require 'em/redislite'
17
-
18
- EM.run do
19
- client = EM::Redis.connect # defaults to { host: '127.0.0.1', port: 6379 }
20
- client.errback {|error| $stderr.puts "Redis Error: #{error}"; EM.stop }
21
-
22
- r = client.command :get, "mykey"
23
- r.callback {|value| p value }
24
- r.errback {|error| p error }
25
-
26
- # syntactic sugar for string and boolean commands
27
- r = client.get "mykey"
28
- r = client.set "mykey", "some value", 1800 # ttl
29
-
30
- # you should be running redis in a private network or have it firewalled but ...
31
- r = client.command :auth, "my super dooper password" # should work as well
32
- end
33
-
34
- == Testing
35
-
36
- There are no tests at the moment coz I'm a lazy slob.
37
-
38
- == License
39
-
40
- GNU GPLv3, so its free and comes with no guarantees. If it brings down your website or burns down your house, I will
41
- not be held responsible. Use it at your own risk. You can read all about GNU here: http://www.gnu.org and
42
- GNU GPLv3 here: http://www.gnu.org/licenses/gpl.txt.
data/em-redislite.gemspec DELETED
@@ -1,16 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{em-redislite}
5
- s.version = '0.1.2'
6
- s.summary = 'A lightweight EM based Redis adapter'
7
- s.description = 'A very simple EventMachine based adapter that talks Redis protocol'
8
- s.authors = [ 'Bharanee Rathna' ]
9
- s.email = %q{deepfryed@gmail.com}
10
- s.homepage = %q{http://github.com/deepfryed/em-redislite}
11
- s.files = %w(README.rdoc em-redislite.gemspec) + Dir.glob("{lib,tests}/**/*")
12
- s.require_paths = %w(lib)
13
- s.platform = Gem::Platform::RUBY
14
-
15
- s.add_dependency('eventmachine')
16
- end
@@ -1,34 +0,0 @@
1
- class EM::Redis::Client
2
- COMMANDS = {
3
- string: %w(get strlen getset setnx setex setbit getbit mset msetnx mget incr incrby decr decrby
4
- append setrange getrange),
5
- boolean: %w(exists del type keys randomkey rename renamenx dbsize expire persist ttl select move
6
- flushdb flushall),
7
- }.freeze
8
-
9
- COMMANDS[:string].each {|c| send(:define_method, c) {|*args| command(c, *args) }}
10
- COMMANDS[:boolean].each {|c| send(:define_method, c) {|*args|
11
- defer = EM::DefaultDeferrable.new
12
- req = command(c, *args)
13
- req.callback {|r| defer.succeed(r == '1') }
14
- req.errback {|e| defer.fail(e) }
15
- defer
16
- }}
17
-
18
- # set here is special since it combines :set and optional :expire
19
- def set key, value, ttl = nil
20
- if ttl
21
- defer = EM::DefaultDeferrable.new
22
- req = command(:set, key, value)
23
- req.callback do
24
- req = command(:expire, key, ttl)
25
- req.callback {|r| defer.succeed(r == '1') }
26
- req.errback {|e| defer.fail(e) }
27
- end
28
- req.errback {|e| defer.fail(e) }
29
- defer
30
- else
31
- command(:set, key, value)
32
- end
33
- end
34
- end