class FayeTracking::Tracker
Public Class Methods
new(redis)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 3 def initialize(redis) @channel_to_client_ids = namespaced_key_list('channel_to_client_ids', redis) @client_id_to_channels = namespaced_key_list('client_id_to_channels', redis) @user_to_client_ids = namespaced_key_list('user_to_client_ids', redis) @client_id_to_users = namespaced_key_list('client_id_to_users', redis) end
Public Instance Methods
add(channel, client_id, user)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 10 def add(channel, client_id, user) @channel_to_client_ids.add(channel, client_id) @client_id_to_channels.add(client_id, channel) @user_to_client_ids.add(user, client_id) @client_id_to_users.add(client_id, user) end
channel_has_user?(channel, user)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 62 def channel_has_user?(channel, user) client_ids = @channel_to_client_ids.members(channel) client_ids.any? do |client_id| @user_to_client_ids.member? user, client_id end end
channels_for_user(user)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 41 def channels_for_user(user) client_ids = @user_to_client_ids.members(user) client_ids.inject([]) do |acc, client_id| acc += @client_id_to_channels.members(client_id) end.uniq end
remove(channel, client_id)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 21 def remove(channel, client_id) @channel_to_client_ids.remove(channel, client_id) @client_id_to_channels.remove(client_id, channel) @client_id_to_users.members(client_id).each do |user| @user_to_client_ids.remove(user, client_id) end @client_id_to_users.remove_all(client_id) end
remove_all(client_id)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 30 def remove_all(client_id) @client_id_to_channels.members(client_id).each do |channel| @channel_to_client_ids.remove(channel, client_id) end @client_id_to_users.members(client_id).each do |user| @user_to_client_ids.remove(user, client_id) end @client_id_to_users.remove_all(client_id) @client_id_to_channels.remove_all(client_id) end
user_in_channel?(user, channel)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 55 def user_in_channel?(user, channel) client_ids = @user_to_client_ids.members(user) client_ids.any? do |client_id| @channel_to_client_ids.member? channel, client_id end end
user_with_client_id(client_id)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 17 def user_with_client_id(client_id) @client_id_to_users.members(client_id).first end
users_in_channel(channel)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 48 def users_in_channel(channel) client_ids = @channel_to_client_ids.members(channel) client_ids.inject([]) do |acc, client_id| acc += @client_id_to_users.members(client_id) end.uniq end
Private Instance Methods
namespaced_key_list(name, redis)
click to toggle source
# File lib/faye_tracking/tracker.rb, line 71 def namespaced_key_list(name, redis) NamespacedKeyList.new(name, RedisKeyList.new(redis)) end