diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index cda4aac848a1fcd5d17b2fe155885d289f784e7c..e887549c28593580de32ef659561afc6f0089d63 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -8,7 +8,6 @@ class SessionsController < Devise::SessionsController protected def enqueue_update if current_user - pp params current_user.services.each{|s| Resque.enqueue(Job::UpdateServiceUsers, s.id) if s.respond_to? :save_friends } diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb index fb9d0d75790b506791035be84a14471695360a3c..f8a5a1f445e2d45d238ab001d031239ff58bf46e 100644 --- a/app/models/services/facebook.rb +++ b/app/models/services/facebook.rb @@ -21,7 +21,11 @@ class Services::Facebook < Service def finder(opts = {}) Rails.logger.debug("event=friend_finder type=facebook sender_id=#{self.user_id}") - Resque.enqueue(Job::UpdateServiceUsers, self.id) + if self.service_users == [] + self.save_friends + else + Resque.enqueue(Job::UpdateServiceUsers, self.id) + end person = Person.arel_table service_user = ServiceUser.arel_table if opts[:local] @@ -38,7 +42,7 @@ class Services::Facebook < Service {:fields => ['name', 'id', 'picture'], :access_token => self.access_token}}) data = JSON.parse(response.body)['data'] data.each{ |p| - ServiceUser.find_or_create_by_service_id_and_name_and_uid_and_photo_url(:service_id => self.id, :name => p["name"], + ServiceUser.find_or_create_by_service_id_and_uid(:service_id => self.id, :name => p["name"], :uid => p["id"], :photo_url => p["picture"]) } end diff --git a/app/views/services/_finder.html.haml b/app/views/services/_finder.html.haml index 9b4b1a1cdad1db4f093cb086a3368ff9bde9a95c..caf89a21e038ae5148ab974e121a2fe89802fcd7 100644 --- a/app/views/services/_finder.html.haml +++ b/app/views/services/_finder.html.haml @@ -4,5 +4,5 @@ = search_field_tag :contact_search, "", :class => 'contact_list_search', :results => 5, :placeholder => t('shared.contact_list.all_contacts') %ul.friend_finder - - for uid in friends.keys - = render :partial => 'services/remote_friend', :locals => {:friend => friends[uid], :uid => uid} + - for friend in friends + = render :partial => 'services/remote_friend', :locals => {:friend => friend, :uid => friend.uid} diff --git a/app/views/services/_remote_friend.html.haml b/app/views/services/_remote_friend.html.haml index 019c0f3d7fc3442aec91fe03a74c1081f26ac4ce..d15e2a28e28679aa61bc7f9317859562eea6d5d1 100644 --- a/app/views/services/_remote_friend.html.haml +++ b/app/views/services/_remote_friend.html.haml @@ -1,18 +1,18 @@ %li.remote_friend{:id => "uid_" + uid, :uid => uid} .right - -if friend[:contact] && !friend[:contact].pending + -if friend.contact && !friend.contact.pending = t('people.person.already_connected') - - elsif (friend[:contact] && friend[:contact].pending) || (friend[:request] && friend[:request].sender_id != friend[:person].id) + - elsif (friend.contact && friend.contact.pending) || (friend.request && friend.request.sender_id != friend.person.id) = t('people.person.pending_request') - - elsif (friend[:request] && friend[:request].sender_id == friend[:person].id) - = link_to t('people.show.incoming_request', :name => truncate(friend[:person].name, :length => 20, :separator => ' ', :omission => '')), + - elsif (friend.request && friend.request.sender_id == friend.person.id) + = link_to t('people.show.incoming_request', :name => truncate(friend.person.name, :length => 20, :separator => ' ', :omission => '')), '#', :class => 'button' - - elsif friend[:invitation_id] + - elsif friend.invitation_id = t('invitations.new.already_invited') %br - = link_to t('.resend'), service_inviter_path(:uid => uid, :provider => 'facebook', :invitation_id => friend[:invitation_id]) - - elsif friend[:person] + = link_to t('.resend'), service_inviter_path(:uid => uid, :provider => 'facebook', :invitation_id => friend.invitation_id) + - elsif friend.person = link_to t('people.show.start_sharing'), '#', :class => 'button' @@ -23,23 +23,23 @@ = hidden_field_tag :uid, uid = submit_tag t('.invite') - - if friend[:person] - = person_image_link(friend[:person]) + - if friend.person + = person_image_link(friend.person) - else = image_tag('/images/user/default.png', :class => 'avatar') %h4.name - - if friend[:person] - = link_to friend[:name], person_path(friend[:person]) + - if friend.person + = link_to friend.name, person_path(friend.person) - else - = friend[:name] + = friend.name -- unless friend[:person].nil? || (friend[:contact] && friend[:contact].pending) || (friend[:request] && friend[:request].sender_id != friend[:person].id) +- unless friend.person.nil? || (friend.contact && friend.contact.pending) || (friend.request && friend.request.sender_id != friend.person.id) %li{:id => "options_" + uid, :class => "share_with hidden", :style => "height:auto"} - - contact = friend[:contact] + - contact = friend.contact - contact ||= Contact.new = render :partial => 'contacts/share_with_list', - :locals => {:person => friend[:person], + :locals => {:person => friend.person, :contact => contact, :aspects_with_person => [], :aspects_without_person => current_user.aspects, diff --git a/app/views/services/finder.html.haml b/app/views/services/finder.html.haml index c441ff27333f6819c3d99cc5f677f88d16438f73..4b9fc19e4a49eaefbe4233de2044040fa2ec8f3d 100644 --- a/app/views/services/finder.html.haml +++ b/app/views/services/finder.html.haml @@ -12,14 +12,14 @@ %h4 = t('.invite_your_friends_from', :service => params[:provider].titleize) .description - - if @friends.keys.length > 0 - = t('.friends', :count => @friends.keys.length) + - if @friends.size > 0 + = t('.friends', :count => @friends.size) - else %i= t('.not_connected') .contact_list - - if @friends.keys.length > 0 + - if @friends.size > 0 = render :partial => 'services/finder', :locals => {:friends => @friends} - else %br diff --git a/public/javascripts/contact-list.js b/public/javascripts/contact-list.js index da37b2800f32aeaf94ca6332457e9e093c138dc6..1a1d38a571c8879b1f3f8947e85338733c9ea9e7 100644 --- a/public/javascripts/contact-list.js +++ b/public/javascripts/contact-list.js @@ -10,7 +10,7 @@ var List = { var list = $(this).siblings("ul").first(); var query = new RegExp(search.val(),'i'); - $("li", list).each( function() { + $("> li", list).each( function() { var element = $(this); if( !element.text().match(query) ) { if( !element.hasClass('hidden') ) { diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index b3548feba6ae0b7db53f9ee42fca6677f28ea2e2..cdd4ac02f5ee2f015d1890ca9e43d7a249c7c415 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -17,17 +17,11 @@ describe SessionsController do let(:mock_access_token) { Object.new } - let(:omniauth_auth) { - { 'provider' => 'twitter', - 'uid' => '2', - 'user_info' => { 'nickname' => 'grimmin' }, - 'credentials' => { 'token' => 'tokin', 'secret' =>"not_so_much" } - } - } - before do - request.env["devise.mapping"] = Devise.mappings[:user] + @request.env["devise.mapping"] = Devise.mappings[:user] @user = alice + @user.password = "evankorth" + @user.password_confirmation = "evankorth" @service = Services::Facebook.new(:access_token => "yeah") @user.services << @service @user.save @@ -36,7 +30,7 @@ describe SessionsController do describe "#create" do it 'queues up an update job' do Resque.should_receive(:enqueue).with(Job::UpdateServiceUsers, @service.id) - post :create, {"user"=>{"remember_me"=>"0", "username"=>"alice", + post :create, {"user"=>{"remember_me"=>"0", "username"=> @user.username, "password"=>"evankorth"}} end end diff --git a/spec/models/services/facebook_spec.rb b/spec/models/services/facebook_spec.rb index fc69a03d0d101a61895de905bcd279fbf8c6cb20..ae8e1522157ecad357391e4d9123ff4d5c9157b6 100644 --- a/spec/models/services/facebook_spec.rb +++ b/spec/models/services/facebook_spec.rb @@ -71,8 +71,14 @@ JSON end describe '#finder' do + it 'does a syncronous call if it has not been called before' do + @service.should_receive(:save_friends) + @service.finder + end it 'dispatches a resque job' do Resque.should_receive(:enqueue).with(Job::UpdateServiceUsers, @service.id) + su2 = ServiceUser.create(:service => @user2_service, :uid => @user2_fb_id, :name => @user2_fb_name, :photo_url => @user2_fb_photo_url) + @service.service_users = [su2] @service.finder end context 'opts' do