Merge branch 'master' of github.com:diaspora/diaspora_rails

This commit is contained in:
Raphael 2010-06-30 16:26:25 -07:00
commit 877f321d51
9 changed files with 201 additions and 69 deletions

View file

@ -3,6 +3,7 @@ class Comment
include ROXML
include Diaspora::Webhooks
xml_accessor :text
xml_accessor :person, :as => Person
xml_accessor :post_id
@ -17,11 +18,18 @@ class Comment
key :person_id, ObjectId
belongs_to :person, :class_name => "Person"
after_save :send_friends_comments_on_my_posts
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
end

View file

@ -9,35 +9,43 @@
require 'config/environment'
# Create seed user
User.create( :email => "a@a.com", :password => "aaaaaa", :profile => Profile.create( :first_name => "Robert", :last_name => "Grimm" ))
user = User.create( :email => "tom@joindiaspora.com", :password => "aaaaaa", :profile => Profile.create( :first_name => "Diaspora", :last_name => "Tom" ))
names = [ ["George", "Washington"],
["John", "Adams"],
["Thomas", "Jefferson"],
["James", "Madison"],
["James", "Monroe"],
["John Quincy", "Adams"],
["Andrew", "Jackson"],
["Martin Van", "Buren"],
["William Henry","Harrison"],
["John", "Tyler"],
["James K." , "Polk"],
["Zachary", "Taylor"],
["Millard", "Fillmore"],
["Franklin", "Pierce"],
["James", "Buchanan"],
["Abraham", "Lincoln"]
]
# Make friends
friend_one = Friend.create( :email => "babycakes@a.com", :url => "http://babycakes.joindiaspora.com/", :profile =>Profile.create( :first_name => "Baby", :last_name => "Cakes") )
friend_two = Friend.create( :email => "mario@a.com", :url => "http://mario.joindiaspora.com/", :profile => Profile.create( :first_name => "Mario", :last_name => "Cakes") )
friend_three = Friend.create( :email => "stuff@a.com", :url => "http://stuff.joindiaspora.com/", :profile => Profile.create( :first_name => "Stuff", :last_name => "Cakes") )
(1..10).each { |n|
Friend.create( :email => "b#{n}@joindiaspora.com", :url => "http://b#{n}.joindiaspora.com/", :profile => Profile.create(:first_name => names[n-1][0], :last_name => names[n-1][1]))
}
# Populate feed
StatusMessage.create(:message => "There's a bomb in the lasagna!?", :person => friend_one )
Bookmark.create(:title => "xkcd", :link => "http://xkcd.com/743/", :person => friend_two )
StatusMessage.create(:message => "I switched to Motoroi today, a Motorola Android-based phone, in Korea. Now, I am using Android phones in both the U.S. and Korea", :person => friend_two )
StatusMessage.create(:message => "I had 5 hours to study for it :-( GREs on Thursday. Wunderbar.", :person => friend_two )
StatusMessage.create(:message => "Spotted in toy story 3: google maps, OSX, and windows XP. Two out of three isn't bad.", :person => friend_three )
Bookmark.create( :title => "Reddit", :link => "http://reddit.com", :person => friend_one )
Blog.create(:title => "I Love Rock'N'Roll - Joan Jett & The Blackhearts", :body => "<p>The loudspeakers played this song as we walked into the city pool for the first time this summer. Those loudspeakers make every song sound fresh even if I have heard it a thousand times and their effect on this song was no different. Joan sounded young and strong and ready, and for a moment I forgot where or when I was.</p> <p>also i can tell it wont be long and also happy summer imaginary constructs -mumblelard</p>", :person => friend_one )
StatusMessage.create(:message => "Commercials for IE make me SO MAD and my friends just don't get why.", :person => friend_one )
Bookmark.create(:title => "Zombo.com", :link => "http://zombo.com", :person => friend_three )
StatusMessage.create(:message => "Why do I have \"No More Heroes\" by Westlife on repeat all day?", :person => friend_two )
StatusMessage.create(:message => "Mmm. Friday night. Acknowledged.", :person => friend_three )
StatusMessage.create(:message => "Getting a universal remote is the epitome of laziness, I do declare.", :person => friend_one )
StatusMessage.create(:message => "Does anyone know how to merge two Skype contact entries of the same person? (i.e. one Skype ID and one mobile number)", :person => friend_two )
StatusMessage.create(:message => "A cool, cool morning for once.", :person => friend_one )
StatusMessage.create(:message => "There's a bomb in the lasagna!?", :person => user)
Bookmark.create(:title => "xkcd", :link => "http://xkcd.com/743/", :person => user )
StatusMessage.create(:message => "I switched to Motoroi today, a Motorola Android-based phone, in Korea. Now, I am using Android phones in both the U.S. and Korea", :person => user, :created_at => Time.now-930)
StatusMessage.create(:message => "I had 5 hours to study for it :-( GREs on Thursday. Wunderbar.", :person => user, :created_at => Time.now-43990)
StatusMessage.create(:message => "Spotted in toy story 3: google maps, OSX, and windows XP. Two out of three isn't bad.", :person => user, :created_at => Time.now-4390)
Bookmark.create( :title => "Reddit", :link => "http://reddit.com", :person => user, :created_at => Time.now-54390)
Blog.create(:title => "I Love Rock'N'Roll - Joan Jett & The Blackhearts", :body => "<p>The loudspeakers played this song as we walked into the city pool for the first time this summer. Those loudspeakers make every song sound fresh even if I have heard it a thousand times and their effect on this song was no different. Joan sounded young and strong and ready, and for a moment I forgot where or when I was.</p> <p>also i can tell it wont be long and also happy summer imaginary constructs -mumblelard</p>", :person => user, :created_at => Time.now-3090)
StatusMessage.create(:message => "Commercials for IE make me SO MAD and my friends just don't get why.", :person => user, :created_at => Time.now-30900)
Bookmark.create(:title => "Zombo.com", :link => "http://zombo.com", :person => user, :created_at => Time.now-9090)
StatusMessage.create(:message => "Why do I have \"No More Heroes\" by Westlife on repeat all day?", :person => user, :created_at => Time.now-590000)
StatusMessage.create(:message => "Mmm. Friday night. Acknowledged.", :person => user, :created_at => Time.now-503900)
StatusMessage.create(:message => "Getting a universal remote is the epitome of laziness, I do declare.", :person => user, :created_at => Time.now-4400)
StatusMessage.create(:message => "Does anyone know how to merge two Skype contact entries of the same person? (i.e. one Skype ID and one mobile number)", :person => user, :created_at => Time.now-400240)
StatusMessage.create(:message => "A cool, cool morning for once.", :person => user, :created_at => Time.now-150000)

