On Tuesday, September 9, 2003, 11:20:27 PM, Recheis wrote:

> hi,
> consider a script foo.rb that contains the line

> require './lib/lib.rb'

> lib.rb contains the line:

> require './lib/annother.rb'

> it works.
> (require 'annother.rb' doesn't work allthough the file
> annother.rb is placed in the same directory as lib.rb)

> but i am not very pleased with it. the library in the directory lib,
> must not know from where it is required. what can i do so that lib
> can require all it's files no matter where the script that requires
> lib.rb is located?


I think the best thing you can do is put some effort into your code
organisation so that all "requires" assume a common base. This is not
very easy as Ruby has no enforced standards, but it's not too
difficult once you know how. See
  http://www.rubygarden.org/ruby?ProjectDirectoryStructure
for some ideas.  I should update that soon as I have learnt a lot
more.

To learn the same, play with install.rb from the RAA (project name
"setup" IIRC) and see how another project does it.

Basically, your "requires" should look like this, if your project name
is "foo":

  require "foo/one"
  require "foo/another"

To achieve this, your project will be installed at <site_ruby>/1.8/foo
and your development directory structure will look like this:

  foo/lib/foo/one.rb
  foo/lib/foo/another.rb

There are remaining issues, but that's enough for now; you may not
even want to separate development and installation at the moment.

It is abnormal to (a) use filesystem paths and (b) explicitly state
the "rb" extension, so I guess you have a lot to learn... :)

Cheers,
Gavin