Big project in ruby


#1

Hi all

I’m trying to design a big application in ruby and I have (among
others) a doubt/question.

I’m creating folders with the classes (I supose influenced by java
package distribution structure) and I want to use them.

So, when I write into a .rb file require ‘whatever’ I’m using the form
require ‘folder_a/folder_b/class_file.rb’. There any ruby
variable which I can write require ruby_var+"/class_file.rb"?

Thanks in advance

Kind regards

Miquel


LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com


#2

On 1/11/07, ChrisH removed_email_address@domain.invalid 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


#3

On 11.01.2007 18:18, Miquel wrote:

So, when I write into a .rb file require ‘whatever’ I’m using the form
require ‘folder_a/folder_b/class_file.rb’. There any ruby

You only need

require ‘folder_a/folder_b/class_file’

variable which I can write require ruby_var+"/class_file.rb"?

You can use any variable there since require is a function call like any
other - at least from the caller’s perspective

ruby_var = ‘folder_a/folder_b’
require ruby_var + “/class_file”

Kind regards

robert


#4

Robert K. wrote:

On 11.01.2007 18:18, Miquel wrote:

So, when I write into a .rb file require ‘whatever’ I’m using the form
require ‘folder_a/folder_b/class_file.rb’. There any ruby
variable which I can write require ruby_var+"/class_file.rb"?

You can use any variable there since require is a function call like any
other - at least from the caller’s perspective

ruby_var = ‘folder_a/folder_b’
require ruby_var + “/class_file”

They could also add the path to the $LOAD_PATH, i.e:

$LOAD_PATH<<’‘folder_a/folder_b’
require ‘class_file’

cheers
Chris