On 1/11/07, ChrisH <chris.hulan / gmail.com> wrote:
> They could also add the path to the $LOAD_PATH, i.e:
>
> $LOAD_PATH<<''folder_a/folder_b'
> require 'class_file'

This can create a problem if you have two files with the same name in
different directories.

I would recommend designing a fixed folder structure for your library,
rooted in one directory, such as:

lib\
  package1\
    class1.rb
    class2.rb
  package2\
   classA.rb
   classB.rb

Each class that might depend on other classes makes a require
statement as if it was rooted in the lib directory. E.g. in
package1\class2.rb, have:

 require 'class1' # Current directory always on load path
 require 'package2\classA' # File in another directory requires path

To make that work, one file needs to be loaded before others which
adds the full path to the "lib\" directory to the $LOAD_PATH variable
(AKA known as $:).

I recommend creating a small file that just has requires, which is
used to load your library from a given script. Example, imagine your
library lives under an app directory:

app\
  main.rb
  library.rb
  lib\
   package1\
   package2\
   etc.

library.rb would have these contents:

  $: << "path to lib\"
  require 'package1\class1" # Load initial library files. Not
absolutely necessary.
  require 'package2\classA" # Load initial library files. Not
absolutely necessary.

Then in main.rb, which is your app, you can just have this statement
to get your library loaded:

  require 'library'

Alternatively, you can make the modifications to $: in your main.rb
file, and then load the library. This skips the step of creating a
"library.rb" file, so main.rb just looks like:

  $: << "path to lib\"
  require 'package1\class1"
  require 'package2\classA"

Hope that helps.

Justin