38
db/seeds/backer.rb Normal file
View file

@ -0,0 +1,38 @@
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
# Mayor.create(:name => 'Daley', :city => citie
require 'config/environment'
def create(backer_number, password)
names = [ ["George", "Washington"],
["John", "Adams"],
["Thomas", "Jefferson"],
["James", "Madison"],
["James", "Monroe"],
["John Quincy", "Adams"],
["Andrew", "Jackson"],
["Martin Van", "Buren"],
["William Henry","Harrison"],
["John", "Tyler"],
["James K." , "Polk"],
["Zachary", "Taylor"],
["Millard", "Fillmore"],
["Franklin", "Pierce"],
["James", "Buchanan"],
["Abraham", "Lincoln"]
]
# Create seed user
user = User.create( :email => "b#{backer_number}@joindiaspora.com", :password => "#{password}", :profile => Profile.create( :first_name => names[backer_number][0], :last_name => names[backer_number][1] ))
# Make friends with Diaspora Tom
Friend.create( :email => "tom@joindiaspora.com", :url => "http://tom.joindiaspora.com/", :profile => Profile.create(:first_name => "Diaspora", :last_name => "Tom"))
end

51
db/seeds/tom.rb Normal file
View file

@ -0,0 +1,51 @@
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
# Mayor.create(:name => 'Daley', :city => citie
require 'config/environment'
# Create seed user
user = User.create( :email => "tom@joindiaspora.com", :password => "aaaaaa", :profile => Profile.create( :first_name => "Diaspora", :last_name => "Tom" ))
names = [ ["George", "Washington"],
["John", "Adams"],
["Thomas", "Jefferson"],
["James", "Madison"],
["James", "Monroe"],
["John Quincy", "Adams"],
["Andrew", "Jackson"],
["Martin Van", "Buren"],
["William Henry","Harrison"],
["John", "Tyler"],
["James K." , "Polk"],
["Zachary", "Taylor"],
["Millard", "Fillmore"],
["Franklin", "Pierce"],
["James", "Buchanan"],
["Abraham", "Lincoln"]
]
# Make friends
(1..10).each { |n|
Friend.create( :email => "b#{n}@joindiaspora.com", :url => "http://b#{n}.joindiaspora.com/", :profile => Profile.create(:first_name => names[n-1][0], :last_name => names[n-1][1]))
}
# Populate feed
StatusMessage.create(:message => "There's a bomb in the lasagna!?", :person => user)
Bookmark.create(:title => "xkcd", :link => "http://xkcd.com/743/", :person => user )
StatusMessage.create(:message => "I switched to Motoroi today, a Motorola Android-based phone, in Korea. Now, I am using Android phones in both the U.S. and Korea", :person => user, :created_at => Time.now-930)
StatusMessage.create(:message => "I had 5 hours to study for it :-( GREs on Thursday. Wunderbar.", :person => user, :created_at => Time.now-43990)
StatusMessage.create(:message => "Spotted in toy story 3: google maps, OSX, and windows XP. Two out of three isn't bad.", :person => user, :created_at => Time.now-4390)
Bookmark.create( :title => "Reddit", :link => "http://reddit.com", :person => user, :created_at => Time.now-54390)
Blog.create(:title => "I Love Rock'N'Roll - Joan Jett & The Blackhearts", :body => "<p>The loudspeakers played this song as we walked into the city pool for the first time this summer. Those loudspeakers make every song sound fresh even if I have heard it a thousand times and their effect on this song was no different. Joan sounded young and strong and ready, and for a moment I forgot where or when I was.</p> <p>also i can tell it wont be long and also happy summer imaginary constructs -mumblelard</p>", :person => user, :created_at => Time.now-3090)
StatusMessage.create(:message => "Commercials for IE make me SO MAD and my friends just don't get why.", :person => user, :created_at => Time.now-30900)
Bookmark.create(:title => "Zombo.com", :link => "http://zombo.com", :person => user, :created_at => Time.now-9090)
StatusMessage.create(:message => "Why do I have \"No More Heroes\" by Westlife on repeat all day?", :person => user, :created_at => Time.now-590000)
StatusMessage.create(:message => "Mmm. Friday night. Acknowledged.", :person => user, :created_at => Time.now-503900)
StatusMessage.create(:message => "Getting a universal remote is the epitome of laziness, I do declare.", :person => user, :created_at => Time.now-4400)
StatusMessage.create(:message => "Does anyone know how to merge two Skype contact entries of the same person? (i.e. one Skype ID and one mobile number)", :person => user, :created_at => Time.now-400240)
StatusMessage.create(:message => "A cool, cool morning for once.", :person => user, :created_at => Time.now-150000)

