From 5e58eba240301d97ac4c3f1bc6a99aa293c3d995 Mon Sep 17 00:00:00 2001
From: maxwell <maxwell@joindiaspora.com>
Date: Wed, 5 Jan 2011 17:34:21 -0800
Subject: [PATCH] new years resolution: commit more. make the websocket take
 user objects, rather then just ids, since postman now gets all of them at
 once, rather than querying them n times

---
 app/controllers/sockets_controller.rb       |  4 ++--
 app/helpers/sockets_helper.rb               |  4 ++--
 app/models/retraction.rb                    | 13 +++++++++----
 lib/postzord/dispatch.rb                    |  2 +-
 spec/controllers/sockets_controller_spec.rb |  4 ++--
 spec/lib/diaspora/web_socket_spec.rb        |  2 +-
 spec/models/jobs/socket_webfinger_spec.rb   |  4 ++--
 7 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/app/controllers/sockets_controller.rb b/app/controllers/sockets_controller.rb
index 5411d1801a..aa87ec3204 100644
--- a/app/controllers/sockets_controller.rb
+++ b/app/controllers/sockets_controller.rb
@@ -11,8 +11,8 @@ class SocketsController < ApplicationController
     Rails.logger.info("Socket received connection to: #{msg}")
   end
 
-  def outgoing(uid,object,opts={})
+  def outgoing(user, object, opts={})
     @_request = ActionDispatch::Request.new({})
-    Diaspora::WebSocket.queue_to_user(uid, action_hash(uid, object, opts))
+    Diaspora::WebSocket.queue_to_user(user.id, action_hash(user, object, opts))
   end
 end
diff --git a/app/helpers/sockets_helper.rb b/app/helpers/sockets_helper.rb
index 2c7ccc48ab..f810538f01 100644
--- a/app/helpers/sockets_helper.rb
+++ b/app/helpers/sockets_helper.rb
@@ -10,9 +10,9 @@ module SocketsHelper
     object.respond_to?(:post_id) ? object.post_id : object.id
   end
 
-  def action_hash(uid, object, opts={})
+  def action_hash(user, object, opts={})
+    uid = user.id
     begin
-      user = User.find_by_id uid
       unless user.nil?
         old_locale = I18n.locale
         I18n.locale = user.language.to_s
diff --git a/app/models/retraction.rb b/app/models/retraction.rb
index a9be633ab7..3b291200e1 100644
--- a/app/models/retraction.rb
+++ b/app/models/retraction.rb
@@ -13,9 +13,14 @@ class Retraction
   attr_accessor :person, :object, :subscribers
 
   def subscribers(user)
-   @subscribers ||= self.object.subscribers(user)
+    unless self.type == 'Person'
+      @subscribers ||= self.object.subscribers(user)
+    else
+      raise 'HAX: you must set the subscribers manaully before unfriending' if @subscribers.nil?
+     @subscribers
+    end
   end
-  
+
   def self.for(object)
     retraction = self.new
     if object.is_a? User
@@ -30,7 +35,7 @@ class Retraction
     retraction
   end
 
-  def perform receiving_user_id
+  def perform(receiving_user)
     Rails.logger.debug "Performing retraction for #{post_id}"
     if self.type.constantize.find_by_id(post_id) 
       unless Post.first(:diaspora_handle => person.diaspora_handle, :id => post_id) 
@@ -41,7 +46,7 @@ class Retraction
       begin
         Rails.logger.debug("Retracting #{self.type} id: #{self.post_id}")
         target = self.type.constantize.first(:id => self.post_id)
-        target.unsocket_from_uid receiving_user_id if target.respond_to? :unsocket_from_uid
+        target.unsocket_from_uid(receiving_user, self) if target.respond_to? :unsocket_from_uid
         target.delete
       rescue NameError
         Rails.logger.info("event=retraction status=abort reason='unknown type'")
diff --git a/lib/postzord/dispatch.rb b/lib/postzord/dispatch.rb
index 39c76fdc58..6b927ac224 100644
--- a/lib/postzord/dispatch.rb
+++ b/lib/postzord/dispatch.rb
@@ -62,7 +62,7 @@ class Postzord::Dispatch
   def socket_to_users(users)
     if @object.respond_to?(:socket_to_uid)
       users.each do |user|
-        @object.socket_to_uid(user.id)
+        @object.socket_to_uid(user)
       end
     end
   end
diff --git a/spec/controllers/sockets_controller_spec.rb b/spec/controllers/sockets_controller_spec.rb
index 8f7cc33796..de35584704 100644
--- a/spec/controllers/sockets_controller_spec.rb
+++ b/spec/controllers/sockets_controller_spec.rb
@@ -25,14 +25,14 @@ describe SocketsController do
     end
 
     it 'actionhashes posts' do
-      json = @controller.action_hash(@user.id, @message)
+      json = @controller.action_hash(@user, @message)
       json.include?(@message.message).should be_true
       json.include?('status_message').should be_true
     end
 
     it 'actionhashes retractions' do
       retraction = Retraction.for @message
-      json = @controller.action_hash(@user.id, retraction)
+      json = @controller.action_hash(@user, retraction)
       json.include?('retraction').should be_true
       json.include?("html\":null").should be_true
     end
diff --git a/spec/lib/diaspora/web_socket_spec.rb b/spec/lib/diaspora/web_socket_spec.rb
index dd6022c331..465410f3ac 100644
--- a/spec/lib/diaspora/web_socket_spec.rb
+++ b/spec/lib/diaspora/web_socket_spec.rb
@@ -33,6 +33,6 @@ describe Diaspora::Socketable do
 
   it 'sockets to a user' do
     Diaspora::WebSocket.should_receive(:queue_to_user)
-    @post.socket_to_uid(@user.id, :aspect_ids => @aspect.id)
+    @post.socket_to_uid(@user, :aspect_ids => @aspect.id)
   end
 end
diff --git a/spec/models/jobs/socket_webfinger_spec.rb b/spec/models/jobs/socket_webfinger_spec.rb
index 060744442f..9f052011ae 100644
--- a/spec/models/jobs/socket_webfinger_spec.rb
+++ b/spec/models/jobs/socket_webfinger_spec.rb
@@ -22,7 +22,7 @@ describe Jobs::SocketWebfinger do
     person = Factory.create(:person)
     finger.stub(:fetch).and_return(person)
 
-    person.should_receive(:socket_to_uid).with(@user.id, {})
+    person.should_receive(:socket_to_uid).with(@user, {})
     Jobs::SocketWebfinger.perform(@user.id, @account)
   end
   it 'Passes opts through on success' do
@@ -32,7 +32,7 @@ describe Jobs::SocketWebfinger do
     finger.stub(:fetch).and_return(person)
     
     opts = {:symbol => true}
-    person.should_receive(:socket_to_uid).with(@user.id, opts)
+    person.should_receive(:socket_to_uid).with(@user, opts)
     Jobs::SocketWebfinger.perform(@user.id, @account, opts)
   end
   it 'sockets failure message on failure' do
-- 
GitLab