zyz... / telstra.com schreef: > Hi Gang, > > I have a ruby issue that I'm hoping someone can shed some light on. Its > probably not so much a Ruby issue as a dinosaur ex Cobol programmer > trying to work with objects rather than records. > > I'm using Ruby to generate ConTeXt code to automate a report. One part > of the data is about tape libraries and looks something like this > (simplified) > > tapelibs:Array > tl:Tapelib > lib_device:Device > rmu:Device > parts:Array > part:Partition > drives:Array > drive:Device > > > I'm creating this data in part from an input file and in part from > stored database information, and the whole tree of objects is created > so that the Initialize of one object calls the initialize of the next > sub object as needed. > > One of the attributes of Device is latest_ucode and it is looked up in > the database. > > Now it turns out that the latest microcode level for a drive depends on > the type of the tape library as well as the type of the drive, so when > I'm down in the depths of of Initialize for the Device object I need to > access the tape library model several steps up the data structure. > > The only way that I have been able to work around this is to pass Self > down into the creation of the next level object and use that to create > a @parent attribute, which I can then follow back up as necessary. > > This feels kludgy and unsatisfying though and is not nearly general > enough for my taste. > > Can someone please point me at the Ruby way to do this? > > > Thanks > > Steve. If I understand well, you are saying that in order to define a drive you must know what tape library you are using. So in that case I think passing the type library object to the constructor of the drive object is the right choice. Transitioning from Cobol to Ruby is a brave choice! I hope you'll enjoy it :-) Francis