Thanks for coming back so fast.  Unfortunately, this doesn't pass one of 
the tests - where only a title and surname is supplied this 
implementation will put two spaces in the middle...

"Mr  Bloggs" instead of
"Mr Bloggs"

Chris

Logan Capaldo wrote:
> "#{title} #{forename} #{surname}".strip
> 
> On 5/5/05, Chris Roos <chris / seagul.co.uk> wrote:
> 
>>I have a Person with title, forename and surname (all of which are
>>optional).  I want to return a 'pretty' name for this person in the format..
>>
>>title + <space> + forename + <space> + surname
>>
>>..where any extraneous spaces are removed.
>>
>>My name method currently looks like this
>>
>>def name
>>  (
>>   (title.to_s.strip.empty? ? "" : title.to_s.strip << " ") <<
>>   (forename.to_s.strip.empty? ? "" : forename.to_s.strip << " ") <<
>>   (surname.to_s.strip.empty? ? "" : surname.to_s.strip)
>>  ).strip
>>end
>>
>>I created seven tests for this method for each combination of the three
>>parameters.  All seven tests pass with this implementation.
>>
>>Note.  I was half way through writing about how I should probably test
>>for nil and maybe return an empty string from the three (title,
>>forename, surname) methods when I realised that all I was really doing
>>was testing for nil in a roundabout way; i.e. convert possible nil's to
>>string then strip spaces then check for empty...
>>
>>I started thinking about this some more and realised that a test for nil
>>would return false which would allow me to re-write the above method
>>like so..
>>
>>def name
>>  (
>>   (title ? title.strip << " " : "") <<
>>   (forename ? forename.strip << " " : "") <<
>>   (surname ? surname.strip : "")
>>  ).strip
>>end
>>
>>This gets rid of the nasty duplication and double question marks in the
>>first method.
>>
>>I also realised that I needed another test - for all nil's.  They all
>>still passed.
>>
>>What I was originally going to ask was how to improve on the first
>>implementation above.  Even though (in my opinion) the second
>>implementation is a lot cleaner I'm still interested in whether it can
>>be made even more succinct as in 'the ruby way'?
>>
>>It may be a very small method and have taken me about an hour to go
>>through this process but I'm quite pleased as to how it's turned out.
>>
>>Chris
>>
>>
> 
> 
> 
>