[ruby-core:109766] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"ufuk (Ufuk Kayserilioglu)" <noreply@...>
Date:
2022-08-29 12:08:55 UTC
List:
ruby-core #109766
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgdWZ1ayAoVWZ1ayBLYXlzZXJpbGlvZ2x1 KS4KCgpJJ2xsIGFkZCBteSAyIGNlbnRzIGFzIHdlbGw6IEkgcmVhbGx5IHJlYWxseSBsaWtlIHRo ZSBwcm9wb3NlZCBpZGVhIGFuZCBJIHdvdWxkIGxvdmUgdG8gc2VlIGl0IGFkZGVkIHRvIFJ1Ynkg Zm9yIDMuMi4KCkhvd2V2ZXIsIEkgZmluZCBgd2l0aGAgYSBsaXR0bGUgdG9vIGdlbmVyaWMgYXMg YSBuYW1lIGZvciB0aGUgY29uY2VwdC4gUHJpbWFyaWx5LCB3aGVuIEkgbG9vayBhdCBpdCwgaXQg ZG9lc24ndCB0ZWxsIG1lIHdoYXQgd2lsbCBpdCBkbyAid2l0aCIgdGhlIHN1cHBsaWVkIGFyZ3Vt ZW50czsgdGhlIGZhY3QgdGhhdCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGJsb2NrIHdpdGgg dGhlIHN1cHBsaWVkIGFyZ3VtZW50cyBpcyBhIGxpdHRsZSBoaWRkZW4uCgpGb3IgdGhhdCByZWFz b24sIEkgdGhpbmsgYW4gYWx0ZXJuYXRpdmUgbmFtZSBjb3VsZCBiZSBgZXhlY193aXRoYDoKYGBg cnVieQpHQy5leGVjX3dpdGgoc3RyZXNzOiB0cnVlKSBkbwogICMKZW5kCmBgYAogb3IgYHJ1bl93 aXRoYDoKYGBgcnVieQpHQy5ydW5fd2l0aChzdHJlc3M6IHRydWUpIGRvCiAgIwplbmQKYGBgCm9y IGFueSBvdGhlciBuYW1lIHRoYXQgY29udmV5cyB0aGUgZmFjdCB0aGF0IHRoZSBibG9jayB3aWxs IGJlIGV4ZWN1dGVkIHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg5NTE6IE9iamVjdCN3aXRoIHRv IHNldCBhbmQgcmVzdG9yZSBhdHRyaWJ1dGVzIGFyb3VuZCBhIGJsb2NrCmh0dHBzOi8vYnVncy5y dWJ5LWxhbmcub3JnL2lzc3Vlcy8xODk1MSNjaGFuZ2UtOTkwMDQKCiogQXV0aG9yOiBieXJvb3Qg KEplYW4gQm91c3NpZXIpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjIyBVc2UgY2FzZQoKQSB2ZXJ5IGNv bW1vbiBwYXR0ZXJuIGluIFJ1YnksIGVzcGVjaWFsbHkgaW4gdGVzdGluZyBpcyB0byBzYXZlIHRo ZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsIHNldCBhIG5ldyB2YWx1ZSwgYW5kIHRoZW4gcmVzdG9y ZSB0aGUgb2xkIHZhbHVlIGluIGFuIGBlbnN1cmVgIGNsYXVzZS4KCmUuZy4gaW4gdW5pdCB0ZXN0 cwoKYGBgcnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgZW5hYmxlZF93YXMs IFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0cnVlCiAgIyB0ZXN0 IHRoaW5ncwplbnN1cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBg YAoKT3Igc29tZXRpbWUgaW4gYWN0dWFsIEFQSXM6CgpgYGBydWJ5CmRlZiB3aXRoX3NvbWV0aGlu Z19lbmFibGVkCiAgZW5hYmxlZF93YXMgPSBAZW5hYmxlZAogIEBlbmFibGVkID0gdHJ1ZQogIHlp ZWxkCmVuc3VyZQogIEBlbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKVGhlcmUgaXMgbm8g aW5oZXJlbnQgcHJvYmxlbSB3aXRoIHRoaXMgcGF0dGVybiwgYnV0IGl0IGNhbiBiZSBlYXN5IHRv IG1ha2UgYSBtaXN0YWtlLCBmb3IgaW5zdGFuY2UgdGhlIHVuaXQgdGVzdCBleGFtcGxlOgoKYGBg cnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgc29tZV9jYWxsX3RoYXRfbWF5 X3JhaXNlCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5l bmFibGVkLCB0cnVlCiAgIyB0ZXN0IHRoaW5ncwplbnN1cmUKICBTb21lTGlicmFyeS5lbmFibGVk ID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKSW4gdGhlIGFib3ZlIGlmIGBzb21lX2NhbGxfdGhhdF9t YXlfcmFpc2VgIGFjdHVhbGx5IHJhaXNlcywgYFNvbWVMaWJyYXJ5LmVuYWJsZWRgIGlzIHNldCBi YWNrIHRvIGBuaWxgIHJhdGhlciB0aGFuIGl0cyBvcmlnaW5hbCB2YWx1ZS4gSSd2ZSBzZWVuIHRo aXMgbWlzdGFrZSBxdWl0ZSBmcmVxdWVudGx5LgoKIyMjIFByb3Bvc2FsCgpJIHRoaW5rIGl0IHdv dWxkIGJlIHZlcnkgdXNlZnVsIHRvIGhhdmUgYSBtZXRob2Qgb24gT2JqZWN0IHRvIGltcGxlbWVu dCB0aGlzIHBhdHRlcm4gaW4gYSBjb3JyZWN0IGFuZCBlYXN5IHRvIHVzZSB3YXkuIFRoZSBuYWl2 ZSBSdWJ5IGltcGxlbWVudGF0aW9uIHdvdWxkIGJlOgoKYGBgcnVieQpjbGFzcyBPYmplY3QKICBk ZWYgd2l0aCgqKmF0dHJpYnV0ZXMpCiAgICBvbGRfdmFsdWVzID0ge30KICAgIGF0dHJpYnV0ZXMu ZWFjaF9rZXkgZG8gfGtleXwKICAgICAgb2xkX3ZhbHVlc1trZXldID0gcHVibGljX3NlbmQoa2V5 KQogICAgZW5kCiAgICBiZWdpbgogICAgICBhdHRyaWJ1dGVzLmVhY2ggZG8gfGtleSwgdmFsdWV8 CiAgICAgICAgcHVibGljX3NlbmQoIiN7a2V5fT0iLCB2YWx1ZSkKICAgICAgZW5kCiAgICAgIHlp ZWxkCiAgICBlbnN1cmUKICAgICAgb2xkX3ZhbHVlcy5lYWNoIGRvIHxrZXksIG9sZF92YWx1ZXwK ICAgICAgICBwdWJsaWNfc2VuZCgiI3trZXl9PSIsIG9sZF92YWx1ZSkKICAgICAgZW5kCiAgICBl bmQKICBlbmQKZW5kCmBgYAoKTkI6IGBwdWJsaWNfc2VuZGAgaXMgdXNlZCBiZWNhdXNlIEkgZG9u J3QgdGhpbmsgc3VjaCBtZXRob2Qgc2hvdWxkIGJlIHVzYWJsZSBpZiB0aGUgYWNjZXNzb3JzIGFy ZSBwcml2YXRlLgoKV2l0aCB1c2FnZToKCmBgYHJ1YnkKZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5f ZW5hYmxlZAogIFNvbWVMaWJyYXJ5LndpdGgoZW5hYmxlZDogdHJ1ZSkgZG8KICAgICMgdGVzdCB0 aGluZ3MKICBlbmQKZW5kCmBgYAoKYGBgcnVieQpHQy53aXRoKG1lYXN1cmVfdG90YWxfdGltZTog dHJ1ZSwgYXV0b19jb21wYWN0OiBmYWxzZSkgZG8KICAjIGRvIHNvbWV0aGluZwplbmQKYGBgCgoj IyMgQWx0ZXJuYXRlIG5hbWVzIGFuZCBzaWduYXR1cmVzCgpJZiBgI3dpdGhgIGlzbid0IGdvb2Qs IEkgY2FuIGFsc28gdGhpbmsgb2Y6CgogIC0gYE9iamVjdCNzZXRgCiAgLSBgT2JqZWN0I2FwcGx5 YAoKQnV0IHRoZSBgd2l0aF9gIHByZWZpeCBpcyBieSBmYXIgdGhlIG1vc3QgdXNlZCBvbmUgd2hl biBpbXBsZW1lbnRpbmcgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGlzIHBhdHRlcm4uCgpBbHNvIGlm IGFjY2VwdGluZyBhIEhhc2ggaXMgZGltbWVkIHRvbyBtdWNoLCBhbHRlcm5hdGl2ZSBzaWduYXR1 cmVzIGNvdWxkIGJlOgoKICAtIGBPYmplY3Qjc2V0KGF0dHJfbmFtZSwgdmFsdWUpYAogIC0gYE9i amVjdCNzZXQoYXR0cjEsIHZhbHVlMSwgW2F0dHIyLCB2YWx1ZTJdLCAuLi4pYAoKCgoKCi0tIApo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29y ZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0 cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K