On Thu, May 28, 2009 at 8:04 AM, Max Williams
<toastkid.williams / gmail.com> wrote:
>>> s = "My Lesson"
> => "My Lesson"
>>> copied_name(_)
> => "Copy of My Lesson"
>>> copied_name(_)
> => "Copy 1 of My Lesson"
>>> copied_name(_)
> => "Copy 2 of My Lesson"
>

Well, taking that approach how about:

 def copied_name(source_name)
   case source_name
   when /^Copy of (.*)$/i
     "Copy 1 of #{$1}"
   when /^Copy (\d+) of (.*)$/i
     num = $1.to_i
     "Copy #{num+1} of #{$2}"
   else
     "Copy of #{source_name}"
   end
 end

 s = "My Lesson" # => "My Lesson"
 s = copied_name(s) # => "Copy of My Lesson"
 s = copied_name(s) # => "Copy 1 of My Lesson"
 s = copied_name(s) # => "Copy 2 of My Lesson"

However, since you used the i option on your regex maybe you wanted to
preserve the case of the "Copy of part" which this doesn't

 s = "copy of My Lesson" # => "copy of My Lesson"
 s = copied_name(s) # => "Copy 1 of My Lesson"
 s = copied_name(s) # => "Copy 2 of My Lesson"
 s = copied_name(s) # => "Copy 3 of My Lesson"

If so then this does:

 def copied_name(source_name) # !> method redefined; discarding old copied_name
   case source_name
   when /^(Copy )(of .*)$/i
     "#{$1}1 #{$2}"
   when /^(Copy )(\d+)( of .*)$/i
     num = $2.to_i
     "#{$1}#{num+1}#{$3}"
   else
     "Copy of #{source_name}"
   end
 end

 s = "My Lesson" # => "My Lesson"
 s = copied_name(s) # => "Copy of My Lesson"
 s = copied_name(s) # => "Copy 1 of My Lesson"
 s = copied_name(s) # => "Copy 2 of My Lesson"

 s = "copy of My Lesson" # => "copy of My Lesson"
 s = copied_name(s) # => "copy 1 of My Lesson"
 s = copied_name(s) # => "copy 2 of My Lesson"
 s = copied_name(s) # => "copy 3 of My Lesson"



-- 
Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale