Merge branch 'master' of github.com:diaspora/diaspora_rails
This commit is contained in:
commit
f759f5d1b7
10 changed files with 100 additions and 49 deletions
|
|
@ -3,12 +3,12 @@ class Comment
|
|||
include ROXML
|
||||
include Diaspora::Webhooks
|
||||
|
||||
|
||||
xml_accessor :text
|
||||
xml_accessor :person, :as => Person
|
||||
xml_accessor :post_id
|
||||
|
||||
key :text, String
|
||||
key :target, String
|
||||
timestamps!
|
||||
|
||||
key :post_id, ObjectId
|
||||
|
|
@ -17,11 +17,25 @@ class Comment
|
|||
key :person_id, ObjectId
|
||||
belongs_to :person, :class_name => "Person"
|
||||
|
||||
after_save :send_friends_comments_on_my_posts
|
||||
after_save :send_to_view
|
||||
|
||||
|
||||
def ==(other)
|
||||
(self.message == other.message) && (self.person.email == other.person.email)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def send_friends_comments_on_my_posts
|
||||
if (User.first.mine?(self.post) && self.person.is_a?(Friend))
|
||||
self.push_to(self.post.friends_with_permissions)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def send_to_view
|
||||
WebSocket.update_clients(self)
|
||||
end
|
||||
end
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
%li.comment{:id => comment.id}
|
||||
%li.comment{:id => post.id}
|
||||
%span.from
|
||||
= link_to_person comment.person
|
||||
= auto_link comment.text
|
||||
= link_to_person post.person
|
||||
= auto_link post.text
|
||||
%div.time
|
||||
= "#{time_ago_in_words(comment.updated_at)} ago"
|
||||
= "#{time_ago_in_words(post.updated_at)} ago"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
%div.comments
|
||||
%ul.comment_set
|
||||
%ul.comment_set{:id => post.id}
|
||||
- for comment in post.comments
|
||||
= render "comments/comment", :comment => comment
|
||||
= render 'comments/comment', :post => comment
|
||||
%li.comment
|
||||
= render "comments/new_comment", :post => post
|
||||
= render 'comments/new_comment', :post => post
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,20 @@
|
|||
ws.onmessage = function(evt) {
|
||||
var obj = jQuery.parseJSON(evt.data);
|
||||
debug("got a " + obj['class']);
|
||||
if((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) {
|
||||
|
||||
|
||||
function onPageOne() {
|
||||
var c = document.location.search.charAt(document.location.search.length-1);
|
||||
return ((c =='') || (c== '1'))
|
||||
}
|
||||
|
||||
|
||||
if (obj['class']=="comments"){
|
||||
var post_id = obj['post_id']
|
||||
$('#'+ obj['post_id'] + ' .comment_set li:last' ).before(
|
||||
$(obj['html']).fadeIn("fast", function(){})
|
||||
)
|
||||
}else if(((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) && onPageOne()) {
|
||||
$("#stream").prepend(
|
||||
$(obj['html']).fadeIn("fast", function(){
|
||||
$("#stream label:first").inFieldLabels();
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
/= javascript_include_tag"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
|
||||
= javascript_include_tag 'jquery142', 'rails', 'view', 'publisher'
|
||||
= javascript_include_tag 'tiny_mce/tiny_mce.js','jquery.infieldlabel'
|
||||
= render "js/google_a_js"
|
||||
= render "js/websocket_js"
|
||||
= render 'js/google_a_js'
|
||||
= render 'js/websocket_js'
|
||||
|
||||
= csrf_meta_tag
|
||||
= yield(:head)
|
||||
|
|
|
|||
|
|
@ -69,11 +69,13 @@ module Diaspora
|
|||
|
||||
|
||||
def push_to(recipients)
|
||||
unless recipients.empty?
|
||||
recipients.map!{|x| x = x.url + "receive/"}
|
||||
xml = self.class.build_xml_for([self])
|
||||
@@queue.add_post_request( recipients, xml )
|
||||
@@queue.process
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def prep_webhook
|
||||
|
|
|
|||
|
|
@ -22,11 +22,22 @@ module SocketRenderer
|
|||
puts e.message
|
||||
raise e
|
||||
end
|
||||
{:class =>object.class.to_s.underscore.pluralize, :html => v}
|
||||
|
||||
{:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)}
|
||||
end
|
||||
|
||||
def self.view_for(object)
|
||||
puts object.inspect
|
||||
puts @view.type_partial(object)
|
||||
|
||||
@view.render @view.type_partial(object), :post => object
|
||||
end
|
||||
|
||||
def self.obj_id(object)
|
||||
if object.is_a? Post
|
||||
object.id
|
||||
else
|
||||
object.post.id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ describe Diaspora do
|
|||
describe Webhooks do
|
||||
before do
|
||||
@user = Factory.create(:user, :email => "bob@aol.com")
|
||||
@friend = Factory.create(:friend)
|
||||
end
|
||||
|
||||
describe "header" do
|
||||
|
|
@ -53,9 +54,7 @@ describe Diaspora do
|
|||
Factory.create(:friend, :url => "http://www.alice.com/")
|
||||
Factory.create(:friend, :url => "http://www.jane.com/")
|
||||
|
||||
@post.friends_with_permissions.should include("http://www.bob.com/receive/")
|
||||
@post.friends_with_permissions.should include("http://www.alice.com/receive/")
|
||||
@post.friends_with_permissions.should include("http://www.jane.com/receive/")
|
||||
@post.friends_with_permissions.should == Friend.all
|
||||
end
|
||||
|
||||
it "should send an owners post to their friends" do
|
||||
|
|
@ -73,7 +72,7 @@ describe Diaspora do
|
|||
|
||||
it "should ensure one url is created for every friend" do
|
||||
5.times {Factory.create(:friend)}
|
||||
@post.friends_with_permissions.size.should == 5
|
||||
@post.friends_with_permissions.size.should == 6
|
||||
end
|
||||
|
||||
it "should build an xml object containing multiple Post types" do
|
||||
|
|
|
|||
|
|
@ -103,20 +103,6 @@ describe "parser in application helper" do
|
|||
comment.post.should == post
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
it 'should parse a person out of a post' do
|
||||
@user.comment "foo", :on => @status_messages.first
|
||||
xml = Comment.build_xml_for([Comment.first])
|
||||
puts xml
|
||||
objs = parse_objects_from_xml(xml)
|
||||
|
||||
puts objs.inspect
|
||||
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -15,21 +15,47 @@ describe Comment do
|
|||
|
||||
it "should be able to comment on a friend's status" do
|
||||
friend = Factory.create :friend
|
||||
status = Factory.create(:status_message, :person => @friend)
|
||||
status = Factory.create(:status_message, :person => friend)
|
||||
@user.comment "sup dog", :on => status
|
||||
|
||||
StatusMessage.first.comments.first.text.should == "sup dog"
|
||||
StatusMessage.first.comments.first.person.should == @user
|
||||
end
|
||||
|
||||
|
||||
it 'should be able to send a post owner any new comments a user adds' do
|
||||
friend = Factory.create(:friend)
|
||||
status = Factory.create(:status_message, :person => friend)
|
||||
|
||||
Comment.send(:class_variable_get, :@@queue).should_receive(:add_post_request)
|
||||
@user.comment "yo", :on => status
|
||||
it 'should not send out comments when we have no friends' do
|
||||
status = Factory.create(:status_message, :person => @user)
|
||||
Comment.send(:class_variable_get, :@@queue).should_not_receive(:add_post_request)
|
||||
@user.comment "sup dog", :on => status
|
||||
end
|
||||
describe 'comment propagation' do
|
||||
before do
|
||||
@friend = Factory.create(:friend)
|
||||
@friend_two = Factory.create(:friend)
|
||||
@friend_status = Factory.create(:status_message, :person => @friend)
|
||||
@user_status = Factory.create(:status_message, :person => @user)
|
||||
end
|
||||
|
||||
it "should send a user's comment on a friend's post to that friend" do
|
||||
Comment.send(:class_variable_get, :@@queue).should_receive(:add_post_request)
|
||||
@user.comment "yo", :on => @friend_status
|
||||
end
|
||||
|
||||
it 'should send a user comment on his own post to lots of friends' do
|
||||
allowed_urls = @user_status.friends_with_permissions.map!{|x| x = x.url + "receive/"}
|
||||
Comment.send(:class_variable_get, :@@queue).should_receive(:add_post_request).with(allowed_urls, anything )
|
||||
@user.comment "yo", :on => @user_status
|
||||
end
|
||||
|
||||
it 'should send a comment a friend made on your post to all friends' do
|
||||
Comment.send(:class_variable_get, :@@queue).should_receive(:add_post_request)
|
||||
com = Comment.create(:person => @friend, :text => "balls", :post => @user_status)
|
||||
end
|
||||
|
||||
it 'should not send a comment a friend made on a friend post to anyone' do
|
||||
Comment.send(:class_variable_get, :@@queue).should_not_receive(:add_post_request)
|
||||
com = Comment.create(:person => @friend, :text => "balls", :post => @friend_status)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in a new issue