Sha256: 01333881e3c552b8bb3f3d011cc38ffc1d2dca63483fff972314785c6584000c

Contents?: true

Size: 1.11 KB

Versions: 20

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

class Object
  # Set and restore public attributes around a block.
  #
  #   client.timeout # => 5
  #   client.with(timeout: 1) do
  #     client.timeout # => 1
  #   end
  #   client.timeout # => 5
  #
  # 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.
  def with(**attributes)
    old_values = {}
    begin
      attributes.each do |key, value|
        old_values[key] = public_send(key)
        public_send("#{key}=", value)
      end
      yield
    ensure
      old_values.each do |key, old_value|
        public_send("#{key}=", old_value)
      end
    end
  end
end

# #with isn't usable on immediates, so we might as well undefine the
# method in common immediate classes to avoid potential confusion.
[NilClass, TrueClass, FalseClass, Integer, Float, Symbol].each do |klass|
  klass.undef_method(:with)
end

Version data entries

20 entries across 20 versions & 6 rubygems

Version Path
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/core_ext/object/with.rb
activesupport-7.1.5.1 lib/active_support/core_ext/object/with.rb
activesupport-7.1.5 lib/active_support/core_ext/object/with.rb
activesupport-7.1.4.2 lib/active_support/core_ext/object/with.rb
activesupport-7.1.4.1 lib/active_support/core_ext/object/with.rb
activesupport-7.1.4 lib/active_support/core_ext/object/with.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/core_ext/object/with.rb
katalyst-govuk-formbuilder-1.9.2 vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.3.4/lib/active_support/core_ext/object/with.rb
tinymce-rails-7.1.2 vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.3.4/lib/active_support/core_ext/object/with.rb
activesupport-7.1.3.4 lib/active_support/core_ext/object/with.rb
activesupport-7.1.3.2 lib/active_support/core_ext/object/with.rb
activesupport-7.1.3.1 lib/active_support/core_ext/object/with.rb
mlh-rubocop-config-1.0.3 vendor/bundle/ruby/3.2.0/gems/activesupport-7.1.3/lib/active_support/core_ext/object/with.rb
activesupport-7.1.3 lib/active_support/core_ext/object/with.rb
activesupport-7.1.2 lib/active_support/core_ext/object/with.rb
activesupport-7.1.1 lib/active_support/core_ext/object/with.rb
activesupport-7.1.0 lib/active_support/core_ext/object/with.rb
activesupport-7.1.0.rc2 lib/active_support/core_ext/object/with.rb
activesupport-7.1.0.rc1 lib/active_support/core_ext/object/with.rb
activesupport-7.1.0.beta1 lib/active_support/core_ext/object/with.rb