From: Evan Phoenix Date: 2006-03-28T10:24:40+09:00 Subject: Re: PATCH: A subclassable Pathname ------=_Part_6326_166839.1143509062446 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Here's one that fixes + and join to always return an instance of self.class= . - Evan On 3/27/06, Evan Phoenix wrote: > Hm, well, thats because of the shortcut behavior in Pathname#+ which > tests that the argument is absolute. I'll fix that and see if thats > done other places and change them to create new instances from > self.class. > > > > On 3/27/06, Tanaka Akira wrote: > > In article <87fyl3x0wd.fsf@m17n.org>, > > Tanaka Akira writes: > > > > > The class of an argument may be different from > > > self.class.new. > > > > > > For example, if P inherits Pathname, > > > Pathname.new("...") + P.new("...") returns an instance of > > > Pathname. > > > > Oops. It was wrong. It may return an instance of P. > > > > % ./ruby -Ilib -rpathname -e ' > > class P1 < Pathname; end > > class P2 < Pathname; end > > p P1.new("a") + P2.new("b") > > p P1.new("a") + P2.new("/b") > > ' > > # > > # > > > > I think it is inconsistent. > > -- > > Tanaka Akira > > > > > > > -- > When I do good, I feel good; when I do bad, I feel bad, > and that is my religion. > -- Abraham Lincoln (1809 - 1865) > > -- When I do good, I feel good; when I do bad, I feel bad, and that is my religion. -- Abraham Lincoln (1809 - 1865) ------=_Part_6326_166839.1143509062446 Content-Type: application/octet-stream; name="subclassable-pathname.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="subclassable-pathname.diff" X-Attachment-Id: f_hbsudj LS0tIC91c3IvbG9jYWwvbGliL3J1YnkvMS44L3BhdGhuYW1lLnJiCTIwMDUtMDctMTAgMDg6MTc6 MzUuMDAwMDAwMDAwIC0wNzAwCisrKyAuL3BhdGhuYW1lLnJiCTIwMDYtMDMtMjcgMTc6MjI6MTku MDAwMDAwMDAwIC0wODAwCkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAjIGNsZWFucGF0aF9hZ2dy ZXNzaXZlIGFzc3VtZXM6CiAgICAgIyAqIG5vIHN5bWxpbmsKICAgICAjICogYWxsIHBhdGhuYW1l IHByZWZpeCBjb250YWluZWQgaW4gdGhlIHBhdGhuYW1lIGlzIGV4aXN0aW5nIGRpcmVjdG9yeQot ICAgIHJldHVybiBQYXRobmFtZS5uZXcoJycpIGlmIEBwYXRoID09ICcnCisgICAgcmV0dXJuIHNl bGYuY2xhc3MubmV3KCcnKSBpZiBAcGF0aCA9PSAnJwogICAgIGFic29sdXRlID0gYWJzb2x1dGU/ CiAgICAgbmFtZXMgPSBbXQogICAgIEBwYXRoLnNjYW4oJXJ7W14vXSt9KSB7fG5hbWV8CkBAIC0y NzUsMjAgKzI3NSwyMCBAQAogICAgICAgZW5kCiAgICAgICBuYW1lcyA8PCBuYW1lCiAgICAgfQot ICAgIHJldHVybiBQYXRobmFtZS5uZXcoYWJzb2x1dGUgPyAnLycgOiAnLicpIGlmIG5hbWVzLmVt cHR5PworICAgIHJldHVybiBzZWxmLmNsYXNzLm5ldyhhYnNvbHV0ZSA/ICcvJyA6ICcuJykgaWYg bmFtZXMuZW1wdHk/CiAgICAgcGF0aCA9IGFic29sdXRlID8gJy8nIDogJycKICAgICBwYXRoIDw8 IG5hbWVzLmpvaW4oJy8nKQotICAgIFBhdGhuYW1lLm5ldyhwYXRoKQorICAgIHNlbGYuY2xhc3Mu bmV3KHBhdGgpCiAgIGVuZAogICBwcml2YXRlIDpjbGVhbnBhdGhfYWdncmVzc2l2ZQogCiAgIGRl ZiBjbGVhbnBhdGhfY29uc2VydmF0aXZlCi0gICAgcmV0dXJuIFBhdGhuYW1lLm5ldygnJykgaWYg QHBhdGggPT0gJycKKyAgICByZXR1cm4gc2VsZi5jbGFzcy5uZXcoJycpIGlmIEBwYXRoID09ICcn CiAgICAgbmFtZXMgPSBAcGF0aC5zY2FuKCVye1teL10rfSkKICAgICBsYXN0X2RvdCA9IG5hbWVz Lmxhc3QgPT0gJy4nCiAgICAgbmFtZXMuZGVsZXRlKCcuJykKICAgICBuYW1lcy5zaGlmdCB3aGls ZSBuYW1lcy5maXJzdCA9PSAnLi4nIGlmIGFic29sdXRlPwotICAgIHJldHVybiBQYXRobmFtZS5u ZXcoYWJzb2x1dGU/ID8gJy8nIDogJy4nKSBpZiBuYW1lcy5lbXB0eT8KKyAgICByZXR1cm4gc2Vs Zi5jbGFzcy5uZXcoYWJzb2x1dGU/ID8gJy8nIDogJy4nKSBpZiBuYW1lcy5lbXB0eT8KICAgICBw YXRoID0gYWJzb2x1dGU/ID8gJy8nIDogJycKICAgICBwYXRoIDw8IG5hbWVzLmpvaW4oJy8nKQog ICAgIGlmIG5hbWVzLmxhc3QgIT0gJy4uJwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgIHBh dGggPDwgJy8nCiAgICAgICBlbmQKICAgICBlbmQKLSAgICBQYXRobmFtZS5uZXcocGF0aCkKKyAg ICBzZWxmLmNsYXNzLm5ldyhwYXRoKQogICBlbmQKICAgcHJpdmF0ZSA6Y2xlYW5wYXRoX2NvbnNl cnZhdGl2ZQogCkBAIC0zNjMsOSArMzYzLDkgQEAKICAgICBlbmQKICAgICAKICAgICBpZiByZXNv bHZlZC5lbXB0eT8KLSAgICAgIFBhdGhuYW1lLm5ldyh0b3AuZW1wdHk/ID8gJy4nIDogJy8nKQor ICAgICAgc2VsZi5jbGFzcy5uZXcodG9wLmVtcHR5PyA/ICcuJyA6ICcvJykKICAgICBlbHNlCi0g ICAgICBQYXRobmFtZS5uZXcodG9wICsgcmVzb2x2ZWQuam9pbignLycpKQorICAgICAgc2VsZi5j bGFzcy5uZXcodG9wICsgcmVzb2x2ZWQuam9pbignLycpKQogICAgIGVuZAogICBlbmQKIApAQCAt NDMxLDkgKzQzMSw5IEBACiAgICMgVGhpcyBtZXRob2QgZG9lc24ndCBhY2Nlc3MgdGhlIGZpbGUg c3lzdGVtOyBpdCBpcyBwdXJlIHN0cmluZyBtYW5pcHVsYXRpb24uIAogICAjCiAgIGRlZiArKG90 aGVyKQotICAgIG90aGVyID0gUGF0aG5hbWUubmV3KG90aGVyKSB1bmxlc3MgUGF0aG5hbWUgPT09 IG90aGVyCisgICAgb3RoZXIgPSBzZWxmLmNsYXNzLm5ldyhvdGhlcikgdW5sZXNzIFBhdGhuYW1l ID09PSBvdGhlcgogCi0gICAgcmV0dXJuIG90aGVyIGlmIG90aGVyLmFic29sdXRlPworICAgIHJl dHVybiBzZWxmLmNsYXNzLm5ldyhvdGhlci50b19zdHIpIGlmIG90aGVyLmFic29sdXRlPwogCiAg ICAgcGF0aDEgPSBAcGF0aAogICAgIHBhdGgyID0gb3RoZXIudG9fcwpAQCAtNDQ5LDEzICs0NDks MTMgQEAKICAgICAgIGVuZAogICAgIGVuZAogCi0gICAgcmV0dXJuIFBhdGhuYW1lLm5ldyhwYXRo MikgaWYgcGF0aDEgPT0gJy4nCi0gICAgcmV0dXJuIFBhdGhuYW1lLm5ldyhwYXRoMSkgaWYgcGF0 aDIgPT0gJy4nCisgICAgcmV0dXJuIHNlbGYuY2xhc3MubmV3KHBhdGgyKSBpZiBwYXRoMSA9PSAn LicKKyAgICByZXR1cm4gc2VsZi5jbGFzcy5uZXcocGF0aDEpIGlmIHBhdGgyID09ICcuJwogCiAg ICAgaWYgJXJ7L1x6fSA9fiBwYXRoMQotICAgICAgUGF0aG5hbWUubmV3KHBhdGgxICsgcGF0aDIp CisgICAgICBzZWxmLmNsYXNzLm5ldyhwYXRoMSArIHBhdGgyKQogICAgIGVsc2UKLSAgICAgIFBh dGhuYW1lLm5ldyhwYXRoMSArICcvJyArIHBhdGgyKQorICAgICAgc2VsZi5jbGFzcy5uZXcocGF0 aDEgKyAnLycgKyBwYXRoMikKICAgICBlbmQKICAgZW5kCiAKQEAgLTQ2OCwxMCArNDY4LDEwIEBA CiAgIGRlZiBqb2luKCphcmdzKQogICAgIGFyZ3MudW5zaGlmdCBzZWxmCiAgICAgcmVzdWx0ID0g YXJncy5wb3AKLSAgICByZXN1bHQgPSBQYXRobmFtZS5uZXcocmVzdWx0KSB1bmxlc3MgUGF0aG5h bWUgPT09IHJlc3VsdAotICAgIHJldHVybiByZXN1bHQgaWYgcmVzdWx0LmFic29sdXRlPworICAg IHJlc3VsdCA9IHNlbGYuY2xhc3MubmV3KHJlc3VsdCkgdW5sZXNzIFBhdGhuYW1lID09PSByZXN1 bHQKKyAgICByZXR1cm4gc2VsZi5jbGFzcy5uZXcocmVzdWx0LnRvX3N0cikgaWYgcmVzdWx0LmFi c29sdXRlPwogICAgIGFyZ3MucmV2ZXJzZV9lYWNoIHt8YXJnfAotICAgICAgYXJnID0gUGF0aG5h bWUubmV3KGFyZykgdW5sZXNzIFBhdGhuYW1lID09PSBhcmcKKyAgICAgIGFyZyA9IHNlbGYuY2xh c3MubmV3KGFyZykgdW5sZXNzIFBhdGhuYW1lID09PSBhcmcKICAgICAgIHJlc3VsdCA9IGFyZyAr IHJlc3VsdAogICAgICAgcmV0dXJuIHJlc3VsdCBpZiByZXN1bHQuYWJzb2x1dGU/CiAgICAgfQpA QCAtNTA1LDkgKzUwNSw5IEBACiAgICAgRGlyLmZvcmVhY2goQHBhdGgpIHt8ZXwKICAgICAgIG5l eHQgaWYgZSA9PSAnLicgfHwgZSA9PSAnLi4nCiAgICAgICBpZiB3aXRoX2RpcmVjdG9yeQotICAg ICAgICByZXN1bHQgPDwgUGF0aG5hbWUubmV3KEZpbGUuam9pbihAcGF0aCwgZSkpCisgICAgICAg IHJlc3VsdCA8PCBzZWxmLmNsYXNzLm5ldyhGaWxlLmpvaW4oQHBhdGgsIGUpKQogICAgICAgZWxz ZQotICAgICAgICByZXN1bHQgPDwgUGF0aG5hbWUubmV3KGUpCisgICAgICAgIHJlc3VsdCA8PCBz ZWxmLmNsYXNzLm5ldyhlKQogICAgICAgZW5kCiAgICAgfQogICAgIHJlc3VsdApAQCAtNTU0LDkg KzU1NCw5IEBACiAgICAgYmFzZS5maWxsICcuLicKICAgICByZWxwYXRoID0gYmFzZSArIGRlc3QK ICAgICBpZiByZWxwYXRoLmVtcHR5PwotICAgICAgUGF0aG5hbWUubmV3KCIuIikKKyAgICAgIHNl bGYuY2xhc3MubmV3KCIuIikKICAgICBlbHNlCi0gICAgICBQYXRobmFtZS5uZXcocmVscGF0aC5q b2luKCcvJykpCisgICAgICBzZWxmLmNsYXNzLm5ldyhyZWxwYXRoLmpvaW4oJy8nKSkKICAgICBl bmQKICAgZW5kCiAKQEAgLTYzNSw3ICs2MzUsNyBAQAogICBlbmQKIAogICAjIFNlZSA8dHQ+Rmls ZS5yZWFkbGluazwvdHQ+LiAgUmVhZCBzeW1ib2xpYyBsaW5rLgotICBkZWYgcmVhZGxpbmsoKSBQ YXRobmFtZS5uZXcoRmlsZS5yZWFkbGluayhAcGF0aCkpIGVuZAorICBkZWYgcmVhZGxpbmsoKSBz ZWxmLmNsYXNzLm5ldyhGaWxlLnJlYWRsaW5rKEBwYXRoKSkgZW5kCiAKICAgIyBTZWUgPHR0PkZp bGUucmVuYW1lPC90dD4uICBSZW5hbWUgdGhlIGZpbGUuCiAgIGRlZiByZW5hbWUodG8pIEZpbGUu cmVuYW1lKEBwYXRoLCB0bykgZW5kCkBAIC02NTYsMjAgKzY1NiwyMCBAQAogICBkZWYgdXRpbWUo YXRpbWUsIG10aW1lKSBGaWxlLnV0aW1lKGF0aW1lLCBtdGltZSwgQHBhdGgpIGVuZAogCiAgICMg U2VlIDx0dD5GaWxlLmJhc2VuYW1lPC90dD4uICBSZXR1cm5zIHRoZSBsYXN0IGNvbXBvbmVudCBv ZiB0aGUgcGF0aC4KLSAgZGVmIGJhc2VuYW1lKCphcmdzKSBQYXRobmFtZS5uZXcoRmlsZS5iYXNl bmFtZShAcGF0aCwgKmFyZ3MpKSBlbmQKKyAgZGVmIGJhc2VuYW1lKCphcmdzKSBzZWxmLmNsYXNz Lm5ldyhGaWxlLmJhc2VuYW1lKEBwYXRoLCAqYXJncykpIGVuZAogCiAgICMgU2VlIDx0dD5GaWxl LmRpcm5hbWU8L3R0Pi4gIFJldHVybnMgYWxsIGJ1dCB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhl IHBhdGguCi0gIGRlZiBkaXJuYW1lKCkgUGF0aG5hbWUubmV3KEZpbGUuZGlybmFtZShAcGF0aCkp IGVuZAorICBkZWYgZGlybmFtZSgpIHNlbGYuY2xhc3MubmV3KEZpbGUuZGlybmFtZShAcGF0aCkp IGVuZAogCiAgICMgU2VlIDx0dD5GaWxlLmV4dG5hbWU8L3R0Pi4gIFJldHVybnMgdGhlIGZpbGUn cyBleHRlbnNpb24uCiAgIGRlZiBleHRuYW1lKCkgRmlsZS5leHRuYW1lKEBwYXRoKSBlbmQKIAog ICAjIFNlZSA8dHQ+RmlsZS5leHBhbmRfcGF0aDwvdHQ+LgotICBkZWYgZXhwYW5kX3BhdGgoKmFy Z3MpIFBhdGhuYW1lLm5ldyhGaWxlLmV4cGFuZF9wYXRoKEBwYXRoLCAqYXJncykpIGVuZAorICBk ZWYgZXhwYW5kX3BhdGgoKmFyZ3MpIHNlbGYuY2xhc3MubmV3KEZpbGUuZXhwYW5kX3BhdGgoQHBh dGgsICphcmdzKSkgZW5kCiAKICAgIyBTZWUgPHR0PkZpbGUuc3BsaXQ8L3R0Pi4gIFJldHVybnMg dGhlICNkaXJuYW1lIGFuZCB0aGUgI2Jhc2VuYW1lIGluIGFuCiAgICMgQXJyYXkuCi0gIGRlZiBz cGxpdCgpIEZpbGUuc3BsaXQoQHBhdGgpLm1hcCB7fGZ8IFBhdGhuYW1lLm5ldyhmKSB9IGVuZAor ICBkZWYgc3BsaXQoKSBGaWxlLnNwbGl0KEBwYXRoKS5tYXAge3xmfCBzZWxmLmNsYXNzLm5ldyhm KSB9IGVuZAogCiAgICMgUGF0aG5hbWUjbGluayBpcyBjb25mdXNpbmcgYW5kICpvYnNvbGV0ZWQq IGJlY2F1c2UgdGhlIHJlY2VpdmVyL2FyZ3VtZW50CiAgICMgb3JkZXIgaXMgaW52ZXJ0ZWQgdG8g Y29ycmVzcG9uZGluZyBzeXN0ZW0gY2FsbC4KQEAgLTc2MSwxNCArNzYxLDE0IEBACiAgICMgU2Vl IDx0dD5EaXIuZ2xvYjwvdHQ+LiAgUmV0dXJucyBvciB5aWVsZHMgUGF0aG5hbWUgb2JqZWN0cy4K ICAgZGVmIFBhdGhuYW1lLmdsb2IoKmFyZ3MpICMgOnlpZWxkOiBwCiAgICAgaWYgYmxvY2tfZ2l2 ZW4/Ci0gICAgICBEaXIuZ2xvYigqYXJncykge3xmfCB5aWVsZCBQYXRobmFtZS5uZXcoZikgfQor ICAgICAgRGlyLmdsb2IoKmFyZ3MpIHt8ZnwgeWllbGQgbmV3KGYpIH0KICAgICBlbHNlCi0gICAg ICBEaXIuZ2xvYigqYXJncykubWFwIHt8ZnwgUGF0aG5hbWUubmV3KGYpIH0KKyAgICAgIERpci5n bG9iKCphcmdzKS5tYXAge3xmfCBuZXcoZikgfQogICAgIGVuZAogICBlbmQKIAogICAjIFNlZSA8 dHQ+RGlyLmdldHdkPC90dD4uICBSZXR1cm5zIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5 IGFzIGEgUGF0aG5hbWUuCi0gIGRlZiBQYXRobmFtZS5nZXR3ZCgpIFBhdGhuYW1lLm5ldyhEaXIu Z2V0d2QpIGVuZAorICBkZWYgUGF0aG5hbWUuZ2V0d2QoKSBuZXcoRGlyLmdldHdkKSBlbmQKICAg Y2xhc3MgPDwgc2VsZjsgYWxpYXMgcHdkIGdldHdkIGVuZAogCiAgICMgUGF0aG5hbWUjY2hkaXIg aXMgKm9ic29sZXRlZCogYXQgMS44LjEuCkBAIC03ODUsMTQgKzc4NSwxNCBAQAogCiAgICMgUmV0 dXJuIHRoZSBlbnRyaWVzIChmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMpIGluIHRoZSBkaXJlY3Rv cnksIGVhY2ggYXMgYQogICAjIFBhdGhuYW1lIG9iamVjdC4KLSAgZGVmIGVudHJpZXMoKSBEaXIu ZW50cmllcyhAcGF0aCkubWFwIHt8ZnwgUGF0aG5hbWUubmV3KGYpIH0gZW5kCisgIGRlZiBlbnRy aWVzKCkgRGlyLmVudHJpZXMoQHBhdGgpLm1hcCB7fGZ8IHNlbGYuY2xhc3MubmV3KGYpIH0gZW5k CiAKICAgIyBJdGVyYXRlcyBvdmVyIHRoZSBlbnRyaWVzIChmaWxlcyBhbmQgc3ViZGlyZWN0b3Jp ZXMpIGluIHRoZSBkaXJlY3RvcnkuICBJdAogICAjIHlpZWxkcyBhIFBhdGhuYW1lIG9iamVjdCBm b3IgZWFjaCBlbnRyeS4KICAgIwogICAjIFRoaXMgbWV0aG9kIGhhcyBleGlzdGVkIHNpbmNlIDEu OC4xLgogICBkZWYgZWFjaF9lbnRyeSgmYmxvY2spICMgOnlpZWxkOiBwCi0gICAgRGlyLmZvcmVh Y2goQHBhdGgpIHt8ZnwgeWllbGQgUGF0aG5hbWUubmV3KGYpIH0KKyAgICBEaXIuZm9yZWFjaChA cGF0aCkge3xmfCB5aWVsZCBzZWxmLmNsYXNzLm5ldyhmKSB9CiAgIGVuZAogCiAgICMgUGF0aG5h bWUjZGlyX2ZvcmVhY2ggaXMgKm9ic29sZXRlZCogYXQgMS44LjEuCkBAIC04MjgsOSArODI4LDkg QEAKICAgZGVmIGZpbmQoJmJsb2NrKSAjIDp5aWVsZDogcAogICAgIHJlcXVpcmUgJ2ZpbmQnCiAg ICAgaWYgQHBhdGggPT0gJy4nCi0gICAgICBGaW5kLmZpbmQoQHBhdGgpIHt8ZnwgeWllbGQgUGF0 aG5hbWUubmV3KGYuc3ViKCVye1xBXC4vfSwgJycpKSB9CisgICAgICBGaW5kLmZpbmQoQHBhdGgp IHt8ZnwgeWllbGQgc2VsZi5jbGFzcy5uZXcoZi5zdWIoJXJ7XEFcLi99LCAnJykpIH0KICAgICBl bHNlCi0gICAgICBGaW5kLmZpbmQoQHBhdGgpIHt8ZnwgeWllbGQgUGF0aG5hbWUubmV3KGYpIH0K KyAgICAgIEZpbmQuZmluZChAcGF0aCkge3xmfCB5aWVsZCBzZWxmLmNsYXNzLm5ldyhmKSB9CiAg ICAgZW5kCiAgIGVuZAogZW5kCkBAIC0xMTk1LDUgKzExOTUsMTcgQEAKICAgICAgIGFzc2VydF9l cXVhbCgxLCBjb3VudCkKICAgICAgIGFzc2VydF9lcXVhbCgyLCByZXN1bHQpCiAgICAgZW5kCisg ICAgCisgICAgZGVmIHRlc3Rfc19nbG9iCisgICAgICBhcnkgPSBbXQorICAgICAgUGF0aG5hbWUu Z2xvYigiKiIpIHsgfGZ8IGFyeSA8PCBmIH0KKyAgICAgIHNsZiA9IGFyeS5maW5kIHsgfGV8IGUu dG9fcyA9PSBfX0ZJTEVfXyB9CisgICAgICBhc3NlcnQgc2xmCisgICAgZW5kCisgICAgCisgICAg ZGVmIHRlc3Rfc19nZXR3ZAorICAgICAgcG4gPSBQYXRobmFtZS5nZXR3ZAorICAgICAgYXNzZXJ0 X2VxdWFsIERpci5nZXR3ZCwgcG4udG9fcworICAgIGVuZAogICBlbmQKIGVuZAo= ------=_Part_6326_166839.1143509062446--