thread_mattr_writer(*syms, instance_writer: true, instance_accessor: true)
public
Defines a per-thread class attribute and creates a class and instance
writer methods to allow assignment to the attribute.
module Current
thread_mattr_writer :user
end
Current.user = "DHH"
Thread.current[:attr_Current_user]
To omit the instance writer method, pass instance_writer: false or
instance_accessor: false.
class Current
thread_mattr_writer :user, instance_writer: false
end
Current.new.user = "DHH"
# File activesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb, line 101
def thread_mattr_writer(*syms, instance_writer: true, instance_accessor: true) # :nodoc:
syms.each do |sym|
raise NameError.new("invalid attribute name: #{sym}") unless /^[_A-Za-z]\w*$/.match?(sym)
# The following generated method concatenates `object_id` because we want
# subclasses to maintain independent values.
class_eval( def self.#{sym}=(obj) @__thread_mattr_#{sym} ||= "attr_#{sym}_\#{object_id}" ::ActiveSupport::IsolatedExecutionState[@__thread_mattr_#{sym}] = obj end, __FILE__, __LINE__ + 1)
if instance_writer && instance_accessor
class_eval( def #{sym}=(obj) self.class.#{sym} = obj end, __FILE__, __LINE__ + 1)
end
end
end