diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a6c3a1003..5989654ac 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -14,8 +14,9 @@ module ApplicationHelper def parse_sender_object_from_xml(xml) sender_id = parse_sender_id_from_xml(xml) - Person.where(:email => sender_id).first - end + Friend.where(:email => sender_id).first + + end def parse_body_contents_from_xml(xml) doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } @@ -24,11 +25,13 @@ module ApplicationHelper def parse_posts_from_xml(xml) posts = [] + sender = parse_sender_object_from_xml(xml) body = parse_body_contents_from_xml(xml) body.children.each do |post| begin object = post.name.camelize.constantize.from_xml post.to_s - posts << object if object.is_a? Post + object.person = sender + posts << object if object.is_a? Post rescue puts "Not a real type: #{post.to_s}" end @@ -37,12 +40,10 @@ module ApplicationHelper end def store_posts_from_xml(xml) - sender_object = parse_sender_object_from_xml(xml) posts = parse_posts_from_xml(xml) posts.each do |p| - p.person = sender_object - p.save + p.save unless p.person.nil? end end diff --git a/app/models/person.rb b/app/models/person.rb index 35c4cf116..d0db04eb2 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -13,5 +13,8 @@ class Person many :posts, :class_name => 'Post', :foreign_key => :person_id validates_presence_of :email, :real_name - + + # def newest(type = nil) + # type.constantize.where(:person_id => id).last + # end end diff --git a/app/models/post.rb b/app/models/post.rb index e91431fa1..73ee295ce 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -26,6 +26,19 @@ class Post yield self end + def self.newest(person = nil) + return self.last if person.nil? + self.where(:person_id => person.id).sort(:created_at.desc) + end + + def self.my_newest + self.newest(User.first) + end + def self.newest_by_email(email) + self.where(:person_id => Person.where(:email => email).first.id).last + end + + protected def send_to_view diff --git a/app/models/status_message.rb b/app/models/status_message.rb index 9871f690d..ee7e696aa 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -9,8 +9,8 @@ class StatusMessage < Post validates_presence_of :message - def self.my_newest - StatusMessage.where(:person_id => User.first.id).sort(:created_at.desc).first + def ==(other) + (self.message == other.message) && (self.person.email == other.person.email) end end diff --git a/lib/common.rb b/lib/common.rb index 066991613..2731bd929 100644 --- a/lib/common.rb +++ b/lib/common.rb @@ -1,17 +1,17 @@ module Diaspora - module Webhooks + include ApplicationHelper def self.included(klass) klass.class_eval do after_save :notify_friends @@queue = MessageHandler.new def notify_friends - #if self.owner == User.first.email + if mine? self xml = Post.build_xml_for(self) @@queue.add_post_request( friends_with_permissions, xml ) @@queue.process - #end + end end def prep_webhook @@ -24,7 +24,7 @@ module Diaspora def self.build_xml_for(posts) xml = "" - #xml += Post.generate_header + xml += Post.generate_header xml += "" posts.each {|x| xml << x.prep_webhook} xml += "" diff --git a/science b/science deleted file mode 100755 index 87ce701e0..000000000 --- a/science +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby -`sprinkle -s config/sprinkle/provision.rb -v` -`cap deploy:setup` -`cap deploy:cold` -puts 'bababababa bababababa' diff --git a/spec/controllers/status_messages_controller_spec.rb b/spec/controllers/status_messages_controller_spec.rb index ecea61257..37bd1c128 100644 --- a/spec/controllers/status_messages_controller_spec.rb +++ b/spec/controllers/status_messages_controller_spec.rb @@ -61,7 +61,7 @@ describe StatusMessagesController do get :index StatusMessage.all.each do |message| response.body.include?(message.message).should be true - response.body.include?(message.owner).should be true + response.body.include?(message.person.email).should be true end end end diff --git a/spec/factories.rb b/spec/factories.rb index adcd546e8..5055b0023 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -29,6 +29,4 @@ Factory.define :bookmark do |b| end Factory.define :post do |p| - p.source "New York Times" - p.sequence(:snippet) {|n| "This is some information #{n}"} end diff --git a/spec/helpers/parser_spec.rb b/spec/helpers/parser_spec.rb index d1d991a8f..7130ed5fa 100644 --- a/spec/helpers/parser_spec.rb +++ b/spec/helpers/parser_spec.rb @@ -4,38 +4,61 @@ include ApplicationHelper describe ApplicationHelper do before do - @user = Factory.create(:user, :email => "bob@aol.com") + @user = Factory.create(:user, :email => "bob@aol.com") @friend =Factory.create(:friend, :email => "bill@gates.com") end - it "should store objects sent from xml" do + it "should not store posts from me" do status_messages = [] - 10.times { status_messages << Factory.build(:status_message)} - + 10.times { status_messages << Factory.build(:status_message, :person => @user)} xml = Post.build_xml_for(status_messages) - store_posts_from_xml(xml) - StatusMessage.count.should == 10 + StatusMessage.count.should == 0 end - it 'should discard posts where it does not know the type' do xml = " - #{User.first.email} + #{Friend.first.email} \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n " store_posts_from_xml(xml) Post.count.should == 2 + Post.first.person.email.should == Friend.first.email end + it "should reject xml with no sender" do + xml = " + + + \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n + + \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n + " + store_posts_from_xml(xml) + Post.count.should == 0 + end + it "should reject xml with a sender not in the database" do + xml = " + + + foo@example.com + + + \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n + + \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n + " + store_posts_from_xml(xml) + Post.count.should == 0 + end it 'should discard types which are not of type post' do xml = " - #{User.first.email} + #{Friend.first.email} \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n @@ -44,6 +67,7 @@ describe ApplicationHelper do " store_posts_from_xml(xml) Post.count.should == 2 + Post.first.person.email.should == Friend.first.email end @@ -58,9 +82,6 @@ describe ApplicationHelper do parse_sender_id_from_xml(@xml).should == @user.email end - it 'should be able to retrieve the sender\'s local Person object' do - parse_sender_object_from_xml(@xml).should == @user - end it 'should be able to parse the body\'s contents' do body = parse_body_contents_from_xml(@xml).to_s diff --git a/spec/lib/common_spec.rb b/spec/lib/common_spec.rb index dc99c3aeb..c8c14f7c4 100644 --- a/spec/lib/common_spec.rb +++ b/spec/lib/common_spec.rb @@ -67,7 +67,8 @@ describe Diaspora do it "should check that it does not send a friends post to an owners friends" do Post.stub(:build_xml_for).and_return(true) Post.should_not_receive(:build_xml_for) - Factory.create(:status_message, :owner => "nottheowner@post.com") + + Factory.create(:status_message, :person => Factory.create(:friend)) end it "should ensure one url is created for every friend" do diff --git a/spec/models/blogs_spec.rb b/spec/models/blogs_spec.rb index 384971f38..f1c617bea 100644 --- a/spec/models/blogs_spec.rb +++ b/spec/models/blogs_spec.rb @@ -16,24 +16,30 @@ describe Blog do it "should add an owner if none is present" do b = Factory.create(:blog) - b.owner.should == "bob@aol.com" + b.person.email.should == "bob@aol.com" end describe "newest" do before do - (2..4).each { Factory.create(:blog, :owner => "some@dudes.com") } + @friend_one = Factory.create(:friend, :email => "some@dudes.com") + @friend_two = Factory.create(:friend, :email => "other@dudes.com") + (2..4).each { Factory.create(:blog, :person => @friend_one) } (5..8).each { Factory.create(:blog) } - (9..11).each { Factory.create(:blog, :owner => "other@dudes.com") } + (9..11).each { Factory.create(:blog, :person => @friend_two) } + Factory.create(:status_message) + Factory.create(:bookmark) end it "should give the most recent blog title and body from owner" do - blog = Blog.my_newest + blog = Blog.newest(User.first) + blog.class.should == Blog blog.title.should == "bobby's 8 penguins" blog.body.should == "jimmy's huge 8 whales" end it "should give the most recent blog body for a given email" do - blog = Blog.newest("some@dudes.com") + blog = Blog.newest_by_email("some@dudes.com") + blog.class.should == Blog blog.title.should == "bobby's 14 penguins" blog.body.should == "jimmy's huge 14 whales" end diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb index 4c9ecd9c8..4d253a7a6 100644 --- a/spec/models/bookmark_spec.rb +++ b/spec/models/bookmark_spec.rb @@ -11,7 +11,7 @@ describe Bookmark do it "should add an owner if none is present" do Factory.create(:user, :email => "bob@aol.com") n = Factory.create(:bookmark) - n.owner.should == "bob@aol.com" + n.person.email.should == "bob@aol.com" end it 'should validate its link' do @@ -67,11 +67,10 @@ describe Bookmark do end it 'should marshal serialized XML to object' do - xml = "Reddit</message><link>http://reddit.com/</link><owner>bob@aol.com</owner></bookmark>" + xml = "<bookmark><title>Reddit</message><link>http://reddit.com/</link></bookmark>" parsed = Bookmark.from_xml(xml) parsed.title.should == "Reddit" parsed.link.should == "http://reddit.com/" - parsed.owner.should == "bob@aol.com" parsed.valid?.should be_true end end diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 9f52f044c..6e5327753 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -8,24 +8,13 @@ describe Post do describe 'defaults' do before do WebSocket.stub!(:update_clients) - @post = Factory.create(:post, :person => nil, :owner => nil, :source => nil, :snippet => nil) + @post = Factory.create(:post, :person => nil) end it "should associate the owner if none is present" do @post.person.should == User.first end - it "should add an owner if none is present" do - @post.owner.should == "bob@aol.com" - end - - it "should add a source if none is present" do - @post.source.should == "bob@aol.com" - end - - it "should add a snippet if none is present" do - @post.snippet.should == "bob@aol.com" - end end diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index 9773c8334..f57edea8d 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -12,19 +12,27 @@ describe StatusMessage do n.valid?.should be true end + + it "should add an owner if none is present" do + n = Factory.create(:status_message) + n.person.email.should == "bob@aol.com" + end + describe "newest" do before do - @friend = Factory.build(:friend, :email => "robert@grimm.com") - (1..5).each { Factory.create(:status_message, :person => @friend) } - (6..10).each { Factory.create(:status_message) } + @person_one = Factory.create(:friend,:email => "some@dudes.com") + (1..10).each { Factory.create(:status_message, :person => @person_one) } + (1..5).each { Factory.create(:status_message) } + Factory.create(:bookmark) + Factory.create(:bookmark, :person => @person_one) end - it "should give the most recent message from owner" do - StatusMessage.my_newest.message.should == "jimmy's 11 whales" + it "should give the most recent message from a friend" do + StatusMessage.newest(@person_one).message.should == "jimmy's 13 whales" end it "should give the most recent message for a given email" do - StatusMessage.newest("some@dudes.com").message.should == "jimmy's 16 whales" + StatusMessage.newest_by_email(@person_one.email).message.should == "jimmy's 28 whales" end end @@ -35,10 +43,9 @@ describe StatusMessage do end it 'should marshal serialized XML to object' do - xml = "<statusmessage><message>I hate WALRUSES!</message><owner>Bob@rob.ert</owner></statusmessage>" + xml = "<statusmessage><message>I hate WALRUSES!</message></statusmessage>" parsed = StatusMessage.from_xml(xml) parsed.message.should == "I hate WALRUSES!" - parsed.owner.should == "Bob@rob.ert" parsed.valid?.should be_true end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f9604803e..c69c5850c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -21,7 +21,6 @@ Rspec.configure do |config| DatabaseCleaner.orm = "mongo_mapper" config.before(:suite) do - DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end @@ -32,6 +31,7 @@ Rspec.configure do |config| config.after(:each) do DatabaseCleaner.clean + #Factory.sequences.each{ |s| s.reset} end