instance method
with
Ruby on Rails 8.0.4
Since v7.1.6Signature
with(**attributes)
Set and restore public attributes around a block.
client.timeout # => 5 client.with(timeout: 1) do |c| c.timeout # => 1 end client.timeout # => 5
The receiver is yielded to the provided block.
This method is a shorthand for the common begin/ensure pattern:
old_value = object.attribute begin object.attribute = new_value # do things ensure object.attribute = old_value end
It can be used on any object as long as both the reader and writer methods are public.
Parameters
-
attributeskeyrest
Source
# File activesupport/lib/active_support/core_ext/object/with.rb, line 26
def with(**attributes)
old_values = {}
begin
attributes.each do |key, value|
old_values[key] = public_send(key)
public_send("#{key}=", value)
end
yield self
ensure
old_values.each do |key, old_value|
public_send("#{key}=", old_value)
end
end
end
Defined in activesupport/lib/active_support/core_ext/object/with.rb line 26
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in Object