From: Chris Roos Date: 2005-05-06T08:52:52+09:00 Subject: Re: String Manipulation Nuby Question 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 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 + + forename + + 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 >> >> > > > >