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 ...@@ -93,13 +93,14 @@ class StatusMessage < Post
identifiers.empty? ? [] : Person.where(:diaspora_handle => identifiers) identifiers.empty? ? [] : Person.where(:diaspora_handle => identifiers)
end end
def to_activity def to_activity(opts={})
author = opts[:author] || self.author #Use an already loaded author if passed in.
<<-XML <<-XML
<entry> <entry>
<title>#{x(self.formatted_message(:plain_text => true))}</title> <title>#{x(self.formatted_message(:plain_text => true))}</title>
<content>#{x(self.formatted_message(:plain_text => true))}</content> <content>#{x(self.formatted_message(:plain_text => true))}</content>
<link rel="alternate" type="text/html" href="#{self.author.url}p/#{self.id}"/> <link rel="alternate" type="text/html" href="#{author.url}p/#{self.id}"/>
<id>#{self.author.url}p/#{self.id}</id> <id>#{author.url}p/#{self.id}</id>
<published>#{self.created_at.xmlschema}</published> <published>#{self.created_at.xmlschema}</published>
<updated>#{self.updated_at.xmlschema}</updated> <updated>#{self.updated_at.xmlschema}</updated>
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
......
...@@ -63,11 +63,7 @@ module Diaspora ...@@ -63,11 +63,7 @@ module Diaspora
def create_body def create_body
@posts.inject("") do |xml,curr| @posts.inject("") do |xml,curr|
if curr.respond_to?(:to_activity) if curr.respond_to?(:to_activity)
unless xml xml + curr.to_activity(:author => @user.person)
curr.to_activity
else
xml + curr.to_activity
end
else else
xml xml
end end
......
...@@ -8,32 +8,43 @@ require File.join(Rails.root, 'lib/diaspora/ostatus_builder') ...@@ -8,32 +8,43 @@ require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
describe Diaspora::OstatusBuilder do describe Diaspora::OstatusBuilder do
let!(:user) { alice } before do
let(:aspect) { user.aspects.first } @aspect = alice.aspects.first
let!(:public_status_messages) { @public_status_messages = 3.times.inject([]) do |arr,n|
3.times.inject([]) do |arr,n| s = alice.post(:status_message, :text => "hey#{n}", :public => true, :to => @aspect.id)
s = user.post(:status_message, :text => "hey#{n}", :public => true, :to => aspect.id)
arr << s arr << s
end end
}
let!(:private_status_messages) { @private_status_messages = 3.times.inject([]) do |arr,n|
3.times.inject([]) do |arr,n| s = alice.post(:status_message, :text => "secret_ney#{n}", :public => false, :to => @aspect.id)
s = user.post(:status_message, :text => "secret_ney#{n}", :public => false, :to => aspect.id)
arr << s arr << s
end 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 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 end
it 'should iterate through all objects, and not stop if it runs into a post without a to_activity' do 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} messages = @public_status_messages.collect{|x| x.text}
public_status_messages.insert(1, []) @public_status_messages.insert(1, [])
director = Diaspora::Director.new; 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 } messages.each{ |message| atom2.should include message }
end 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 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