[ruby-core:109737] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"nobu (Nobuyoshi Nakada)" <noreply@...>
Date:
2022-08-27 14:37:01 UTC
List:
ruby-core #109737
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku CgoKSSBhZ3JlZSB3aXRoIHRoZSBjb25jZXB0LCBidXQgd29uZGVyIGFib3V0IHRoZXNlIG5hbWVz LgpUaGUgbWVhbmluZyBvZiBgd2l0aF9zb21ldGhpbmdfZW5hYmxlZGAgaXMgb2J2aW91cywgYnV0 IHNvbGUgYHdpdGhgIGZlZWxzIHZhZ3VlIGEgbGl0dGxlLCB0byBtZS4KCkFuZCBgb2xkX3ZhbHVl c2Agc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIGFuIGVtcHR5IGhhc2gsIEkgdGhpbmsuCgotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE4OTUxOiBPYmpl Y3Qjd2l0aCB0byBzZXQgYW5kIHJlc3RvcmUgYXR0cmlidXRlcyBhcm91bmQgYSBibG9jawpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg5NTEjY2hhbmdlLTk4OTcyCgoqIEF1dGhv cjogYnlyb290IChKZWFuIEJvdXNzaWVyKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3Jt YWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIyMgVXNlIGNhc2UK CkEgdmVyeSBjb21tb24gcGF0dGVybiBpbiBSdWJ5LCBlc3BlY2lhbGx5IGluIHRlc3RpbmcgaXMg dG8gc2F2ZSB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLCBzZXQgYSBuZXcgdmFsdWUsIGFuZCB0 aGVuIHJlc3RvcmUgdGhlIG9sZCB2YWx1ZSBpbiBhbiBgZW5zdXJlYCBjbGF1c2UuCgplLmcuIGlu IHVuaXQgdGVzdHMKCmBgYHJ1YnkKZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZAogIGVu YWJsZWRfd2FzLCBTb21lTGlicmFyeS5lbmFibGVkID0gU29tZUxpYnJhcnkuZW5hYmxlZCwgdHJ1 ZQogICMgdGVzdCB0aGluZ3MKZW5zdXJlCiAgU29tZUxpYnJhcnkuZW5hYmxlZCA9IGVuYWJsZWRf d2FzCmVuZApgYGAKCk9yIHNvbWV0aW1lIGluIGFjdHVhbCBBUElzOgoKYGBgcnVieQpkZWYgd2l0 aF9zb21ldGhpbmdfZW5hYmxlZAogIGVuYWJsZWRfd2FzID0gQGVuYWJsZWQKICBAZW5hYmxlZCA9 IHRydWUKICB5aWVsZAplbnN1cmUKICBAZW5hYmxlZCA9IGVuYWJsZWRfd2FzCmVuZApgYGAKClRo ZXJlIGlzIG5vIGluaGVyZW50IHByb2JsZW0gd2l0aCB0aGlzIHBhdHRlcm4sIGJ1dCBpdCBjYW4g YmUgZWFzeSB0byBtYWtlIGEgbWlzdGFrZSwgZm9yIGluc3RhbmNlIHRoZSB1bml0IHRlc3QgZXhh bXBsZToKCmBgYHJ1YnkKZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZAogIHNvbWVfY2Fs bF90aGF0X21heV9yYWlzZQogIGVuYWJsZWRfd2FzLCBTb21lTGlicmFyeS5lbmFibGVkID0gU29t ZUxpYnJhcnkuZW5hYmxlZCwgdHJ1ZQogICMgdGVzdCB0aGluZ3MKZW5zdXJlCiAgU29tZUxpYnJh cnkuZW5hYmxlZCA9IGVuYWJsZWRfd2FzCmVuZApgYGAKCkluIHRoZSBhYm92ZSBpZiBgc29tZV9j YWxsX3RoYXRfbWF5X3JhaXNlYCBhY3R1YWxseSByYWlzZXMsIGBTb21lTGlicmFyeS5lbmFibGVk YCBpcyBzZXQgYmFjayB0byBgbmlsYCByYXRoZXIgdGhhbiBpdHMgb3JpZ2luYWwgdmFsdWUuIEkn dmUgc2VlbiB0aGlzIG1pc3Rha2UgcXVpdGUgZnJlcXVlbnRseS4KCiMjIyBQcm9wb3NhbAoKSSB0 aGluayBpdCB3b3VsZCBiZSB2ZXJ5IHVzZWZ1bCB0byBoYXZlIGEgbWV0aG9kIG9uIE9iamVjdCB0 byBpbXBsZW1lbnQgdGhpcyBwYXR0ZXJuIGluIGEgY29ycmVjdCBhbmQgZWFzeSB0byB1c2Ugd2F5 LiBUaGUgbmFpdmUgUnVieSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZToKCmBgYHJ1YnkKY2xhc3Mg T2JqZWN0CiAgZGVmIHdpdGgoKiphdHRyaWJ1dGVzKQogICAgb2xkX3ZhbHVlcyA9IGF0dHJpYnV0 ZXMuZHVwCiAgICBhdHRyaWJ1dGVzLmVhY2hfa2V5IGRvIHxrZXl8CiAgICAgIG9sZF92YWx1ZXNb a2V5XSA9IHB1YmxpY19zZW5kKGtleSkKICAgIGVuZAogICAgYmVnaW4KICAgICAgYXR0cmlidXRl cy5lYWNoIGRvIHxrZXksIHZhbHVlfAogICAgICAgIHB1YmxpY19zZW5kKCIje2tleX09IiwgdmFs dWUpCiAgICAgIGVuZAogICAgICB5aWVsZAogICAgZW5zdXJlCiAgICAgIG9sZF92YWx1ZXMuZWFj aCBkbyB8a2V5LCBvbGRfdmFsdWV8CiAgICAgICAgcHVibGljX3NlbmQoIiN7a2V5fT0iLCBvbGRf dmFsdWUpCiAgICAgIGVuZAogICAgZW5kCiAgZW5kCmVuZApgYGAKCk5COiBgcHVibGljX3NlbmRg IGlzIHVzZWQgYmVjYXVzZSBJIGRvbid0IHRoaW5rIHN1Y2ggbWV0aG9kIHNob3VsZCBiZSB1c2Fi bGUgaWYgdGhlIGFjY2Vzc29ycyBhcmUgcHJpdmF0ZS4KCldpdGggdXNhZ2U6CgpgYGBydWJ5CmRl ZiB0ZXN0X3NvbWV0aGluZ193aGVuX2VuYWJsZWQKICBTb21lTGlicmFyeS53aXRoKGVuYWJsZWQ6 IHRydWUpIGRvCiAgICAjIHRlc3QgdGhpbmdzCiAgZW5kCmVuZApgYGAKCmBgYHJ1YnkKR0Mud2l0 aChtZWFzdXJlX3RvdGFsX3RpbWU6IHRydWUsIGF1dG9fY29tcGFjdDogZmFsc2UpIGRvCiAgIyBk byBzb21ldGhpbmcKZW5kCmBgYAoKIyMjIEFsdGVybmF0ZSBuYW1lcyBhbmQgc2lnbmF0dXJlcwoK SWYgYCN3aXRoYCBpc24ndCBnb29kLCBJIGNhbiBhbHNvIHRoaW5rIG9mOgoKICAtIGBPYmplY3Qj c2V0YAogIC0gYE9iamVjdCNhcHBseWAKCkJ1dCB0aGUgYHdpdGhfYCBwcmVmaXggaXMgYnkgZmFy IHRoZSBtb3N0IHVzZWQgb25lIHdoZW4gaW1wbGVtZW50aW5nIG1ldGhvZHMgdGhhdCBmb2xsb3cg dGhpcyBwYXR0ZXJuLgoKQWxzbyBpZiBhY2NlcHRpbmcgYSBIYXNoIGlzIGRpbW1lZCB0b28gbXVj aCwgYWx0ZXJuYXRpdmUgc2lnbmF0dXJlcyBjb3VsZCBiZToKCiAgLSBgT2JqZWN0I3NldChhdHRy X25hbWUsIHZhbHVlKWAKICAtIGBPYmplY3Qjc2V0KGF0dHIxLCB2YWx1ZTEsIFthdHRyMiwgdmFs dWUyXSwgLi4uKWAKCgoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCgpVbnN1YnNj cmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5z dWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0 aW9ucy9ydWJ5LWNvcmU+Cg==