Paths, gentleman, paths

O

Ohad Lutzky

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?
 
R

Robert Klemme

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?

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
 
D

David Vallner

--------------enig50683BDD55C0391366B6186E
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

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

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 Vallner


--------------enig50683BDD55C0391366B6186E
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32)

iD8DBQFFT+wzy6MhrS8astoRAn5uAJ9eYWZnwuKA4+jgiKC1TFeK+ojxRACeKBSM
pMcXlL35JjNdq1Edqmf486M=
=cZjf
-----END PGP SIGNATURE-----

--------------enig50683BDD55C0391366B6186E--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top