[ruby-core:109739] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"byroot (Jean Boussier)" <noreply@...>
Date:
2022-08-27 15:06:08 UTC
List:
ruby-core #109739
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4K Cgo+IHNvbGUgd2l0aCBmZWVscyB2YWd1ZSBhIGxpdHRsZSwgdG8gbWUuCgpXZWxsLCB0aGUgYXJn dW1lbnQgaXMgdGhhdCBpdCdzIG5vdCBhbG9uZSwgc2luY2UgaXQgaXMgdXNlZCB3aXRoIGF0IGxp c3Qgb25lIGtleXdvcmQgYXJndW1lbnQuCgpgc29tZXRoaW5nLndpdGhgIGlzIHZhZ3VlIEkgYWdy ZWUsIGJ1dCBJIGJlbGlldmUgdGhhdCBlLmcuOgoKYGBgcnVieQpHQy53aXRoKHN0cmVzczogdHJ1 ZSkgZG8KICAjIHRlc3Qgc29tZXRoaW5nCmVuZApgYGAKCklzIGp1c3QgYXMgY2xlYXIgYXM6Cgpg YGBydWJ5CkdDLndpdGhfc3RyZXNzKHRydWUpIGRvCiAgIyAKZW5kCmBgYAoKb3IgCgpgYGBydWJ5 CkdDLndpdGhfc3RyZXNzIGRvCiMKZW5kCmBgYAoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg5NTE6IE9iamVjdCN3aXRoIHRvIHNldCBhbmQgcmVz dG9yZSBhdHRyaWJ1dGVzIGFyb3VuZCBhIGJsb2NrCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn L2lzc3Vlcy8xODk1MSNjaGFuZ2UtOTg5NzUKCiogQXV0aG9yOiBieXJvb3QgKEplYW4gQm91c3Np ZXIpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjIyBVc2UgY2FzZQoKQSB2ZXJ5IGNvbW1vbiBwYXR0ZXJu IGluIFJ1YnksIGVzcGVjaWFsbHkgaW4gdGVzdGluZyBpcyB0byBzYXZlIHRoZSB2YWx1ZSBvZiBh biBhdHRyaWJ1dGUsIHNldCBhIG5ldyB2YWx1ZSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgb2xkIHZh bHVlIGluIGFuIGBlbnN1cmVgIGNsYXVzZS4KCmUuZy4gaW4gdW5pdCB0ZXN0cwoKYGBgcnVieQpk ZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5 LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0cnVlCiAgIyB0ZXN0IHRoaW5ncwplbnN1 cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKT3Igc29tZXRp bWUgaW4gYWN0dWFsIEFQSXM6CgpgYGBydWJ5CmRlZiB3aXRoX3NvbWV0aGluZ19lbmFibGVkCiAg ZW5hYmxlZF93YXMgPSBAZW5hYmxlZAogIEBlbmFibGVkID0gdHJ1ZQogIHlpZWxkCmVuc3VyZQog IEBlbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKVGhlcmUgaXMgbm8gaW5oZXJlbnQgcHJv YmxlbSB3aXRoIHRoaXMgcGF0dGVybiwgYnV0IGl0IGNhbiBiZSBlYXN5IHRvIG1ha2UgYSBtaXN0 YWtlLCBmb3IgaW5zdGFuY2UgdGhlIHVuaXQgdGVzdCBleGFtcGxlOgoKYGBgcnVieQpkZWYgdGVz dF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgc29tZV9jYWxsX3RoYXRfbWF5X3JhaXNlCiAgZW5h YmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0cnVl CiAgIyB0ZXN0IHRoaW5ncwplbnN1cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxlZF93 YXMKZW5kCmBgYAoKSW4gdGhlIGFib3ZlIGlmIGBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2VgIGFj dHVhbGx5IHJhaXNlcywgYFNvbWVMaWJyYXJ5LmVuYWJsZWRgIGlzIHNldCBiYWNrIHRvIGBuaWxg IHJhdGhlciB0aGFuIGl0cyBvcmlnaW5hbCB2YWx1ZS4gSSd2ZSBzZWVuIHRoaXMgbWlzdGFrZSBx dWl0ZSBmcmVxdWVudGx5LgoKIyMjIFByb3Bvc2FsCgpJIHRoaW5rIGl0IHdvdWxkIGJlIHZlcnkg dXNlZnVsIHRvIGhhdmUgYSBtZXRob2Qgb24gT2JqZWN0IHRvIGltcGxlbWVudCB0aGlzIHBhdHRl cm4gaW4gYSBjb3JyZWN0IGFuZCBlYXN5IHRvIHVzZSB3YXkuIFRoZSBuYWl2ZSBSdWJ5IGltcGxl bWVudGF0aW9uIHdvdWxkIGJlOgoKYGBgcnVieQpjbGFzcyBPYmplY3QKICBkZWYgd2l0aCgqKmF0 dHJpYnV0ZXMpCiAgICBvbGRfdmFsdWVzID0ge30KICAgIGF0dHJpYnV0ZXMuZWFjaF9rZXkgZG8g fGtleXwKICAgICAgb2xkX3ZhbHVlc1trZXldID0gcHVibGljX3NlbmQoa2V5KQogICAgZW5kCiAg ICBiZWdpbgogICAgICBhdHRyaWJ1dGVzLmVhY2ggZG8gfGtleSwgdmFsdWV8CiAgICAgICAgcHVi bGljX3NlbmQoIiN7a2V5fT0iLCB2YWx1ZSkKICAgICAgZW5kCiAgICAgIHlpZWxkCiAgICBlbnN1 cmUKICAgICAgb2xkX3ZhbHVlcy5lYWNoIGRvIHxrZXksIG9sZF92YWx1ZXwKICAgICAgICBwdWJs aWNfc2VuZCgiI3trZXl9PSIsIG9sZF92YWx1ZSkKICAgICAgZW5kCiAgICBlbmQKICBlbmQKZW5k CmBgYAoKTkI6IGBwdWJsaWNfc2VuZGAgaXMgdXNlZCBiZWNhdXNlIEkgZG9uJ3QgdGhpbmsgc3Vj aCBtZXRob2Qgc2hvdWxkIGJlIHVzYWJsZSBpZiB0aGUgYWNjZXNzb3JzIGFyZSBwcml2YXRlLgoK V2l0aCB1c2FnZToKCmBgYHJ1YnkKZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZAogIFNv bWVMaWJyYXJ5LndpdGgoZW5hYmxlZDogdHJ1ZSkgZG8KICAgICMgdGVzdCB0aGluZ3MKICBlbmQK ZW5kCmBgYAoKYGBgcnVieQpHQy53aXRoKG1lYXN1cmVfdG90YWxfdGltZTogdHJ1ZSwgYXV0b19j b21wYWN0OiBmYWxzZSkgZG8KICAjIGRvIHNvbWV0aGluZwplbmQKYGBgCgojIyMgQWx0ZXJuYXRl IG5hbWVzIGFuZCBzaWduYXR1cmVzCgpJZiBgI3dpdGhgIGlzbid0IGdvb2QsIEkgY2FuIGFsc28g dGhpbmsgb2Y6CgogIC0gYE9iamVjdCNzZXRgCiAgLSBgT2JqZWN0I2FwcGx5YAoKQnV0IHRoZSBg d2l0aF9gIHByZWZpeCBpcyBieSBmYXIgdGhlIG1vc3QgdXNlZCBvbmUgd2hlbiBpbXBsZW1lbnRp bmcgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGlzIHBhdHRlcm4uCgpBbHNvIGlmIGFjY2VwdGluZyBh IEhhc2ggaXMgZGltbWVkIHRvbyBtdWNoLCBhbHRlcm5hdGl2ZSBzaWduYXR1cmVzIGNvdWxkIGJl OgoKICAtIGBPYmplY3Qjc2V0KGF0dHJfbmFtZSwgdmFsdWUpYAogIC0gYE9iamVjdCNzZXQoYXR0 cjEsIHZhbHVlMSwgW2F0dHIyLCB2YWx1ZTJdLCAuLi4pYAoKCgoKCi0tIApodHRwczovL2J1Z3Mu cnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1 YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcu b3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K