Sha256: 8d10bf0a3dc393f7c277bc6fcefbf1eccbbb01e9366dec81945d58d3f4de585d
Contents?: true
Size: 1.14 KB
Versions: 82
Compression:
Stored size: 1.14 KB
Contents
# frozen_string_literal: true module ActiveSupport module ExecutionContext # :nodoc: @after_change_callbacks = [] class << self def after_change(&block) @after_change_callbacks << block end # Updates the execution context. If a block is given, it resets the provided keys to their # previous value once the block exits. def set(**options) options.symbolize_keys! keys = options.keys store = self.store previous_context = keys.zip(store.values_at(*keys)).to_h store.merge!(options) @after_change_callbacks.each(&:call) if block_given? begin yield ensure store.merge!(previous_context) @after_change_callbacks.each(&:call) end end end def []=(key, value) store[key.to_sym] = value @after_change_callbacks.each(&:call) end def to_h store.dup end def clear store.clear end private def store IsolatedExecutionState[:active_support_execution_context] ||= {} end end end end
Version data entries
82 entries across 78 versions & 11 rubygems