[ruby-core:109801] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
"Dan0042 (Daniel DeLorme)" <noreply@...>
Date:
2022-08-31 20:05:37 UTC
List:
ruby-core #109801
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp LgoKCkFsc28gcmVhbGx5IGxpa2UgdGhlIGlkZWEsIGFsc28gYW1iaXZhbGVudCBhYm91dCBzdWNo IGEgc2hvcnQgYW5kIGdlbmVyaWMgbmFtZS4KCkkgdGhpbmsgaXQgd291bGQgYmUgZ29vZCBpZiB0 aGUgbmFtZSBlbXBoYXNpemVkIGEgYml0IG1vcmUgdGhhdCB0aGUgb3JpZ2luYWwgdmFsdWVzIHdp bGwgYmUgcmVzdG9yZWQgYWZ0ZXIgdGhlIGJsb2NrLiBTb21ldGhpbmcgaW4gdGhlIHZlaW4gb2Yg YHRlbXBvcmFyaWx5X3dpdGhgCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpGZWF0dXJlICMxODk1MTogT2JqZWN0I3dpdGggdG8gc2V0IGFuZCByZXN0b3JlIGF0dHJp YnV0ZXMgYXJvdW5kIGEgYmxvY2sKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4 OTUxI2NoYW5nZS05OTA0MgoKKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikKKiBTdGF0 dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIyMjIFVzZSBjYXNlCgpBIHZlcnkgY29tbW9uIHBhdHRlcm4gaW4gUnVieSwg ZXNwZWNpYWxseSBpbiB0ZXN0aW5nIGlzIHRvIHNhdmUgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0 ZSwgc2V0IGEgbmV3IHZhbHVlLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBvbGQgdmFsdWUgaW4gYW4g YGVuc3VyZWAgY2xhdXNlLgoKZS5nLiBpbiB1bml0IHRlc3RzCgpgYGBydWJ5CmRlZiB0ZXN0X3Nv bWV0aGluZ193aGVuX2VuYWJsZWQKICBlbmFibGVkX3dhcywgU29tZUxpYnJhcnkuZW5hYmxlZCA9 IFNvbWVMaWJyYXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3QgdGhpbmdzCmVuc3VyZQogIFNvbWVM aWJyYXJ5LmVuYWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBgCgpPciBzb21ldGltZSBpbiBhY3R1 YWwgQVBJczoKCmBgYHJ1YnkKZGVmIHdpdGhfc29tZXRoaW5nX2VuYWJsZWQKICBlbmFibGVkX3dh cyA9IEBlbmFibGVkCiAgQGVuYWJsZWQgPSB0cnVlCiAgeWllbGQKZW5zdXJlCiAgQGVuYWJsZWQg PSBlbmFibGVkX3dhcwplbmQKYGBgCgpUaGVyZSBpcyBubyBpbmhlcmVudCBwcm9ibGVtIHdpdGgg dGhpcyBwYXR0ZXJuLCBidXQgaXQgY2FuIGJlIGVhc3kgdG8gbWFrZSBhIG1pc3Rha2UsIGZvciBp bnN0YW5jZSB0aGUgdW5pdCB0ZXN0IGV4YW1wbGU6CgpgYGBydWJ5CmRlZiB0ZXN0X3NvbWV0aGlu Z193aGVuX2VuYWJsZWQKICBzb21lX2NhbGxfdGhhdF9tYXlfcmFpc2UKICBlbmFibGVkX3dhcywg U29tZUxpYnJhcnkuZW5hYmxlZCA9IFNvbWVMaWJyYXJ5LmVuYWJsZWQsIHRydWUKICAjIHRlc3Qg dGhpbmdzCmVuc3VyZQogIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBlbmFibGVkX3dhcwplbmQKYGBg CgpJbiB0aGUgYWJvdmUgaWYgYHNvbWVfY2FsbF90aGF0X21heV9yYWlzZWAgYWN0dWFsbHkgcmFp c2VzLCBgU29tZUxpYnJhcnkuZW5hYmxlZGAgaXMgc2V0IGJhY2sgdG8gYG5pbGAgcmF0aGVyIHRo YW4gaXRzIG9yaWdpbmFsIHZhbHVlLiBJJ3ZlIHNlZW4gdGhpcyBtaXN0YWtlIHF1aXRlIGZyZXF1 ZW50bHkuCgojIyMgUHJvcG9zYWwKCkkgdGhpbmsgaXQgd291bGQgYmUgdmVyeSB1c2VmdWwgdG8g aGF2ZSBhIG1ldGhvZCBvbiBPYmplY3QgdG8gaW1wbGVtZW50IHRoaXMgcGF0dGVybiBpbiBhIGNv cnJlY3QgYW5kIGVhc3kgdG8gdXNlIHdheS4gVGhlIG5haXZlIFJ1YnkgaW1wbGVtZW50YXRpb24g d291bGQgYmU6CgpgYGBydWJ5CmNsYXNzIE9iamVjdAogIGRlZiB3aXRoKCoqYXR0cmlidXRlcykK ICAgIG9sZF92YWx1ZXMgPSB7fQogICAgYXR0cmlidXRlcy5lYWNoX2tleSBkbyB8a2V5fAogICAg ICBvbGRfdmFsdWVzW2tleV0gPSBwdWJsaWNfc2VuZChrZXkpCiAgICBlbmQKICAgIGJlZ2luCiAg ICAgIGF0dHJpYnV0ZXMuZWFjaCBkbyB8a2V5LCB2YWx1ZXwKICAgICAgICBwdWJsaWNfc2VuZCgi I3trZXl9PSIsIHZhbHVlKQogICAgICBlbmQKICAgICAgeWllbGQKICAgIGVuc3VyZQogICAgICBv bGRfdmFsdWVzLmVhY2ggZG8gfGtleSwgb2xkX3ZhbHVlfAogICAgICAgIHB1YmxpY19zZW5kKCIj e2tleX09Iiwgb2xkX3ZhbHVlKQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKYGBgCgpOQjog YHB1YmxpY19zZW5kYCBpcyB1c2VkIGJlY2F1c2UgSSBkb24ndCB0aGluayBzdWNoIG1ldGhvZCBz aG91bGQgYmUgdXNhYmxlIGlmIHRoZSBhY2Nlc3NvcnMgYXJlIHByaXZhdGUuCgpXaXRoIHVzYWdl OgoKYGBgcnVieQpkZWYgdGVzdF9zb21ldGhpbmdfd2hlbl9lbmFibGVkCiAgU29tZUxpYnJhcnku d2l0aChlbmFibGVkOiB0cnVlKSBkbwogICAgIyB0ZXN0IHRoaW5ncwogIGVuZAplbmQKYGBgCgpg YGBydWJ5CkdDLndpdGgobWVhc3VyZV90b3RhbF90aW1lOiB0cnVlLCBhdXRvX2NvbXBhY3Q6IGZh bHNlKSBkbwogICMgZG8gc29tZXRoaW5nCmVuZApgYGAKCiMjIyBBbHRlcm5hdGUgbmFtZXMgYW5k IHNpZ25hdHVyZXMKCklmIGAjd2l0aGAgaXNuJ3QgZ29vZCwgSSBjYW4gYWxzbyB0aGluayBvZjoK CiAgLSBgT2JqZWN0I3NldGAKICAtIGBPYmplY3QjYXBwbHlgCgpCdXQgdGhlIGB3aXRoX2AgcHJl Zml4IGlzIGJ5IGZhciB0aGUgbW9zdCB1c2VkIG9uZSB3aGVuIGltcGxlbWVudGluZyBtZXRob2Rz IHRoYXQgZm9sbG93IHRoaXMgcGF0dGVybi4KCkFsc28gaWYgYWNjZXB0aW5nIGEgSGFzaCBpcyBk aW1tZWQgdG9vIG11Y2gsIGFsdGVybmF0aXZlIHNpZ25hdHVyZXMgY291bGQgYmU6CgogIC0gYE9i amVjdCNzZXQoYXR0cl9uYW1lLCB2YWx1ZSlgCiAgLSBgT2JqZWN0I3NldChhdHRyMSwgdmFsdWUx LCBbYXR0cjIsIHZhbHVlMl0sIC4uLilgCgoKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9y Zz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJp bi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=