[ruby-core:109882] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"baweaver (Brandon Weaver)" <noreply@...>
Date:
2022-09-11 02:49:42 UTC
List:
ruby-core #109882
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYmF3ZWF2ZXIgKEJyYW5kb24gV2VhdmVy KS4KCgpUaGlzIGlkZWEgaXMgdmVyeSBzaW1pbGFyIHRvIEFsZ2VicmFpYyBlZmZlY3RzLCB3aGlj aCBkcnktcmIgaGFzIGEgdmFyaWFudCBvbjoKCmh0dHBzOi8vZHJ5LXJiLm9yZy9nZW1zL2RyeS1l ZmZlY3RzL21haW4vCgpJIHdvdWxkIHBlcnNvbmFsbHkgbGlrZSB0aGUgYHdpdGhgIHZhcmlhbnQg bXlzZWxmLCBncmFudGluZyB0aGF0IGl0IGlzIGEgYml0IHZhZ3VlLCBidXQgaXMgYWxzbyBpbiBs aW5lIHdpdGggd2hhdCBhIGxvdCBvZiBlZmZlY3RzIHN0eWxlIGxpYnJhcmllcyBhcmUgdXNpbmcu CgpJIGJlbGlldmUgRGFuIEFicmFtb3YgaGFzIGRvbmUgYSBnb29kIGpvYiBvZiBleHBsYWluaW5n IHRoaXMgY29uY2VwdDoKCmh0dHBzOi8vb3ZlcnJlYWN0ZWQuaW8vYWxnZWJyYWljLWVmZmVjdHMt Zm9yLXRoZS1yZXN0LW9mLXVzLwoKTW9zdGx5IG5vdGluZyB0aGF0IHRoZXJlIGlzIHByZWNlZGVu dCBmb3IgdGhpcyB0eXBlIG9mIHBhdHRlcm4gaW4gbW9yZSBmdW5jdGlvbmFsbHkgb3JpZW50ZWQg bGFuZ3VhZ2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0 dXJlICMxODk1MTogT2JqZWN0I3dpdGggdG8gc2V0IGFuZCByZXN0b3JlIGF0dHJpYnV0ZXMgYXJv dW5kIGEgYmxvY2sKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4OTUxI2NoYW5n ZS05OTEyMwoKKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikKKiBTdGF0dXM6IE9wZW4K KiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIyMjIFVzZSBjYXNlCgpBIHZlcnkgY29tbW9uIHBhdHRlcm4gaW4gUnVieSwgZXNwZWNpYWxs eSBpbiB0ZXN0aW5nIGlzIHRvIHNhdmUgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSwgc2V0IGEg bmV3IHZhbHVlLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBvbGQgdmFsdWUgaW4gYW4gYGVuc3VyZWAg Y2xhdXNlLgoKZS5nLiBpbiB1bml0IHRlc3RzCgpgYGBydWJ5CmRlZiB0ZXN0X3NvbWV0aGluZ193 aGVuX2VuYWJsZWQKICBlbmFibGVkX3dhcywgU29tZUxpYnJhcnkuZW5hYmxlZCA9IFNvbWVMaWJy YXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3QgdGhpbmdzCmVuc3VyZQogIFNvbWVMaWJyYXJ5LmVu YWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBgCgpPciBzb21ldGltZSBpbiBhY3R1YWwgQVBJczoK CmBgYHJ1YnkKZGVmIHdpdGhfc29tZXRoaW5nX2VuYWJsZWQKICBlbmFibGVkX3dhcyA9IEBlbmFi bGVkCiAgQGVuYWJsZWQgPSB0cnVlCiAgeWllbGQKZW5zdXJlCiAgQGVuYWJsZWQgPSBlbmFibGVk X3dhcwplbmQKYGBgCgpUaGVyZSBpcyBubyBpbmhlcmVudCBwcm9ibGVtIHdpdGggdGhpcyBwYXR0 ZXJuLCBidXQgaXQgY2FuIGJlIGVhc3kgdG8gbWFrZSBhIG1pc3Rha2UsIGZvciBpbnN0YW5jZSB0 aGUgdW5pdCB0ZXN0IGV4YW1wbGU6CgpgYGBydWJ5CmRlZiB0ZXN0X3NvbWV0aGluZ193aGVuX2Vu YWJsZWQKICBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2UKICBlbmFibGVkX3dhcywgU29tZUxpYnJh cnkuZW5hYmxlZCA9IFNvbWVMaWJyYXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3QgdGhpbmdzCmVu c3VyZQogIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBgCgpJbiB0aGUg YWJvdmUgaWYgYHNvbWVfY2FsbF90aGF0X21heV9yYWlzZWAgYWN0dWFsbHkgcmFpc2VzLCBgU29t ZUxpYnJhcnkuZW5hYmxlZGAgaXMgc2V0IGJhY2sgdG8gYG5pbGAgcmF0aGVyIHRoYW4gaXRzIG9y aWdpbmFsIHZhbHVlLiBJJ3ZlIHNlZW4gdGhpcyBtaXN0YWtlIHF1aXRlIGZyZXF1ZW50bHkuCgoj IyMgUHJvcG9zYWwKCkkgdGhpbmsgaXQgd291bGQgYmUgdmVyeSB1c2VmdWwgdG8gaGF2ZSBhIG1l dGhvZCBvbiBPYmplY3QgdG8gaW1wbGVtZW50IHRoaXMgcGF0dGVybiBpbiBhIGNvcnJlY3QgYW5k IGVhc3kgdG8gdXNlIHdheS4gVGhlIG5haXZlIFJ1YnkgaW1wbGVtZW50YXRpb24gd291bGQgYmU6 CgpgYGBydWJ5CmNsYXNzIE9iamVjdAogIGRlZiB3aXRoKCoqYXR0cmlidXRlcykKICAgIG9sZF92 YWx1ZXMgPSB7fQogICAgYXR0cmlidXRlcy5lYWNoX2tleSBkbyB8a2V5fAogICAgICBvbGRfdmFs dWVzW2tleV0gPSBwdWJsaWNfc2VuZChrZXkpCiAgICBlbmQKICAgIGJlZ2luCiAgICAgIGF0dHJp YnV0ZXMuZWFjaCBkbyB8a2V5LCB2YWx1ZXwKICAgICAgICBwdWJsaWNfc2VuZCgiI3trZXl9PSIs IHZhbHVlKQogICAgICBlbmQKICAgICAgeWllbGQKICAgIGVuc3VyZQogICAgICBvbGRfdmFsdWVz LmVhY2ggZG8gfGtleSwgb2xkX3ZhbHVlfAogICAgICAgIHB1YmxpY19zZW5kKCIje2tleX09Iiwg b2xkX3ZhbHVlKQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKYGBgCgpOQjogYHB1YmxpY19z ZW5kYCBpcyB1c2VkIGJlY2F1c2UgSSBkb24ndCB0aGluayBzdWNoIG1ldGhvZCBzaG91bGQgYmUg dXNhYmxlIGlmIHRoZSBhY2Nlc3NvcnMgYXJlIHByaXZhdGUuCgpXaXRoIHVzYWdlOgoKYGBgcnVi eQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgU29tZUxpYnJhcnkud2l0aChlbmFi bGVkOiB0cnVlKSBkbwogICAgIyB0ZXN0IHRoaW5ncwogIGVuZAplbmQKYGBgCgpgYGBydWJ5CkdD LndpdGgobWVhc3VyZV90b3RhbF90aW1lOiB0cnVlLCBhdXRvX2NvbXBhY3Q6IGZhbHNlKSBkbwog ICMgZG8gc29tZXRoaW5nCmVuZApgYGAKCiMjIyBBbHRlcm5hdGUgbmFtZXMgYW5kIHNpZ25hdHVy ZXMKCklmIGAjd2l0aGAgaXNuJ3QgZ29vZCwgSSBjYW4gYWxzbyB0aGluayBvZjoKCiAgLSBgT2Jq ZWN0I3NldGAKICAtIGBPYmplY3QjYXBwbHlgCgpCdXQgdGhlIGB3aXRoX2AgcHJlZml4IGlzIGJ5 IGZhciB0aGUgbW9zdCB1c2VkIG9uZSB3aGVuIGltcGxlbWVudGluZyBtZXRob2RzIHRoYXQgZm9s bG93IHRoaXMgcGF0dGVybi4KCkFsc28gaWYgYWNjZXB0aW5nIGEgSGFzaCBpcyBkaW1tZWQgdG9v IG11Y2gsIGFsdGVybmF0aXZlIHNpZ25hdHVyZXMgY291bGQgYmU6CgogIC0gYE9iamVjdCNzZXQo YXR0cl9uYW1lLCB2YWx1ZSlgCiAgLSBgT2JqZWN0I3NldChhdHRyMSwgdmFsdWUxLCBbYXR0cjIs IHZhbHVlMl0sIC4uLilgCgoKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5z dWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0 PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFu L29wdGlvbnMvcnVieS1jb3JlPgo=