facebook friend finder is now contact-aware

This commit is contained in:
zhitomirskiyi 2011-01-25 15:05:23 -08:00
parent d976bf0966
commit cf45f31712
3 changed files with 26 additions and 14 deletions

View file

@ -21,12 +21,17 @@ class Services::Facebook < Service
data = JSON.parse(response.body)['data'] data = JSON.parse(response.body)['data']
data_h = {} data_h = {}
data.map do |d| data.each do |d|
data_h[d['id']] = {:name => d['name']} data_h[d['id']] = {:name => d['name']}
end end
service_objects = Services::Facebook.where(:uid => data_h.keys).includes(:user => :person) service_objects = Services::Facebook.where(:uid => data_h.keys).includes(:user => :person)
service_objects.each{|s| data_h[s.uid][:person] = s.user.person} service_objects.each do |s|
data_h[s.uid][:person] = s.user.person
data_h[s.uid][:contact] = self.user.contacts.where(:person_id => s.user.person.id).first
end
data_h data_h
end end

View file

@ -11,17 +11,20 @@
.contact_list .contact_list
= search_field_tag :contact_search, "", :class => 'contact_list_search', :results => 5, :placeholder => t('shared.contact_list.all_contacts') = search_field_tag :contact_search, "", :class => 'contact_list_search', :results => 5, :placeholder => t('shared.contact_list.all_contacts')
%ul %ul
- for friend in @friends - for friend in @friends.values
%li %li
%h4.name %h4.name
= link_to friend[:name], '#' = link_to friend[:name], '#'
- if person = friend[:person]
.right .right
-if friend[:contact] && !friend[:contact].pending
= t('.already_connected')
- elsif (friend[:contact] && friend[:contact].pending)
= t('.pending_request')
- elsif friend[:person]
= link_to t('people.show.start_sharing'), = link_to t('people.show.start_sharing'),
{:controller => "people", {:controller => "people",
:action => "share_with", :action => "share_with",
:id => person.id}, :id => friend[:person].id},
:class => 'button', :class => 'button',
:rel => 'facebox' :rel => 'facebox'

View file

@ -29,7 +29,7 @@ describe Services::Facebook do
describe '#finder' do describe '#finder' do
before do before do
@user2 = Factory(:user) @user2 = Factory.create(:user_with_aspect)
@user2_fb_id = '820651' @user2_fb_id = '820651'
@user2_fb_name = 'Maxwell Salzberg' @user2_fb_name = 'Maxwell Salzberg'
@user2_service = Services::Facebook.create(:uid => @user2_fb_id, :access_token => "yo") @user2_service = Services::Facebook.create(:uid => @user2_fb_id, :access_token => "yo")
@ -50,25 +50,29 @@ JSON
end end
it 'requests a friend list' do it 'requests a friend list' do
RestClient.should_receive(:get).with("https://graph.facebook.com/me/friends", {:params => {:access_token => @user2_service.access_token}}).and_return(@web_mock) RestClient.should_receive(:get).with("https://graph.facebook.com/me/friends", {:params => {:access_token => @service.access_token}}).and_return(@web_mock)
@user2_service.finder @service.finder
end end
context 'returns a hash' do context 'returns a hash' do
it 'returns a hash' do it 'returns a hash' do
@user2_service.finder.class.should == Hash @service.finder.class.should == Hash
end end
it 'contains a name' do it 'contains a name' do
@user2_service.finder.values.first[:name].should == @user2_fb_name @service.finder.values.first[:name].should == @user2_fb_name
end end
it 'contains a photo url' do it 'contains a photo url' do
pending pending
end end
it 'contains a FB id' do it 'contains a FB id' do
@user2_service.finder.include?(@user2_fb_id).should be_true @service.finder.include?(@user2_fb_id).should be_true
end end
it 'contains a diaspora person object' do it 'contains a diaspora person object' do
@user2_service.finder.values.first[:person].should == @user2.person @service.finder.values.first[:person].should == @user2.person
end
it 'contains a contact object if connected' do
connect_users(@user, @user.aspects.first, @user2, @user2.aspects.first)
@service.finder.values.first[:contact].should == @user.reload.contact_for(@user2.person)
end end
end end