[ruby-core:109740] [Ruby master Feature#18951] Object#with to set and restore attributes around a block
From:
retro <noreply@...>
Date:
2022-08-27 15:14:59 UTC
List:
ruby-core #109740
SXNzdWUgIzE4OTUxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgcmV0cm8gKEpvc2VmIMWgaW3DoW5layku DQoNCg0KVGhlcmUgYXJlIHNpbWlsYXIgbWV0aG9kcyAoYHdpdGhfKmApIGFjcm9zcyB2YXJpb3Vz IHBvcHVsYXIgZ2Vtcy4gRm9yIGV4YW1wbGUgYEkxOG4ud2l0aF9sb2NhbGUobG9jYWxlKWAuIEJ1 dCBgV0lUSGAgaXMgYWxzbyBTUUwga2V5d29yZCBhbmQgd2FzIHJlY2VudGx5IGFkZGVkIHRvIGBB Y3RpdmVSZWNvcmRgIChodHRwczovL2dpdGh1Yi5jb20vcmFpbHMvcmFpbHMvY29tbWl0LzA5OGIw ZWI1ZGJjZjFhOTQyYzRlNzI3ZGNkYzE1MDE1MWJlYTUxYWIpLg0KDQpJIHdhcyB0aGlua2luZyBh Ym91dCBleHRlbmRpbmcgYHRhcGAuDQoNCmBgYHJ1YnkNCkkxOG4udGFwKHdpdGg6IHtsb2NhbGU6 IDplbmR9KSBkbw0KICAjDQplbmQNCmBgYA0KDQpidXQgdGhhdCBzZWVtcyB0byB2ZXJib3NlLiBP dGhlciBvcHRpb24gd291bGQgYmUgdG8gaW50cm9kdWNlIGB0YXBfd2l0aGAgbWV0aG9kLg0KDQpg YGBydWJ5DQpJMThuLnRhcF93aXRoKGxvY2FsZTogOmVuZCkgZG8NCiAgIw0KZW5kDQpgYGANCg0K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTg5NTE6 IE9iamVjdCN3aXRoIHRvIHNldCBhbmQgcmVzdG9yZSBhdHRyaWJ1dGVzIGFyb3VuZCBhIGJsb2Nr DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg5NTEjY2hhbmdlLTk4OTc2DQoN CiogQXV0aG9yOiBieXJvb3QgKEplYW4gQm91c3NpZXIpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlv cml0eTogTm9ybWFsDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoj IyMgVXNlIGNhc2UNCg0KQSB2ZXJ5IGNvbW1vbiBwYXR0ZXJuIGluIFJ1YnksIGVzcGVjaWFsbHkg aW4gdGVzdGluZyBpcyB0byBzYXZlIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsIHNldCBhIG5l dyB2YWx1ZSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgb2xkIHZhbHVlIGluIGFuIGBlbnN1cmVgIGNs YXVzZS4NCg0KZS5nLiBpbiB1bml0IHRlc3RzDQoNCmBgYHJ1YnkNCmRlZiB0ZXN0X3NvbWV0aGlu Z193aGVuX2VuYWJsZWQNCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21l TGlicmFyeS5lbmFibGVkLCB0cnVlDQogICMgdGVzdCB0aGluZ3MNCmVuc3VyZQ0KICBTb21lTGli cmFyeS5lbmFibGVkID0gZW5hYmxlZF93YXMNCmVuZA0KYGBgDQoNCk9yIHNvbWV0aW1lIGluIGFj dHVhbCBBUElzOg0KDQpgYGBydWJ5DQpkZWYgd2l0aF9zb21ldGhpbmdfZW5hYmxlZA0KICBlbmFi bGVkX3dhcyA9IEBlbmFibGVkDQogIEBlbmFibGVkID0gdHJ1ZQ0KICB5aWVsZA0KZW5zdXJlDQog IEBlbmFibGVkID0gZW5hYmxlZF93YXMNCmVuZA0KYGBgDQoNClRoZXJlIGlzIG5vIGluaGVyZW50 IHByb2JsZW0gd2l0aCB0aGlzIHBhdHRlcm4sIGJ1dCBpdCBjYW4gYmUgZWFzeSB0byBtYWtlIGEg bWlzdGFrZSwgZm9yIGluc3RhbmNlIHRoZSB1bml0IHRlc3QgZXhhbXBsZToNCg0KYGBgcnVieQ0K ZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZA0KICBzb21lX2NhbGxfdGhhdF9tYXlfcmFp c2UNCiAgZW5hYmxlZF93YXMsIFNvbWVMaWJyYXJ5LmVuYWJsZWQgPSBTb21lTGlicmFyeS5lbmFi bGVkLCB0cnVlDQogICMgdGVzdCB0aGluZ3MNCmVuc3VyZQ0KICBTb21lTGlicmFyeS5lbmFibGVk ID0gZW5hYmxlZF93YXMNCmVuZA0KYGBgDQoNCkluIHRoZSBhYm92ZSBpZiBgc29tZV9jYWxsX3Ro YXRfbWF5X3JhaXNlYCBhY3R1YWxseSByYWlzZXMsIGBTb21lTGlicmFyeS5lbmFibGVkYCBpcyBz ZXQgYmFjayB0byBgbmlsYCByYXRoZXIgdGhhbiBpdHMgb3JpZ2luYWwgdmFsdWUuIEkndmUgc2Vl biB0aGlzIG1pc3Rha2UgcXVpdGUgZnJlcXVlbnRseS4NCg0KIyMjIFByb3Bvc2FsDQoNCkkgdGhp bmsgaXQgd291bGQgYmUgdmVyeSB1c2VmdWwgdG8gaGF2ZSBhIG1ldGhvZCBvbiBPYmplY3QgdG8g aW1wbGVtZW50IHRoaXMgcGF0dGVybiBpbiBhIGNvcnJlY3QgYW5kIGVhc3kgdG8gdXNlIHdheS4g VGhlIG5haXZlIFJ1YnkgaW1wbGVtZW50YXRpb24gd291bGQgYmU6DQoNCmBgYHJ1YnkNCmNsYXNz IE9iamVjdA0KICBkZWYgd2l0aCgqKmF0dHJpYnV0ZXMpDQogICAgb2xkX3ZhbHVlcyA9IHt9DQog ICAgYXR0cmlidXRlcy5lYWNoX2tleSBkbyB8a2V5fA0KICAgICAgb2xkX3ZhbHVlc1trZXldID0g cHVibGljX3NlbmQoa2V5KQ0KICAgIGVuZA0KICAgIGJlZ2luDQogICAgICBhdHRyaWJ1dGVzLmVh Y2ggZG8gfGtleSwgdmFsdWV8DQogICAgICAgIHB1YmxpY19zZW5kKCIje2tleX09IiwgdmFsdWUp DQogICAgICBlbmQNCiAgICAgIHlpZWxkDQogICAgZW5zdXJlDQogICAgICBvbGRfdmFsdWVzLmVh Y2ggZG8gfGtleSwgb2xkX3ZhbHVlfA0KICAgICAgICBwdWJsaWNfc2VuZCgiI3trZXl9PSIsIG9s ZF92YWx1ZSkNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCk5COiBgcHVi bGljX3NlbmRgIGlzIHVzZWQgYmVjYXVzZSBJIGRvbid0IHRoaW5rIHN1Y2ggbWV0aG9kIHNob3Vs ZCBiZSB1c2FibGUgaWYgdGhlIGFjY2Vzc29ycyBhcmUgcHJpdmF0ZS4NCg0KV2l0aCB1c2FnZToN Cg0KYGBgcnVieQ0KZGVmIHRlc3Rfc29tZXRoaW5nX3doZW5fZW5hYmxlZA0KICBTb21lTGlicmFy eS53aXRoKGVuYWJsZWQ6IHRydWUpIGRvDQogICAgIyB0ZXN0IHRoaW5ncw0KICBlbmQNCmVuZA0K YGBgDQoNCmBgYHJ1YnkNCkdDLndpdGgobWVhc3VyZV90b3RhbF90aW1lOiB0cnVlLCBhdXRvX2Nv bXBhY3Q6IGZhbHNlKSBkbw0KICAjIGRvIHNvbWV0aGluZw0KZW5kDQpgYGANCg0KIyMjIEFsdGVy bmF0ZSBuYW1lcyBhbmQgc2lnbmF0dXJlcw0KDQpJZiBgI3dpdGhgIGlzbid0IGdvb2QsIEkgY2Fu IGFsc28gdGhpbmsgb2Y6DQoNCiAgLSBgT2JqZWN0I3NldGANCiAgLSBgT2JqZWN0I2FwcGx5YA0K DQpCdXQgdGhlIGB3aXRoX2AgcHJlZml4IGlzIGJ5IGZhciB0aGUgbW9zdCB1c2VkIG9uZSB3aGVu IGltcGxlbWVudGluZyBtZXRob2RzIHRoYXQgZm9sbG93IHRoaXMgcGF0dGVybi4NCg0KQWxzbyBp ZiBhY2NlcHRpbmcgYSBIYXNoIGlzIGRpbW1lZCB0b28gbXVjaCwgYWx0ZXJuYXRpdmUgc2lnbmF0 dXJlcyBjb3VsZCBiZToNCg0KICAtIGBPYmplY3Qjc2V0KGF0dHJfbmFtZSwgdmFsdWUpYA0KICAt IGBPYmplY3Qjc2V0KGF0dHIxLCB2YWx1ZTEsIFthdHRyMiwgdmFsdWUyXSwgLi4uKWANCg0KDQoN Cg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KClVuc3Vic2NyaWJlOiA8bWFp bHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4K PGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1Ynkt Y29yZT4K