Backwards references in arrays of arrays of...

O

Ohad Lutzky

I'm creating a scheduling application for my university, the Technion.
The course data we receive in a file called a REP file, which my
application parses. Its essential, simplified structure is this:

Faculties (which have names) contain courses
Courses (which have numbers and names) contain groups
Groups (which have numbers and lecturer names) contain events
Events have days, start/end times, and locations

This data I convert once (it takes a while), and then Marshal it. I
don't use YAML, though I'd rather do that, because of a unicode bug in
the stable version. The choice between them is less relevant.

So in my program, the data is stored as an array of Faculty objects,
which have a courses property which is an array of Course objects, and
so on - all the way down to events.

Now, I display the rendered schedule using Gecko. I have prepared an
HTML template for this, for which all I have to add is event lines in
Javascript, which go something like this:

addEvent(course_id, day, start, end, desc);

This code is then inserted into the HTML, which goes about the
rendering. course_id should be a unique identifier for color-coding.
desc, which is the actual rendered text, should contain the event's
course name & number, group number, lecturer, and location.

Now here's the kicker - an event doesn't know all that. It knows its
day, start/end time, and location. And that it's an event. It doesn't
know what group it's a part of, what course, nothing.

So the question is - how do I generate the javascript?

Currently, the scheduler returns an array of arrays of groups (an array
of groups per course). So my options are

- Have the scheduler generate the javascript - let it figure out which
groups belong to which courses, iterate down to the choices, and
generate everything
- Store javascript strings within the events during parsing of the REP
file
(I don't like this because if I use YAML later on, I'd like it to be
redistributable instead of the REP file, and that's, well, icky)
- Store back-references to the group and course within the event - ruby
seems to handle this gracefully, with appropriate links in the YAML
file
etc. (no infinite recursion). To get a feel for what I mean, try

LinkBack = Struct.new:)link)
=> LinkBack
l = LinkBack.new
=> #<struct LinkBack link=nil>
l.link = l
=> #<struct LinkBack link=#<struct LinkBack:...>>
y l
--- &id001 !ruby/struct:LinkBack
link: *id001
=> nil

Once these are in, it's pretty simple to generate the javascript code
from within the Event.
- ...or something else I haven't thought of. What do you guys think?
 

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,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top