From: Austin Ziegler Date: 2003-08-20T10:32:10+09:00 Subject: Re: Load resource relative to required file? This is a multipart message in MIME format --11183216-POCO-21270522 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable On Wed, 23 Jul 2003 06:58:28 +0900, walter@mwsewall.com wrote: > I looked in the faq and I couldn't find my answer or a searchable archive > for the mailing list (so if anyone has that it would be great). > > I have a 1st.rb file that loads an xml configuration file that is in the > same directory. I have 2nd.rb file that uses the 1st.rb file via > require. Everything was fine when they were in the same directory, but > when I put 1st.rb in a subdirectory, it no longer loads its .xml file > (which has also moved to the subdirectory). I get a "No such file or > directory" error. > > So the question is, how does one load a resource relative to the actual > file, and not the file that required it? The attached file will do something like this for the font resources I use in PDF::Writer (which I have been lazy about). I'm not sure that it's easy/possible to limit it *just* to the file currently required. -austin -- austin ziegler * austin@halostatue.ca * Toronto, ON, Canada software designer * pragmatic programmer * 2003.08.19 * 21.30.03 --11183216-POCO-21270522 Content-Type: application/octet-stream; name="font.rb" Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename="font.rb" bW9kdWxlIFBERg0KICBGT05UX1BBVEggPSBbXQ0KDQogIGNsYXNzIEZvbnQNCiAgICBLRVlTID0g JXd7Rm9udE5hbWUgRnVsbE5hbWUgRmFtaWx5TmFtZSBXZWlnaHQgSXRhbGljQW5nbGUgSXNGaXhl ZFBpdGNoDQogICAgICAgICAgICAgIENoYXJhY3RlclNldCBVbmRlcmxpbmVQb3NpdGlvbiBVbmRl cmxpbmVUaGlja25lc3MgVmVyc2lvbg0KICAgICAgICAgICAgICBFbmNvZGluZ1NjaGVtZSBDYXBI ZWlnaHQgWEhlaWdodCBBc2NlbmRlciBEZXNjZW5kZXIgU3RkSFcgU3RkVlcNCiAgICAgICAgICAg ICAgU3RhcnRDaGFyTWV0cmljcyBGb250QkJveCBDIEtQWH0NCg0KICAgIGRlZiBpbml0aWFsaXpl DQogICAgICBAa3B4ID0ge30NCiAgICAgIEBjID0ge30NCiAgICAgIEB2ZXJzaW9uID0gMQ0KICAg ICAgQGZvbnRfbnVtID0gbmlsDQogICAgZW5kDQoNCiAgICBLRVlTLmVhY2ggeyB8a3wgYXR0cl9h Y2Nlc3NvciBrLmRvd25jYXNlLmludGVybiB9DQoNCiAgICBhdHRyX2FjY2Vzc29yIDpmb250X251 bQ0KICAgIGF0dHJfYWNjZXNzb3IgOnBhdGgNCiAgICBhdHRyX2FjY2Vzc29yIDpkaWZmZXJlbmNl cw0KDQogICAgTlVNQkVSID0gL15bK1wtMC05Ll0rJC8NCg0KICAgICAgIyBPcGVuIHRoZSBmb250 IGZpbGUgYW5kIHJldHVybiBhIFBERjo6Rm9udCBvYmplY3QgY29udGFpbmluZyBpdC4gVGhlDQog ICAgICAjICtmb250bmFtZSsgbWF5IHNwZWNpZnkganVzdCBhIGZvbnQgZmlsZSBvciBhIGZ1bGwg cGF0aC4gSWYgYSBwYXRoIGlzDQogICAgICAjIHNwZWNpZmllZCwgdGhhdCBpcyB0aGUgb25seSBw bGFjZSB3aGVyZSB0aGUgZm9udCBmaWxlIHdpbGwgYmUgbG9va2VkDQogICAgICAjIGZvci4gDQog ICAgZGVmIEZvbnQub3Blbihmb250bmFtZSkNCiAgICAgIGZpbGUgID0gZm9udG5hbWUuZ3N1Yigv XFwvLCAiLyIpDQogICAgICBkaXIgICA9IFtGaWxlLmRpcm5hbWUoZmlsZSldDQogICAgICBuYW1l ICA9IEZpbGUuYmFzZW5hbWUoZmlsZSkNCg0KICAgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUg ZGlyZWN0b3J5IGlzICIuIiBvciBhIG5vbi1wYXRoDQogICAgICBpZiBkaXJbMF0gPT0gIi4iDQog ICAgICAgIGRpciA8PCBGT05UX1BBVEgNCiAgICAgICAgZGlyIDw8ICRMT0FEX1BBVEgNCiAgICAg IGVsc2lmIGRpclswXSAhfiAvXlx3Oi8gYW5kIGRpclswXS5pbmRleCgiLyIpDQogICAgICAgIEZP TlRfUEFUSC5lYWNoIHsgfHB8IGRpciA8PCBGaWxlLmpvaW4ocCwgZGlyWzBdKSB9DQogICAgICAg ICRMT0FEX1BBVEguZWFjaCB7IHxwfCBkaXIgPDwgRmlsZS5qb2luKHAsIGRpclswXSkgfQ0KICAg ICAgICBkaXJbMF0gPSAiLi8je2RpclswXX0iDQogICAgICBlbmQNCg0KICAgICAgZm9udCA9IG5p bA0KDQogICAgICBhZm0gPSBuaWwNCiAgICAgIGRpci5lYWNoIGRvIHxkfA0KICAgICAgICBhZm0g PSBGaWxlLmpvaW4oZCwgIiN7bmFtZX0uYWZtIikuZ3N1YigvXC5hZm1cLmFmbSQvLCAiLmFmbSIp DQogICAgICAgIHJmbSA9ICIje2FmbX0ucmZtIg0KDQogICAgICAgICAgIyBBdHRlbXB0IHRvIHVu bWFyc2hhbCBhbiAuYWZtLnJmbSBmaWxlIGZpcnN0Lg0KICAgICAgICBmb250ID0gTWFyc2hhbC5s b2FkKHJmbSkgcmVzY3VlIG5pbA0KICAgICAgICAgICMgUmV0dXJuIHRoZSBsb2FkZWQgZm9udCBp ZiBpdCBoYXMgYmVlbiBmb3VuZC4NCiAgICAgICAgcmV0dXJuIGZvbnQgdW5sZXNzIGZvbnQubmls Pw0KDQogICAgICAgICAgIyBBdHRlbXB0IHRvIG9wZW4gYW5kIHByb2Nlc3MgdGhlIGZvbnQuDQog ICAgICAgIEZpbGUub3BlbihhZm0pIGRvIHxmfA0KICAgICAgICAgIGZvbnQgPSBQREY6OkZvbnQu bmV3DQogICAgICAgICAgZi5lYWNoIGRvIHxsfA0KICAgICAgICAgICAga2V5LCAqcmVzdCA9IGwu Y2hvbXAuc3RyaXAuc3BsaXQNCiAgICAgICAgICAgIGNhc2Uga2V5DQogICAgICAgICAgICB3aGVu ICdGb250TmFtZScsICdGdWxsTmFtZScsICdGYW1pbHlOYW1lJywgJ1dlaWdodCcsDQogICAgICAg ICAgICAgICAgICdJc0ZpeGVkUGl0Y2gnLCAnQ2hhcmFjdGVyU2V0JywgJ1ZlcnNpb24nLCAnRW5j b2RpbmdTY2hlbWUnDQogICAgICAgICAgICAgIGZvbnQuX19zZW5kX18oIiN7a2V5LmRvd25jYXNl fT0iLmludGVybiwgcmVzdC5qb2luKCIgIikpDQogICAgICAgICAgICB3aGVuICdJdGFsaWNBbmds ZScsICdVbmRlcmxpbmVQb3NpdGlvbicsICdVbmRlcmxpbmVUaGlja25lc3MnLA0KICAgICAgICAg ICAgICAgICAnQ2FwSGVpZ2h0JywgJ1hIZWlnaHQnLCAnQXNjZW5kZXInLCAnRGVzY2VuZGVyJywg J1N0ZEhXJywNCiAgICAgICAgICAgICAgICAgJ1N0ZFZXJywgJ1N0YXJ0Q2hhck1ldHJpY3MnDQog ICAgICAgICAgICAgIGZvbnQuX19zZW5kX18oIiN7a2V5LmRvd25jYXNlfT0iLmludGVybiwgcmVz dC5qb2luKCIgIikudG9fZikNCiAgICAgICAgICAgIHdoZW4gJ0ZvbnRCQm94Jw0KICAgICAgICAg ICAgICBmb250LmZvbnRiYm94ID0gcmVzdA0KICAgICAgICAgICAgd2hlbiAnQycgIyBDIDM5IDsg V1ggMjIyIDsgTiBxdW90ZXJpZ2h0IDsgQiA1MyA0NjMgMTU3IDcxOCA7DQogICAgICAgICAgICAg IGJpdHMgPSBsLmNob21wLnN0cmlwLnNwbGl0KC87LykuY29sbGVjdCB7IHxyfCByLnN0cmlwIH0N CiAgICAgICAgICAgICAgZHRtcCA9IHt9DQoNCiAgICAgICAgICAgICAgYml0cy5lYWNoIGRvIHxi aXR8DQogICAgICAgICAgICAgICAgYiA9IGJpdC5zcGxpdA0KICAgICAgICAgICAgICAgIGlmIGIu c2l6ZSA+IDINCiAgICAgICAgICAgICAgICAgIGR0bXBbYlswXV0gPSBbXQ0KICAgICAgICAgICAg ICAgICAgYlsxLi4tMV0uZWFjaCBkbyB8enwNCiAgICAgICAgICAgICAgICAgICAgaWYgeiA9fiBO VU1CRVINCiAgICAgICAgICAgICAgICAgICAgICBkdG1wW2JbMF1dIDw8IHoudG9fZg0KICAgICAg ICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgZHRtcFtiWzBdXSA8PCB6 DQogICAgICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgICAgICAgZW5kDQogICAgICAg ICAgICAgICAgZWxzaWYgYi5zaXplID09IDINCiAgICAgICAgICAgICAgICAgIGlmIGJbMF0gPT0g J0MnIGFuZCBiWzFdID1+IE5VTUJFUg0KICAgICAgICAgICAgICAgICAgICBkdG1wW2JbMF1dID0g YlsxXS50b19pDQogICAgICAgICAgICAgICAgICBlbHNpZiBiWzFdID1+IE5VTUJFUg0KICAgICAg ICAgICAgICAgICAgICBkdG1wW2JbMF1dID0gYlsxXS50b19mDQogICAgICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgICAgIGR0bXBbYlswXV0gPSBiWzFdDQogICAgICAgICAgICAg ICAgICBlbmQNCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgICAgZW5kDQoNCiAgICAg ICAgICAgICAgZm9udC5jW2R0bXBbJ04nXV0gPSBkdG1wDQogICAgICAgICAgICAgIGZvbnQuY1tk dG1wWydDJ11dID0gZHRtcCB1bmxlc3MgZHRtcFsnQyddLm5pbD8NCiAgICAgICAgICAgIHdoZW4g J0tQWCcgIyBLUFggQWRpZXJlc2lzIHlhY3V0ZSAtNDANCiAgICAgICAgICAgICAgZm9udC5rcHhb cmVzdFswXV0gPSB7IH0NCiAgICAgICAgICAgICAgZm9udC5rcHhbcmVzdFswXV1bcmVzdFsxXV0g PSByZXN0WzJdLnRvX2YNCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgIGVuZA0KICAgICAgICAg IGZvbnQucGF0aCA9ICIje2R9Ig0KICAgICAgICBlbmQgcmVzY3VlIG5pbCAjIElnbm9yZSBmaWxl IGVycm9ycw0KICAgICAgICBicmVhayB1bmxlc3MgZm9udC5uaWw/DQogICAgICBlbmQNCg0KICAg ICAgcmFpc2UgVHlwZUVycm9yLCAiRm9udCAje2ZvbnRuYW1lfSBub3QgZm91bmQuIiBpZiBmb250 Lm5pbD8NCiAgICAgIGZvbnQucGF0aCA9IGFmbQ0KICAgICAgZm9udA0KICAgIGVuZA0KICBlbmQN CmVuZA0K --11183216-POCO-21270522--