[ruby-core:110049] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"Dan0042 (Daniel DeLorme)" <noreply@...>
Date:
2022-09-23 15:40:27 UTC
List:
ruby-core #110049
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp LgoKCmAjd2l0aGAgaXMgbm90IGEgZ29vZCBuYW1lLiBGb3IgYSBtZXRob2QgZGVmaW5lZCBvbiBP YmplY3QsIHRoZSBzZW1hbnRpY3Mgc2hvdWxkIGJlIHRoZSBzYW1lIG9uIGFsbCBjbGFzc2VzIGlu IHJ1YnkuIEZvciBleGFtcGxlIGAjZHVwYCBkb2VzIHRoZSBzYW1lIHRoaW5nIChjcmVhdGUgYSBk dXBsaWNhdGUpIG9uIGFsbCBvYmplY3RzLCBldmVuIGlmIHRoZSBpbXBsZW1lbnRpb24gaXMgY2xh c3Mtc3BlY2lmaWMuCgpFeGFtcGxlcyB3aGljaCBkaWQgbm90IGZvbGxvdyB0aGlzIHJ1bGUgYW5k IGNyZWF0ZWQgcHJvYmxlbXMgaW4gdGhlIHBhc3Q6CmAjaWRgIHdhcyByZW5hbWVkIHRvIGAjX19p ZF9fYCBhbmQgYCNvYmplY3RfaWRgIGJlY2F1c2UgaXQgb2Z0ZW4gbWVhbnMgdGhlIGlkIG9mIGEg REIgcmVjb3JkIChpbiBBY3RpdmVSZWNvcmQgbW9zdCBub3RhYmx5KQpgI21ldGhvZGAgbWVhbnMg c29tZXRoaW5nIGRpZmZlcmVudCBmb3IgQWN0aW9uRGlzcGF0Y2g6OlJlcXVlc3QKYCNzZW5kYCBt ZWFucyBzb21ldGhpbmcgZGlmZmVyZW50IGZvciBCYXNpY1NvY2tldAoKQnV0IGAjd2l0aGAgaXMg YWxyZWFkeSBkZWZpbmVkIG9uIGEgbG90IG9mIGdlbXMgKGh0dHBzOi8vcGFzdGViaW4uY29tL3kx YU1GNTNZKSB3aXRoIGJlaGF2aW9yIGRpZmZlcmVudCBmcm9tIHdoYXQgaXMgZGVzY3JpYmVkIGFi b3ZlLiBPZnRlbiB0aGUgYmVoYXZpb3IgaXMgc2ltaWxhciB0byB0aGUgb25lIHJlcXVlc3RlZCBm b3IgYERhdGEjd2l0aGAgaW4gIzE5MDAwOyByZXR1cm5pbmcgYSBuZXcgaW5zdGFuY2Ugd2l0aCBj ZXJ0YWluIHByb3BlcnRpZXMgbW9kaWZpZWQuIFRoYXQgYmVpbmcgc2FpZCwgaXQncyBjb21tb24g dG8gdXNlIGEgYmFuZyBmb3IgdGhlIG11dGF0aW5nIHZlcnNpb24gb2YgYSBub24tbXV0YXRpbmcg bWV0aG9kLCBzbyBJIHRoaW5rIGBPYmplY3Qjd2l0aCFgIHdvdWxkIG1ha2UgYSBmYWlyIGFtb3Vu dCBvZiBzZW5zZSBoZXJlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpGZWF0dXJlICMxODk1MTogT2JqZWN0I3dpdGggdG8gc2V0IGFuZCByZXN0b3JlIGF0dHJpYnV0 ZXMgYXJvdW5kIGEgYmxvY2sKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4OTUx I2NoYW5nZS05OTMwMAoKKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikKKiBTdGF0dXM6 IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIyMjIFVzZSBjYXNlCgpBIHZlcnkgY29tbW9uIHBhdHRlcm4gaW4gUnVieSwgZXNw ZWNpYWxseSBpbiB0ZXN0aW5nIGlzIHRvIHNhdmUgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSwg c2V0IGEgbmV3IHZhbHVlLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBvbGQgdmFsdWUgaW4gYW4gYGVu c3VyZWAgY2xhdXNlLgoKZS5nLiBpbiB1bml0IHRlc3RzCgpgYGBydWJ5CmRlZiB0ZXN0X3NvbWV0 aGluZ193aGVuX2VuYWJsZWQKICBlbmFibGVkX3dhcywgU29tZUxpYnJhcnkuZW5hYmxlZCA9IFNv bWVMaWJyYXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3QgdGhpbmdzCmVuc3VyZQogIFNvbWVMaWJy YXJ5LmVuYWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBgCgpPciBzb21ldGltZSBpbiBhY3R1YWwg QVBJczoKCmBgYHJ1YnkKZGVmIHdpdGhfc29tZXRoaW5nX2VuYWJsZWQKICBlbmFibGVkX3dhcyA9 IEBlbmFibGVkCiAgQGVuYWJsZWQgPSB0cnVlCiAgeWllbGQKZW5zdXJlCiAgQGVuYWJsZWQgPSBl bmFibGVkX3dhcwplbmQKYGBgCgpUaGVyZSBpcyBubyBpbmhlcmVudCBwcm9ibGVtIHdpdGggdGhp cyBwYXR0ZXJuLCBidXQgaXQgY2FuIGJlIGVhc3kgdG8gbWFrZSBhIG1pc3Rha2UsIGZvciBpbnN0 YW5jZSB0aGUgdW5pdCB0ZXN0IGV4YW1wbGU6CgpgYGBydWJ5CmRlZiB0ZXN0X3NvbWV0aGluZ193 aGVuX2VuYWJsZWQKICBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2UKICBlbmFibGVkX3dhcywgU29t ZUxpYnJhcnkuZW5hYmxlZCA9IFNvbWVMaWJyYXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3QgdGhp bmdzCmVuc3VyZQogIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBgCgpJ biB0aGUgYWJvdmUgaWYgYHNvbWVfY2FsbF90aGF0X21heV9yYWlzZWAgYWN0dWFsbHkgcmFpc2Vz LCBgU29tZUxpYnJhcnkuZW5hYmxlZGAgaXMgc2V0IGJhY2sgdG8gYG5pbGAgcmF0aGVyIHRoYW4g aXRzIG9yaWdpbmFsIHZhbHVlLiBJJ3ZlIHNlZW4gdGhpcyBtaXN0YWtlIHF1aXRlIGZyZXF1ZW50 bHkuCgojIyMgUHJvcG9zYWwKCkkgdGhpbmsgaXQgd291bGQgYmUgdmVyeSB1c2VmdWwgdG8gaGF2 ZSBhIG1ldGhvZCBvbiBPYmplY3QgdG8gaW1wbGVtZW50IHRoaXMgcGF0dGVybiBpbiBhIGNvcnJl Y3QgYW5kIGVhc3kgdG8gdXNlIHdheS4gVGhlIG5haXZlIFJ1YnkgaW1wbGVtZW50YXRpb24gd291 bGQgYmU6CgpgYGBydWJ5CmNsYXNzIE9iamVjdAogIGRlZiB3aXRoKCoqYXR0cmlidXRlcykKICAg IG9sZF92YWx1ZXMgPSB7fQogICAgYXR0cmlidXRlcy5lYWNoX2tleSBkbyB8a2V5fAogICAgICBv bGRfdmFsdWVzW2tleV0gPSBwdWJsaWNfc2VuZChrZXkpCiAgICBlbmQKICAgIGJlZ2luCiAgICAg IGF0dHJpYnV0ZXMuZWFjaCBkbyB8a2V5LCB2YWx1ZXwKICAgICAgICBwdWJsaWNfc2VuZCgiI3tr ZXl9PSIsIHZhbHVlKQogICAgICBlbmQKICAgICAgeWllbGQKICAgIGVuc3VyZQogICAgICBvbGRf dmFsdWVzLmVhY2ggZG8gfGtleSwgb2xkX3ZhbHVlfAogICAgICAgIHB1YmxpY19zZW5kKCIje2tl eX09Iiwgb2xkX3ZhbHVlKQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKYGBgCgpOQjogYHB1 YmxpY19zZW5kYCBpcyB1c2VkIGJlY2F1c2UgSSBkb24ndCB0aGluayBzdWNoIG1ldGhvZCBzaG91 bGQgYmUgdXNhYmxlIGlmIHRoZSBhY2Nlc3NvcnMgYXJlIHByaXZhdGUuCgpXaXRoIHVzYWdlOgoK YGBgcnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgU29tZUxpYnJhcnkud2l0 aChlbmFibGVkOiB0cnVlKSBkbwogICAgIyB0ZXN0IHRoaW5ncwogIGVuZAplbmQKYGBgCgpgYGBy dWJ5CkdDLndpdGgobWVhc3VyZV90b3RhbF90aW1lOiB0cnVlLCBhdXRvX2NvbXBhY3Q6IGZhbHNl KSBkbwogICMgZG8gc29tZXRoaW5nCmVuZApgYGAKCiMjIyBBbHRlcm5hdGUgbmFtZXMgYW5kIHNp Z25hdHVyZXMKCklmIGAjd2l0aGAgaXNuJ3QgZ29vZCwgSSBjYW4gYWxzbyB0aGluayBvZjoKCiAg LSBgT2JqZWN0I3NldGAKICAtIGBPYmplY3QjYXBwbHlgCgpCdXQgdGhlIGB3aXRoX2AgcHJlZml4 IGlzIGJ5IGZhciB0aGUgbW9zdCB1c2VkIG9uZSB3aGVuIGltcGxlbWVudGluZyBtZXRob2RzIHRo YXQgZm9sbG93IHRoaXMgcGF0dGVybi4KCkFsc28gaWYgYWNjZXB0aW5nIGEgSGFzaCBpcyBkaW1t ZWQgdG9vIG11Y2gsIGFsdGVybmF0aXZlIHNpZ25hdHVyZXMgY291bGQgYmU6CgogIC0gYE9iamVj dCNzZXQoYXR0cl9uYW1lLCB2YWx1ZSlgCiAgLSBgT2JqZWN0I3NldChhdHRyMSwgdmFsdWUxLCBb YXR0cjIsIHZhbHVlMl0sIC4uLilgCgoKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn LwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9z dWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9t YWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=