A couple of basic questions

Hi,

Q.1: I was processing file/dir names with the following snippet:

Find.find(wd) do |item| # Subordinate file/directory fully-qualified
names
if File.directory?(item)
# Process directory name
if item =~ /portfolio/i
item_saved = ’ ’ + item
item.gsub!(/portfolio/, ‘position’)

When I saved item in item_saved without modification, the gsub change
both the item name as well as the saved name (because what was saved
was a reference to item, not item’s content). So my work-around was
to save a modified name. That doesn’t seem like “The Ruby Way”.
What’s a better way?

Q. 2: In that same snippet, I made two substitutions:

  item.gsub!(/portfolio/, 'position')
  item.gsub!(/Portfolio/, 'Position')

That’s also a kluge. But the following didn’t compile:

  item.gsub!(/([pP])ortfolio/, $1 + 'osition')

Is there a “Ruby Way” to reduce the redundancy?

Thanks in Advance,
Richard

RichardOnRails wrote:

Find.find(wd) do |item| # Subordinate file/directory fully-qualified
names

For the sake of the deity or not of your choice, use Pathname!!

  item.gsub!(/([pP])ortfolio/, $1 + 'osition')

Would item.gsub!(/([pP])ortfolio/, ‘\1osition’) work?

I suspect this would work:

item.gsub!(/([pP])ortfolio/){ $1 + 'osition' }

2008/7/30 RichardOnRails [email protected]:

 item.gsub!(/portfolio/, 'position')

When I saved item in item_saved without modification, the gsub change
both the item name as well as the saved name (because what was saved
was a reference to item, not item’s content). So my work-around was
to save a modified name. That doesn’t seem like “The Ruby Way”.
What’s a better way?

Leave item alone and store the new name in a new variable:

if …
new_item = item.gsub(/portfolio/, ‘position’)

(notice the missing “!”)

Q. 2: In that same snippet, I made two substitutions:

 item.gsub!(/portfolio/, 'position')
 item.gsub!(/Portfolio/, 'Position')

That’s also a kluge. But the following didn’t compile:

 item.gsub!(/([pP])ortfolio/, $1 + 'osition')

This cannot work because $1 is evaluated only once, i.e. before #gsub
is invoked. You need something like Phlip suggested.

item.gsub /([pP])ortfolio/, ‘\1osition’

Is there a “Ruby Way” to reduce the redundancy?

Yes.

Cheers

robert

On Jul 30, 3:33 am, Robert K. [email protected] wrote:

if File.directory?(item)

 item.gsub!(/Portfolio/, 'Position')

Is there a “Ruby Way” to reduce the redundancy?

Yes.

Cheers

robert


use.inject do |as, often| as.you_can - without end

Hi Philip & Robert,

Thank you both very much for clearing the fog from my brain :slight_smile: BTW,
the deity of choice for me is the null set :slight_smile:

Best wishes,
Richard

On Jul 30, 3:33 am, Robert K. [email protected] wrote:

if File.directory?(item)

 item.gsub!(/Portfolio/, 'Position')

Is there a “Ruby Way” to reduce the redundancy?

Yes.

Cheers

robert


use.inject do |as, often| as.you_can - without end

Hi Gentlemen,

I just want to add that I tried both your suggestions and they worked
perfectly.

Again, many thanks,
Richard