View file

@ -64,10 +64,12 @@ module Diaspora
def push_to(recipients)
recipients.map!{|x| x = x.url + "receive/"}
xml = self.class.build_xml_for([self])
@@queue.add_post_request( recipients, xml )
@@queue.process
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

View file

@ -1,12 +1,23 @@
namespace :db do
desc 'Seed the current RAILS_ENV database from db/seeds.rb'
task :seed do
require 'db/seeds'
namespace :seed do
task :tom do
puts "Seeding the database for #{Rails.env}..."
require 'db/seeds/tom'
end
task :backer, :num, :password do |t, args|
puts "Seeding the database for #{Rails.env}..."
require 'db/seeds/backer'
create( Integer(args.num), args.password )
end
end
desc 'Delete the collections in the current RAILS_ENV database'
task :delete do
task :purge do
require 'config/environment'
puts "Purging the database for #{Rails.env}..."
# Specifiy what models to remove
Post.delete_all
Person.delete_all
@ -15,7 +26,10 @@ namespace :db do
desc 'Purge and seed the current RAILS_ENV database using information from db/seeds.rb'
task :reset do
Rake::Task['db:delete'].invoke
Rake::Task['db:seed'].invoke
puts "Resetting the database for #{Rails.env}".upcase
Rake::Task['db:purge'].invoke
Rake::Task['db:seed:tom'].invoke
puts "Success!"
end
end

View file

@ -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

View file

@ -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

View file

@ -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
end