Don't n query in UsersController#public

This commit is contained in:
Raphael Sofaer 2011-06-04 22:34:48 -07:00
parent 243699c8e9
commit 6d105e5c09
3 changed files with 31 additions and 23 deletions

View file

@ -93,13 +93,14 @@ class StatusMessage < Post
identifiers.empty? ? [] : Person.where(:diaspora_handle => identifiers)
end
def to_activity
def to_activity(opts={})
author = opts[:author] || self.author #Use an already loaded author if passed in.
<<-XML
<entry>
<title>#{x(self.formatted_message(:plain_text => true))}</title>
<content>#{x(self.formatted_message(:plain_text => true))}</content>
<link rel="alternate" type="text/html" href="#{self.author.url}p/#{self.id}"/>
<id>#{self.author.url}p/#{self.id}</id>
<link rel="alternate" type="text/html" href="#{author.url}p/#{self.id}"/>
<id>#{author.url}p/#{self.id}</id>
<published>#{self.created_at.xmlschema}</published>
<updated>#{self.updated_at.xmlschema}</updated>
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>

View file

@ -63,11 +63,7 @@ module Diaspora
def create_body
@posts.inject("") do |xml,curr|
if curr.respond_to?(:to_activity)
unless xml
curr.to_activity
else
xml + curr.to_activity
end
xml + curr.to_activity(:author => @user.person)
else
xml
end

View file

@ -8,32 +8,43 @@ require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
describe Diaspora::OstatusBuilder do
let!(:user) { alice }
let(:aspect) { user.aspects.first }
let!(:public_status_messages) {
3.times.inject([]) do |arr,n|
s = user.post(:status_message, :text => "hey#{n}", :public => true, :to => aspect.id)
before do
@aspect = alice.aspects.first
@public_status_messages = 3.times.inject([]) do |arr,n|
s = alice.post(:status_message, :text => "hey#{n}", :public => true, :to => @aspect.id)
arr << s
end
}
let!(:private_status_messages) {
3.times.inject([]) do |arr,n|
s = user.post(:status_message, :text => "secret_ney#{n}", :public => false, :to => aspect.id)
@private_status_messages = 3.times.inject([]) do |arr,n|
s = alice.post(:status_message, :text => "secret_ney#{n}", :public => false, :to => @aspect.id)
arr << s
end
}
let!(:atom) { director = Diaspora::Director.new; director.build(Diaspora::OstatusBuilder.new(user, public_status_messages)) }
director = Diaspora::Director.new;
@atom = director.build(Diaspora::OstatusBuilder.new(alice, @public_status_messages))
end
it 'should include a users posts' do
public_status_messages.each{ |status| atom.should include status.text}
@public_status_messages.each{ |status| @atom.should include status.text}
end
it 'should iterate through all objects, and not stop if it runs into a post without a to_activity' do
messages = public_status_messages.collect{|x| x.text}
public_status_messages.insert(1, [])
messages = @public_status_messages.collect{|x| x.text}
@public_status_messages.insert(1, [])
director = Diaspora::Director.new;
atom2 = director.build(Diaspora::OstatusBuilder.new(user, public_status_messages))
atom2 = director.build(Diaspora::OstatusBuilder.new(alice, @public_status_messages))
messages.each{ |message| atom2.should include message }
end
include Oink::InstanceTypeCounter
it 'does not query the db for the author of every post' do
alice.person #Preload user.person
ActiveRecord::Base.reset_instance_type_count
director = Diaspora::Director.new
messages = StatusMessage.where(:author_id => alice.person.id, :public => true)
builder = Diaspora::OstatusBuilder.new(alice, messages)
director.build( builder )
report_hash["Person"].should be_nil #No people should have been instantiated
end
end