X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/0dd8fce106f4a45328cbf42d5eedbcc7afa10e5e..2abee6f2154e75a68488cd508bf2eddcfcc33ebc:/client-libraries/ruby_2/rubyredis.rb diff --git a/client-libraries/ruby_2/rubyredis.rb b/client-libraries/ruby_2/rubyredis.rb index 85989d35..38823206 100644 --- a/client-libraries/ruby_2/rubyredis.rb +++ b/client-libraries/ruby_2/rubyredis.rb @@ -6,17 +6,18 @@ # method_missing instead. require 'socket' +require 'set' begin - if (RUBY_VERSION >= '1.9') - require 'timeout' - RedisTimer = Timeout - else - require 'system_timer' - RedisTimer = SystemTimer - end + if (RUBY_VERSION >= '1.9') + require 'timeout' + RedisTimer = Timeout + else + require 'system_timer' + RedisTimer = SystemTimer + end rescue LoadError - RedisTimer = nil + RedisTimer = nil end class RedisClient @@ -27,6 +28,7 @@ class RedisClient } ConvertToBool = lambda{|r| r == 0 ? false : r} + ConvertToSet = lambda{|r| Set.new(r)} ReplyProcessor = { "exists" => ConvertToBool, @@ -39,6 +41,10 @@ class RedisClient "del"=> ConvertToBool, "renamenx"=> ConvertToBool, "expire"=> ConvertToBool, + "smembers" => ConvertToSet, + "sinter" => ConvertToSet, + "sunion" => ConvertToSet, + "sdiff" => ConvertToSet, "keys" => lambda{|r| r.split(" ")}, "info" => lambda{|r| info = {} @@ -58,7 +64,6 @@ class RedisClient "delete" => "del", "randkey" => "randomkey", "list_length" => "llen", - "type?" => "type", "push_tail" => "rpush", "push_head" => "lpush", "pop_tail" => "rpop", @@ -74,13 +79,15 @@ class RedisClient "set_member?" => "sismember", "set_members" => "smembers", "set_intersect" => "sinter", + "set_intersect_store" => "sinterstore", "set_inter_store" => "sinterstore", "set_union" => "sunion", "set_union_store" => "sunionstore", "set_diff" => "sdiff", "set_diff_store" => "sdiffstore", "set_move" => "smove", - "set_unless_exists" => "setnx" + "set_unless_exists" => "setnx", + "rename_unless_exists" => "renamenx" } def initialize(opts={}) @@ -108,6 +115,7 @@ class RedisClient begin sock = TCPSocket.new(host, port, 0) rescue Timeout::Error + @sock = nil raise Timeout::Error, "Timeout connecting to the server" end else @@ -228,7 +236,7 @@ class RedisClient } res else - raise "Protocol error, got '#{rtype}' as initial reply bye" + raise "Protocol error, got '#{rtype}' as initial reply byte" end end end