RS, IZ, Cleaned up Post, finished Person refactor, FactoryGirl sequences are unpleasant
This commit is contained in:
parent
6acee9d158
commit
8829714e2d
20 changed files with 91 additions and 90 deletions
2
Gemfile
2
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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
= raw @blog.body
|
||||
%p
|
||||
%strong Owner:
|
||||
= @blog.owner
|
||||
= @blog.person.email
|
||||
|
||||
%p
|
||||
= link_to "Edit", edit_blog_path(@blog)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
= link_to @bookmark.link
|
||||
%p
|
||||
%strong Owner:
|
||||
= @bookmark.owner
|
||||
= @bookmark.person.email
|
||||
|
||||
%p
|
||||
= link_to "Edit", edit_bookmark_path(@bookmark)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = "<XML>
|
||||
<head>
|
||||
<sender>
|
||||
<email>#{User.first.email}</email>
|
||||
<email>#{Friend.first.email}</email>
|
||||
</sender>
|
||||
</head><posts>
|
||||
<post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post> <post><not_a_real_type></not_a_real_type></post> <post><status_message>\n <message>HEY DUDE</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
</posts></XML>"
|
||||
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 = "<XML>
|
||||
<head>
|
||||
</head><posts>
|
||||
<post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
<post><friend></friend></post>
|
||||
<post><status_message>\n <message>HEY DUDE</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
</posts></XML>"
|
||||
store_posts_from_xml(xml)
|
||||
Post.count.should == 0
|
||||
|
||||
end
|
||||
it "should reject xml with a sender not in the database" do
|
||||
xml = "<XML>
|
||||
<head>
|
||||
<sender>
|
||||
<email>foo@example.com</email>
|
||||
</sender>
|
||||
</head><posts>
|
||||
<post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
<post><friend></friend></post>
|
||||
<post><status_message>\n <message>HEY DUDE</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
</posts></XML>"
|
||||
store_posts_from_xml(xml)
|
||||
Post.count.should == 0
|
||||
end
|
||||
it 'should discard types which are not of type post' do
|
||||
xml = "<XML>
|
||||
<head>
|
||||
<sender>
|
||||
<email>#{User.first.email}</email>
|
||||
<email>#{Friend.first.email}</email>
|
||||
</sender>
|
||||
</head><posts>
|
||||
<post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post>
|
||||
|
|
@ -44,6 +67,7 @@ describe ApplicationHelper do
|
|||
</posts></XML>"
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = "<bookmark><title>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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = "<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
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ Rspec.configure do |config|
|
|||
|
||||
config.after(:each) do
|
||||
DatabaseCleaner.clean
|
||||
#Factory.sequences.each{ |s| s.reset}
|
||||
end
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue