[ruby-core:109738] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2022-08-27 14:58:33 UTC
List:
ruby-core #109738
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K CgpJIHRoaW5rIHRoaXMgd291bGQgYmUgbmljZSB0byBoYXZlLCBpbmRlZWQgc3BlbGxpbmcgaXQg b3V0IG1hbnVhbGx5IGlzIHF1aXRlIHZlcmJvc2UgYW5kIHRoZW4gd2UgdGVuZCB0byBoYXZlIGxv dHMgb2YgaGVscGVyIG1ldGhvZHMgZm9yIHRoaXMuCkZvciB0aGUgbmFtZSwgYHdpdGhgIHNlZW1z IG5hdHVyYWwgdG8gbWUsIGFuZCBpdCdzIGFsc28gdGhlIG5hbWUgb2YgdGhlIGtleXdvcmQgaW4g UHl0aG9uIHVzZWQgZm9yIGEgc29tZXdoYXQgc2ltaWxhciBwdXJwb3NlIChhIHRyeS13aXRoLXJl c291cmNlKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVy ZSAjMTg5NTE6IE9iamVjdCN3aXRoIHRvIHNldCBhbmQgcmVzdG9yZSBhdHRyaWJ1dGVzIGFyb3Vu ZCBhIGJsb2NrCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xODk1MSNjaGFuZ2Ut OTg5NzQKCiogQXV0aG9yOiBieXJvb3QgKEplYW4gQm91c3NpZXIpCiogU3RhdHVzOiBPcGVuCiog UHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiMjIyBVc2UgY2FzZQoKQSB2ZXJ5IGNvbW1vbiBwYXR0ZXJuIGluIFJ1YnksIGVzcGVjaWFsbHkg aW4gdGVzdGluZyBpcyB0byBzYXZlIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsIHNldCBhIG5l dyB2YWx1ZSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgb2xkIHZhbHVlIGluIGFuIGBlbnN1cmVgIGNs YXVzZS4KCmUuZy4gaW4gdW5pdCB0ZXN0cwoKYGBgcnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hl bl9lbmFibGVkCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFy eS5lbmFibGVkLCB0cnVlCiAgIyB0ZXN0IHRoaW5ncwplbnN1cmUKICBTb21lTGlicmFyeS5lbmFi bGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKT3Igc29tZXRpbWUgaW4gYWN0dWFsIEFQSXM6Cgpg YGBydWJ5CmRlZiB3aXRoX3NvbWV0aGluZ19lbmFibGVkCiAgZW5hYmxlZF93YXMgPSBAZW5hYmxl ZAogIEBlbmFibGVkID0gdHJ1ZQogIHlpZWxkCmVuc3VyZQogIEBlbmFibGVkID0gZW5hYmxlZF93 YXMKZW5kCmBgYAoKVGhlcmUgaXMgbm8gaW5oZXJlbnQgcHJvYmxlbSB3aXRoIHRoaXMgcGF0dGVy biwgYnV0IGl0IGNhbiBiZSBlYXN5IHRvIG1ha2UgYSBtaXN0YWtlLCBmb3IgaW5zdGFuY2UgdGhl IHVuaXQgdGVzdCBleGFtcGxlOgoKYGBgcnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFi bGVkCiAgc29tZV9jYWxsX3RoYXRfbWF5X3JhaXNlCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5 LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFibGVkLCB0cnVlCiAgIyB0ZXN0IHRoaW5ncwplbnN1 cmUKICBTb21lTGlicmFyeS5lbmFibGVkID0gZW5hYmxlZF93YXMKZW5kCmBgYAoKSW4gdGhlIGFi b3ZlIGlmIGBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2VgIGFjdHVhbGx5IHJhaXNlcywgYFNvbWVM aWJyYXJ5LmVuYWJsZWRgIGlzIHNldCBiYWNrIHRvIGBuaWxgIHJhdGhlciB0aGFuIGl0cyBvcmln aW5hbCB2YWx1ZS4gSSd2ZSBzZWVuIHRoaXMgbWlzdGFrZSBxdWl0ZSBmcmVxdWVudGx5LgoKIyMj IFByb3Bvc2FsCgpJIHRoaW5rIGl0IHdvdWxkIGJlIHZlcnkgdXNlZnVsIHRvIGhhdmUgYSBtZXRo b2Qgb24gT2JqZWN0IHRvIGltcGxlbWVudCB0aGlzIHBhdHRlcm4gaW4gYSBjb3JyZWN0IGFuZCBl YXN5IHRvIHVzZSB3YXkuIFRoZSBuYWl2ZSBSdWJ5IGltcGxlbWVudGF0aW9uIHdvdWxkIGJlOgoK YGBgcnVieQpjbGFzcyBPYmplY3QKICBkZWYgd2l0aCgqKmF0dHJpYnV0ZXMpCiAgICBvbGRfdmFs dWVzID0ge30KICAgIGF0dHJpYnV0ZXMuZWFjaF9rZXkgZG8gfGtleXwKICAgICAgb2xkX3ZhbHVl c1trZXldID0gcHVibGljX3NlbmQoa2V5KQogICAgZW5kCiAgICBiZWdpbgogICAgICBhdHRyaWJ1 dGVzLmVhY2ggZG8gfGtleSwgdmFsdWV8CiAgICAgICAgcHVibGljX3NlbmQoIiN7a2V5fT0iLCB2 YWx1ZSkKICAgICAgZW5kCiAgICAgIHlpZWxkCiAgICBlbnN1cmUKICAgICAgb2xkX3ZhbHVlcy5l YWNoIGRvIHxrZXksIG9sZF92YWx1ZXwKICAgICAgICBwdWJsaWNfc2VuZCgiI3trZXl9PSIsIG9s ZF92YWx1ZSkKICAgICAgZW5kCiAgICBlbmQKICBlbmQKZW5kCmBgYAoKTkI6IGBwdWJsaWNfc2Vu ZGAgaXMgdXNlZCBiZWNhdXNlIEkgZG9uJ3QgdGhpbmsgc3VjaCBtZXRob2Qgc2hvdWxkIGJlIHVz YWJsZSBpZiB0aGUgYWNjZXNzb3JzIGFyZSBwcml2YXRlLgoKV2l0aCB1c2FnZToKCmBgYHJ1YnkK ZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZAogIFNvbWVMaWJyYXJ5LndpdGgoZW5hYmxl ZDogdHJ1ZSkgZG8KICAgICMgdGVzdCB0aGluZ3MKICBlbmQKZW5kCmBgYAoKYGBgcnVieQpHQy53 aXRoKG1lYXN1cmVfdG90YWxfdGltZTogdHJ1ZSwgYXV0b19jb21wYWN0OiBmYWxzZSkgZG8KICAj IGRvIHNvbWV0aGluZwplbmQKYGBgCgojIyMgQWx0ZXJuYXRlIG5hbWVzIGFuZCBzaWduYXR1cmVz CgpJZiBgI3dpdGhgIGlzbid0IGdvb2QsIEkgY2FuIGFsc28gdGhpbmsgb2Y6CgogIC0gYE9iamVj dCNzZXRgCiAgLSBgT2JqZWN0I2FwcGx5YAoKQnV0IHRoZSBgd2l0aF9gIHByZWZpeCBpcyBieSBm YXIgdGhlIG1vc3QgdXNlZCBvbmUgd2hlbiBpbXBsZW1lbnRpbmcgbWV0aG9kcyB0aGF0IGZvbGxv dyB0aGlzIHBhdHRlcm4uCgpBbHNvIGlmIGFjY2VwdGluZyBhIEhhc2ggaXMgZGltbWVkIHRvbyBt dWNoLCBhbHRlcm5hdGl2ZSBzaWduYXR1cmVzIGNvdWxkIGJlOgoKICAtIGBPYmplY3Qjc2V0KGF0 dHJfbmFtZSwgdmFsdWUpYAogIC0gYE9iamVjdCNzZXQoYXR0cjEsIHZhbHVlMSwgW2F0dHIyLCB2 YWx1ZTJdLCAuLi4pYAoKCgoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vi c2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11 bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9v cHRpb25zL3J1YnktY29yZT4K