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

Refactor peoplecontroller index

parent 1f71474f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -12,18 +12,32 @@ class PeopleController < ApplicationController ...@@ -12,18 +12,32 @@ class PeopleController < ApplicationController
@aspect = :search @aspect = :search
@people = Person.search(params[:q]).paginate :page => params[:page], :per_page => 25, :order => 'created_at DESC' @people = Person.search(params[:q]).paginate :page => params[:page], :per_page => 25, :order => 'created_at DESC'
@requests = Request.all(:to_id.in => @people.map{|p| p.id}, :from_id => current_user.person.id)
#only do it if it is an email address
if params[:q].try(:match, Devise.email_regexp)
webfinger(params[:q])
end
if @people.count == 1 if @people.count == 1
redirect_to @people.first redirect_to @people.first
else else
respond_with @people @hashes = hashes_for_people(@people, @aspects)
#only do it if it is an email address
if params[:q].try(:match, Devise.email_regexp)
webfinger(params[:q])
end
end
end
def hashes_for_people people, aspects
ids = people.map{|p| p.id}
requests = {}
Request.all(:to_id.in => ids, :from_id => current_user.person.id).each do |r|
requests[r.to_id] = r
end
contacts = {}
Contact.all(:user_id => current_user.id, :person_id.in => ids).each do |contact|
contacts[contact.person_id] = contact
end end
people.map{|p|
{:person => p,
:contact => contacts[p.id],
:request => requests[p.id],
:aspects => aspects}
}
end end
def show def show
......
...@@ -8,11 +8,7 @@ ...@@ -8,11 +8,7 @@
%u= params[:q] %u= params[:q]
%ul{:class => 'stream people', :id => 'people_stream'} %ul{:class => 'stream people', :id => 'people_stream'}
- for person in @people - for hash in @hashes
= render 'people/person', = render :partial => 'people/person', :locals => hash
:person => person,
:aspects => @aspects,
:contact => @contacts.detect{|contact| contact.person_id == person.id},
:request => @requests.detect{|request| request.to_id == person.id}
= will_paginate @people = will_paginate @people
...@@ -14,22 +14,66 @@ describe PeopleController do ...@@ -14,22 +14,66 @@ describe PeopleController do
sign_in :user, user sign_in :user, user
end end
describe '#hashes_from_people' do
before do
@everyone = []
10.times do
@everyone << Factory.create(:person)
end
user.send_contact_request_to(@everyone[3], aspect)
user.send_contact_request_to(@everyone[2], aspect)
user.activate_contact(@everyone[4], aspect)
user.activate_contact(@everyone[5], aspect)
@people = Person.search('eugene')
@people.length.should == 10
@hashes = @controller.hashes_for_people(@people, user.aspects)
end
it 'has the correct result for no relationship' do
hash = @hashes.first
hash[:person].should == @people.first
hash[:contact].should be_false
hash[:request].should be_false
hash[:aspects].should == user.aspects
end
it 'has the correct result for a connected person' do
hash = @hashes[4]
hash[:person].should == @people[4]
hash[:contact].should be_true
hash[:request].should be_false
hash[:aspects].should == user.aspects
end
it 'has the correct result for a requested person' do
hash = @hashes[2]
hash[:person].should == @people[2]
hash[:contact].should be_false
hash[:request].should be_true
hash[:aspects].should == user.aspects
end
end
describe '#index' do describe '#index' do
before do before do
@eugene = Factory.create(:person, :profile => {:first_name => "Eugene", :last_name => "w"}) @eugene = Factory.create(:person, :profile => {:first_name => "Eugene", :last_name => "w"})
@korth = Factory.create(:person, :profile => {:first_name => "Evan", :last_name => "Korth"}) @korth = Factory.create(:person, :profile => {:first_name => "Evan", :last_name => "Korth"})
end end
it "yields search results for substring of person name" do it "assigns hashes" do
eugene2 = Factory.create(:person, :profile => {:first_name => "Eugene", :last_name => "w"})
get :index, :q => "Eu" get :index, :q => "Eu"
assigns[:people].should include @eugene assigns[:hashes][0][:person].should == @eugene
assigns[:hashes][0][:person].should == eugene2
end
it "assigns people" do
eugene2 = Factory.create(:person, :profile => {:first_name => "Eugene", :last_name => "w"})
get :index, :q => "Eu"
assigns[:people].should == [@eugene, eugene2]
end end
it 'shows a contact' do it 'shows a contact' do
user2 = make_user user2 = make_user
connect_users(user, aspect, user2, user2.aspects.create(:name => 'Neuroscience')) connect_users(user, aspect, user2, user2.aspects.create(:name => 'Neuroscience'))
get :index, :q => user2.person.profile.first_name.to_s get :index, :q => user2.person.profile.first_name.to_s
assigns[:people].should include user2.person response.should redirect_to user2.person
end end
it 'shows a non-contact' do it 'shows a non-contact' do
...@@ -37,7 +81,7 @@ describe PeopleController do ...@@ -37,7 +81,7 @@ describe PeopleController do
user2.person.profile.searchable = true user2.person.profile.searchable = true
user2.save user2.save
get :index, :q => user2.person.profile.first_name.to_s get :index, :q => user2.person.profile.first_name.to_s
assigns[:people].should include user2.person response.should redirect_to user2.person
end end
it "redirects to person page if there is exactly one match" do it "redirects to person page if there is exactly one match" do
......
...@@ -140,7 +140,7 @@ describe Person do ...@@ -140,7 +140,7 @@ describe Person do
end end
end end
describe '#search' do describe '.search' do
before do before do
@connected_person_one = Factory.create(:person) @connected_person_one = Factory.create(:person)
@connected_person_two = Factory.create(:person) @connected_person_two = Factory.create(:person)
......
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