From aa5bef0c3f90896f5fb8009135346343d989271d Mon Sep 17 00:00:00 2001 From: zhitomirskiyi <ilya@joindiaspora.com> Date: Mon, 21 Mar 2011 12:01:20 -0700 Subject: [PATCH] calls the job on login does a sync call if the cache friends was not called before, fixed the views --- app/controllers/sessions_controller.rb | 1 - app/models/services/facebook.rb | 8 ++++-- app/views/services/_finder.html.haml | 4 +-- app/views/services/_remote_friend.html.haml | 30 ++++++++++---------- app/views/services/finder.html.haml | 6 ++-- public/javascripts/contact-list.js | 2 +- spec/controllers/sessions_controller_spec.rb | 14 +++------ spec/models/services/facebook_spec.rb | 6 ++++ 8 files changed, 37 insertions(+), 34 deletions(-) diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index cda4aac848..e887549c28 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 fb9d0d7579..f8a5a1f445 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 9b4b1a1cda..caf89a21e0 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 019c0f3d7f..d15e2a28e2 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 c441ff2733..4b9fc19e4a 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 da37b2800f..1a1d38a571 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 b3548feba6..cdd4ac02f5 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 fc69a03d0d..ae8e152215 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 -- GitLab