[ruby-core:109969] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"ko1 (Koichi Sasada)" <noreply@...>
Date:
2022-09-21 05:58:29 UTC
List:
ruby-core #109969
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkga28xIChLb2ljaGkgU2FzYWRhKS4KCgpP biB0aGUgb3RoZXIgbGFuZ3VhZ2VzLCBKYXZhU2NyaXB0LCBDIywgLi4uIGhhcyBkaWZmZXJlbnQg bWVhbmluZyAobWF5YmUgc2ltaWxhciB0byBgaW5zdGFuY2VfZXZhbGApIHNvIEkgdGhpbmsgdGhl IDEgd29yZCBgd2l0aGAgaXMgbm90IGdvb2QgbmFtZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg5NTE6IE9iamVjdCN3aXRoIHRvIHNldCBhbmQg cmVzdG9yZSBhdHRyaWJ1dGVzIGFyb3VuZCBhIGJsb2NrCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnL2lzc3Vlcy8xODk1MSNjaGFuZ2UtOTkyMTkKCiogQXV0aG9yOiBieXJvb3QgKEplYW4gQm91 c3NpZXIpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjIyBVc2UgY2FzZQoKQSB2ZXJ5IGNvbW1vbiBwYXR0 ZXJuIGluIFJ1YnksIGVzcGVjaWFsbHkgaW4gdGVzdGluZyBpcyB0byBzYXZlIHRoZSB2YWx1ZSBv ZiBhbiBhdHRyaWJ1dGUsIHNldCBhIG5ldyB2YWx1ZSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgb2xk IHZhbHVlIGluIGFuIGBlbnN1cmVgIGNsYXVzZS4KCmUuZy4gaW4gdW5pdCB0ZXN0cwoKYGBgcnVi eQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJy YXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0cnVlCiAgIyB0ZXN0IHRoaW5ncwpl bnN1cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKT3Igc29t ZXRpbWUgaW4gYWN0dWFsIEFQSXM6CgpgYGBydWJ5CmRlZiB3aXRoX3NvbWV0aGluZ19lbmFibGVk CiAgZW5hYmxlZF93YXMgPSBAZW5hYmxlZAogIEBlbmFibGVkID0gdHJ1ZQogIHlpZWxkCmVuc3Vy ZQogIEBlbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKVGhlcmUgaXMgbm8gaW5oZXJlbnQg cHJvYmxlbSB3aXRoIHRoaXMgcGF0dGVybiwgYnV0IGl0IGNhbiBiZSBlYXN5IHRvIG1ha2UgYSBt aXN0YWtlLCBmb3IgaW5zdGFuY2UgdGhlIHVuaXQgdGVzdCBleGFtcGxlOgoKYGBgcnVieQpkZWYg dGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgc29tZV9jYWxsX3RoYXRfbWF5X3JhaXNlCiAg ZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0 cnVlCiAgIyB0ZXN0IHRoaW5ncwplbnN1cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxl ZF93YXMKZW5kCmBgYAoKSW4gdGhlIGFib3ZlIGlmIGBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2Vg IGFjdHVhbGx5IHJhaXNlcywgYFNvbWVMaWJyYXJ5LmVuYWJsZWRgIGlzIHNldCBiYWNrIHRvIGBu aWxgIHJhdGhlciB0aGFuIGl0cyBvcmlnaW5hbCB2YWx1ZS4gSSd2ZSBzZWVuIHRoaXMgbWlzdGFr ZSBxdWl0ZSBmcmVxdWVudGx5LgoKIyMjIFByb3Bvc2FsCgpJIHRoaW5rIGl0IHdvdWxkIGJlIHZl cnkgdXNlZnVsIHRvIGhhdmUgYSBtZXRob2Qgb24gT2JqZWN0IHRvIGltcGxlbWVudCB0aGlzIHBh dHRlcm4gaW4gYSBjb3JyZWN0IGFuZCBlYXN5IHRvIHVzZSB3YXkuIFRoZSBuYWl2ZSBSdWJ5IGlt cGxlbWVudGF0aW9uIHdvdWxkIGJlOgoKYGBgcnVieQpjbGFzcyBPYmplY3QKICBkZWYgd2l0aCgq KmF0dHJpYnV0ZXMpCiAgICBvbGRfdmFsdWVzID0ge30KICAgIGF0dHJpYnV0ZXMuZWFjaF9rZXkg ZG8gfGtleXwKICAgICAgb2xkX3ZhbHVlc1trZXldID0gcHVibGljX3NlbmQoa2V5KQogICAgZW5k CiAgICBiZWdpbgogICAgICBhdHRyaWJ1dGVzLmVhY2ggZG8gfGtleSwgdmFsdWV8CiAgICAgICAg cHVibGljX3NlbmQoIiN7a2V5fT0iLCB2YWx1ZSkKICAgICAgZW5kCiAgICAgIHlpZWxkCiAgICBl bnN1cmUKICAgICAgb2xkX3ZhbHVlcy5lYWNoIGRvIHxrZXksIG9sZF92YWx1ZXwKICAgICAgICBw dWJsaWNfc2VuZCgiI3trZXl9PSIsIG9sZF92YWx1ZSkKICAgICAgZW5kCiAgICBlbmQKICBlbmQK ZW5kCmBgYAoKTkI6IGBwdWJsaWNfc2VuZGAgaXMgdXNlZCBiZWNhdXNlIEkgZG9uJ3QgdGhpbmsg c3VjaCBtZXRob2Qgc2hvdWxkIGJlIHVzYWJsZSBpZiB0aGUgYWNjZXNzb3JzIGFyZSBwcml2YXRl LgoKV2l0aCB1c2FnZToKCmBgYHJ1YnkKZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZAog IFNvbWVMaWJyYXJ5LndpdGgoZW5hYmxlZDogdHJ1ZSkgZG8KICAgICMgdGVzdCB0aGluZ3MKICBl bmQKZW5kCmBgYAoKYGBgcnVieQpHQy53aXRoKG1lYXN1cmVfdG90YWxfdGltZTogdHJ1ZSwgYXV0 b19jb21wYWN0OiBmYWxzZSkgZG8KICAjIGRvIHNvbWV0aGluZwplbmQKYGBgCgojIyMgQWx0ZXJu YXRlIG5hbWVzIGFuZCBzaWduYXR1cmVzCgpJZiBgI3dpdGhgIGlzbid0IGdvb2QsIEkgY2FuIGFs c28gdGhpbmsgb2Y6CgogIC0gYE9iamVjdCNzZXRgCiAgLSBgT2JqZWN0I2FwcGx5YAoKQnV0IHRo ZSBgd2l0aF9gIHByZWZpeCBpcyBieSBmYXIgdGhlIG1vc3QgdXNlZCBvbmUgd2hlbiBpbXBsZW1l bnRpbmcgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGlzIHBhdHRlcm4uCgpBbHNvIGlmIGFjY2VwdGlu ZyBhIEhhc2ggaXMgZGltbWVkIHRvbyBtdWNoLCBhbHRlcm5hdGl2ZSBzaWduYXR1cmVzIGNvdWxk IGJlOgoKICAtIGBPYmplY3Qjc2V0KGF0dHJfbmFtZSwgdmFsdWUpYAogIC0gYE9iamVjdCNzZXQo YXR0cjEsIHZhbHVlMSwgW2F0dHIyLCB2YWx1ZTJdLCAuLi4pYAoKCgoKCi0tIApodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0 QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxh bmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K