How can I organize my project in the best way?

Discussion in 'Ruby' started by Christoffer Lernö, Apr 22, 2008.

  1. I'm writing a server for a networked game using ruby, but I keep
    running into issues when organizing them.

    Basically I have a structure looking a bit like this:

    lib/
    testclient/
    gamemodel/
    gamecommands/
    server/
    utils/
    test/
    gamemodel/
    gamecommands/
    server/
    utils/


    The problem is the paths for the requires.

    For a test in say test/gamemodel, I need to require something
    like ../../lib/gamemodel/<file>
    But when running the same test from some test_all.rb in /test, the
    correct require is of course ../lib/gamemodel/<file>
    (The natural way would have been to simply write require <file>)

    It is possible to fix this problem by appending to the load path, but
    this means rows of duplicate code in every test file.

    The problem naturally extends to the lib where you also have to decide
    where the code supposedly is run from.

    Any suggestions on neat ways of solving this problem or are there
    perhaps packages available to make this work automatically?


    /Christoffer
     
    Christoffer Lernö, Apr 22, 2008
    #1
    1. Advertisements

  2. Christoffer Lernö

    Trans Guest

    Hi Christoffer,

    When testing your lib you should only need to add lib/ to the load
    path once. For instance you might do:

    ruby -Ilib test/sometest.rb

    T.
     
    Trans, Apr 22, 2008
    #2
    1. Advertisements

  3. Hi Christoffer,
    Yes, but if the test is in

    test/client/tc_connect.rb

    then I might need to require

    test/test_common.rb
    lib/client/connect.rb

    Again I need to add these libs differently depending on where I start
    my test.


    /Christoffer
     
    Christoffer Lernö, Apr 22, 2008
    #3
  4. Christoffer Lernö

    Trans Guest

    You can add test/ to the load path as well if you need too.
    This should always be:

    require 'client/connect'
    Easiest is to always start from your projects root. Using Rake, for
    instance, makes that automatic. But as an example of manually running
    a test from within the test location:

    $ cd test/client
    $ ruby -I../../lib;../../test tc_connect.rb

    T.
     
    Trans, Apr 22, 2008
    #4
  5. So what you're saying is basically to add everything to the load path =20=

    and then run with that?

    /Christoffer=
     
    Christoffer Lernö, Apr 23, 2008
    #5
  6. Christoffer Lernö

    fedzor Guest

    check out the "need" gem! makes these things simple.


    ~ Ira Rizdal

    Go hang a salami, I'm a lasagna hog
     
    fedzor, Apr 25, 2008
    #6
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.