class Redis::SubscribedClient
Public Class Methods
new(client)
click to toggle source
# File lib/redis/subscribe.rb, line 3 def initialize(client) @client = client end
Public Instance Methods
call(command)
click to toggle source
# File lib/redis/subscribe.rb, line 7 def call(command) @client.process([command]) end
psubscribe(*channels, &block)
click to toggle source
# File lib/redis/subscribe.rb, line 15 def psubscribe(*channels, &block) subscription("psubscribe", "punsubscribe", channels, block) end
punsubscribe(*channels)
click to toggle source
# File lib/redis/subscribe.rb, line 23 def punsubscribe(*channels) call([:punsubscribe, *channels]) end
subscribe(*channels, &block)
click to toggle source
# File lib/redis/subscribe.rb, line 11 def subscribe(*channels, &block) subscription("subscribe", "unsubscribe", channels, block) end
unsubscribe(*channels)
click to toggle source
# File lib/redis/subscribe.rb, line 19 def unsubscribe(*channels) call([:unsubscribe, *channels]) end
Protected Instance Methods
subscription(start, stop, channels, block)
click to toggle source
# File lib/redis/subscribe.rb, line 29 def subscription(start, stop, channels, block) sub = Subscription.new(&block) unsubscribed = false begin @client.call_loop([start, *channels]) do |line| type, *rest = line sub.callbacks[type].call(*rest) unsubscribed = type == stop && rest.last == 0 break if unsubscribed end ensure # No need to unsubscribe here. The real client closes the connection # whenever an exception is raised (see #ensure_connected). end end