diff --git a/Gemfile b/Gemfile
index 836a5c285..5cf621b4e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,7 +3,7 @@ source 'http://gemcutter.org'
gem 'rails', '3.0.0.beta4'
-gem "mongoid", :git => "git://github.com/durran/mongoid.git"
+gem "mongoid", :git => "git://github.com/durran/mongoid.git", :ref => "79b4d3710d17c949544f"
gem "bson_ext", "1.0.1"
gem "haml"
gem "devise", :git => "git://github.com/plataformatec/devise.git", :ref => "cfadaf80a2b7e9c0b255"
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index e56227538..438c3f9c6 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,17 +40,15 @@ 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
def mine?(post)
- post.owner == User.first.email
+ post.person == User.first
end
def type_partial(post)
diff --git a/app/models/blog.rb b/app/models/blog.rb
index 3da382754..b52ebee7f 100644
--- a/app/models/blog.rb
+++ b/app/models/blog.rb
@@ -9,11 +9,4 @@ class Blog < Post
validates_presence_of :title, :body
- def self.newest(owner_email)
- Blog.last(:conditions => {:owner => owner_email})
- end
-
- def self.my_newest
- Blog.newest(User.first.email)
- end
end
diff --git a/app/models/person.rb b/app/models/person.rb
index 399dbb394..ea7157d30 100644
--- a/app/models/person.rb
+++ b/app/models/person.rb
@@ -11,5 +11,8 @@ class Person
has_many_related :posts
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 9dc312309..8b3ff61f2 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -9,14 +9,6 @@ class Post
include ROXML
include Diaspora::Webhooks
- xml_accessor :owner
- xml_accessor :snippet
- xml_accessor :source
-
- field :owner
- field :source
- field :snippet
-
belongs_to_related :person
@@ -41,6 +33,15 @@ class Post
yield self
end
+ def self.newest(person = nil)
+ return self.last if person.nil?
+ self.where(:person_id => person.id).last
+ end
+
+ def self.newest_by_email(email)
+ self.where(:person_id => Person.where(:email => email).first.id).last
+ end
+
protected
@@ -50,10 +51,6 @@ class Post
end
def set_defaults
- user_email = User.first.email
- self.owner ||= user_email
- self.source ||= user_email
- self.snippet ||= user_email
self.person ||= User.first
end
end
diff --git a/app/models/status_message.rb b/app/models/status_message.rb
index e22bcb621..0e1269ba5 100644
--- a/app/models/status_message.rb
+++ b/app/models/status_message.rb
@@ -9,18 +9,8 @@ class StatusMessage < Post
validates_presence_of :message
-
- def self.newest(owner_email)
- StatusMessage.last(:conditions => {:owner => owner_email})
- end
-
- def self.my_newest
- StatusMessage.newest(User.first.email)
- end
-
-
- def ==(other)
- (self.message == other.message) && (self.owner == other.owner)
+ def ==(other)
+ (self.message == other.message) && (self.person.email == other.person.email)
end
end
diff --git a/app/views/blogs/show.html.haml b/app/views/blogs/show.html.haml
index b1e270b42..3b541de2e 100644
--- a/app/views/blogs/show.html.haml
+++ b/app/views/blogs/show.html.haml
@@ -8,7 +8,7 @@
= raw @blog.body
%p
%strong Owner:
- = @blog.owner
+ = @blog.person.email
%p
= link_to "Edit", edit_blog_path(@blog)
diff --git a/app/views/bookmarks/_bookmark.html.haml b/app/views/bookmarks/_bookmark.html.haml
index ca90be1fe..2a457866a 100644
--- a/app/views/bookmarks/_bookmark.html.haml
+++ b/app/views/bookmarks/_bookmark.html.haml
@@ -1,6 +1,6 @@
%li.message{:class => ("mine" if mine?(post))}
%span.from
- = link_to post.owner, "#"
+ = link_to post.person.email, "#"
%b shared a link
%br
= post.title
diff --git a/app/views/bookmarks/show.html.haml b/app/views/bookmarks/show.html.haml
index 2072f4cf9..ba142025d 100644
--- a/app/views/bookmarks/show.html.haml
+++ b/app/views/bookmarks/show.html.haml
@@ -8,7 +8,7 @@
= link_to @bookmark.link
%p
%strong Owner:
- = @bookmark.owner
+ = @bookmark.person.email
%p
= link_to "Edit", edit_bookmark_path(@bookmark)
diff --git a/app/views/status_messages/show.html.haml b/app/views/status_messages/show.html.haml
index 4be35c793..ee969a983 100644
--- a/app/views/status_messages/show.html.haml
+++ b/app/views/status_messages/show.html.haml
@@ -6,7 +6,7 @@
%p
%strong Owner:
- = @status_message.owner
+ = @status_message.person.email
%p
= link_to "Destroy", @status_message, :confirm => 'Are you sure?', :method => :delete
diff --git a/lib/common.rb b/lib/common.rb
index 8da6ddd31..e0283d333 100644
--- a/lib/common.rb
+++ b/lib/common.rb
@@ -1,13 +1,13 @@
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
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 d995e1e88..93d27498e 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -28,6 +28,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 32c9557a4..cc4a735dd 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 = "Reddithttp://reddit.com/bob@aol.com"
+ xml = "Reddithttp://reddit.com/"
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 61bd5efbc..a7a0919b7 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
it "should list child types in reverse chronological order" do
diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb
index 7bfa0af00..ba63f2642 100644
--- a/spec/models/status_message_spec.rb
+++ b/spec/models/status_message_spec.rb
@@ -14,21 +14,24 @@ describe StatusMessage do
it "should add an owner if none is present" do
n = Factory.create(:status_message)
- n.owner.should == "bob@aol.com"
+ n.person.email.should == "bob@aol.com"
end
describe "newest" do
before do
- (1..5).each { Factory.create(:status_message, :owner => "some@dudes.com") }
- (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
@@ -39,10 +42,9 @@ describe StatusMessage do
end
it 'should marshal serialized XML to object' do
- xml = "I hate WALRUSES!Bob@rob.ert"
+ xml = "I hate WALRUSES!"
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 2ebfc5477..b4499cd5a 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -32,6 +32,7 @@ Rspec.configure do |config|
config.after(:each) do
DatabaseCleaner.clean
+ #Factory.sequences.each{ |s| s.reset}
end