Paths, gentleman, paths

I have this bit of code in the beginning of an application I’m writing
(in main.rb):

require ‘pathname’

p = Pathname.new($0)

if p.basename.to_s == ‘main.rb’
Dir.chdir p.parent.to_s
end

require ‘gui/main_window’
… # (rest of requires, application itself)

The check whether it’s “main.rb” or not is so this doesn’t happen for
Rake. Now, it works well, but it’s ugly. The reason I don’t just go
ahead and use ‘:’ is that I use glade, as well as some other files which
I need to be able to find. This is currently in development, so I’d
prefer to avoid forcing people to install the program in predetermined
locations (/usr/local/bin, /usr/local/share/my_app_files, et cetera).

Any cleaner solution?

On 06.11.2006 14:13, Ohad L. wrote:

Any cleaner solution?

Dir.chdir( File.dirname( $0 ) ) if File.basename $0 == ‘main.rb’

or

dir, file = File.split $0
Dir.chdir dir if file == ‘main.rb’

Cheers

robert

Ohad L. wrote:

The check whether it’s “main.rb” or not is so this doesn’t happen for
Rake. Now, it works well, but it’s ugly. The reason I don’t just go
ahead and use ‘:’ is that I use glade, as well as some other files which
I need to be able to find. This is currently in development, so I’d
prefer to avoid forcing people to install the program in predetermined
locations (/usr/local/bin, /usr/local/share/my_app_files, et cetera).

Have your startup script/s determine the “root” of your application’s
directory structure, and use a global to refer to all other resources
using absolute paths from this root path? (Yes, I know globals are evil,
but the current working directory is global state too, so it’s at least
not a worse solution.)

Depending on being chdirred into your directory structure or on
predetermined install locations is Bad, smells too much of “I know
what’s good for my users better than them” to me.

David V.