Skip to content
Extraits de code Groupes Projets
Valider 6d105e5c rédigé par Raphael Sofaer's avatar Raphael Sofaer
Parcourir les fichiers

Don't n query in UsersController#public

parent 243699c8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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>
......
......@@ -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
......
......@@ -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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter