From d3c0f1b3d28b0e91278fc6c8355274abca4d9976 Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Wed, 30 Mar 2011 12:45:22 -0700 Subject: [PATCH] ruby objects, get outta my face. (conversationscontroller new) --- app/controllers/conversations_controller.rb | 5 ++++- app/models/person.rb | 11 +++++----- spec/models/person_spec.rb | 24 +++++++++++++-------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index d4106e123..d652ec74d 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -58,7 +58,10 @@ class ConversationsController < ApplicationController end def new - @all_contacts_and_ids = current_user.contacts.map { |c| {:value => c.id, :name => c.person.name} } + @all_contacts_and_ids = Contact.connection.execute(current_user.contacts.joins(:person => :profile).select("contacts.id, profiles.first_name, profiles.last_name, profiles.diaspora_handle").to_sql).map do |r| + {:value => r[0], :name => Person.name_from_attrs(r[1], r[2], r[3])} + end + @contact = current_user.contacts.find(params[:contact_id]) if params[:contact_id] render :layout => false end diff --git a/app/models/person.rb b/app/models/person.rb index 99925857f..5b287f3ba 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -84,11 +84,12 @@ class Person < ActiveRecord::Base end def name(opts = {}) - @name ||= if profile.nil? || profile.first_name.nil? || profile.first_name.blank? - self.diaspora_handle - else - "#{profile.first_name.to_s} #{profile.last_name.to_s}" - end + @name ||= Person.name_from_attrs(self.profile.first_name, self.profile.last_name, self.diaspora_handle) + + end + + def self.name_from_attrs(first_name, last_name, diaspora_handle) + first_name.blank? ? diaspora_handle : "#{first_name.to_s} #{last_name.to_s}" end def first_name diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index 15b5375e0..dbad049ab 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -64,27 +64,33 @@ describe Person do end end - context '#name' do - let!(:user) { Factory(:user) } - let!(:person) { user.person } - let!(:profile) { person.profile } + context '.name_from_attrs' do + before do + @person = alice.person + @profile = @person.profile + end context 'with first name' do it 'should return their name for name' do - person.name.should match /#{profile.first_name}|#{profile.last_name}/ + Person.name_from_attrs(@profile.first_name, @profile.last_name, @profile.diaspora_handle).should match /#{@profile.first_name}|#{@profile.last_name}/ end end context 'without first name' do it 'should display their diaspora handle' do - person.profile.first_name = nil - person.profile.last_name = nil - person.save! - person.name.should == person.diaspora_handle + Person.name_from_attrs(nil, nil, @profile.diaspora_handle).should == @profile.diaspora_handle end end end + context '#name' do + it 'calls Person.name_from_attrs' do + profile = alice.person.profile + Person.should_receive(:name_from_attrs).with(profile.first_name, profile.last_name, profile.person.diaspora_handle) + alice.name + end + end + describe 'xml' do before do @xml = @person.to_xml.to_s