Module: Tablesalt::ThreadAccessor::ClassMethods

Defined in:
lib/tablesalt/thread_accessor.rb

Instance Method Summary collapse

Instance Method Details

#thread_accessor(method, thread_key, **options) ⇒ Object (private)

Defines instance methods and singleton methods to read/write a given key in Thread.current

Examples:

class SomeClass
  include Tablesalt::ThreadAccessor

  thread_accessor :current_foo, :foo, private: false
end

SomeClass.current_foo = "bar"
SomeClass.current_foo
=> "bar"

SomeClass.new.current_foo = "baz"
SomeClass.new.current_foo
=> "baz"

Thread.current[:foo]
=> "baz"

Parameters:

  • method (String, Symbol)

    The name of the writer method

  • thread_key (String, Symbol)

    The key to write to on Thread.current

  • :private (Hash)

    a customizable set of options



91
92
93
94
# File 'lib/tablesalt/thread_accessor.rb', line 91

def thread_accessor(method, thread_key, **options)
  thread_reader(method, thread_key, **options)
  thread_writer(method, thread_key, **options)
end

#thread_reader(method, thread_key, **options) ⇒ Object (private)

Defines an instance method and a singleton method to read from a given key in Thread.current

Examples:

class SomeClass
  include Tablesalt::ThreadAccessor

  thread_reader :current_foo, :foo, private: false
end

Thread.current[:foo] = "bar"
SomeClass.current_foo
=> "bar"

SomeClass.new.current_foo
=> "bar"

Parameters:

  • method (String, Symbol)

    The name of the reader method

  • thread_key (String, Symbol)

    The key to read from Thread.current

  • :private (Hash)

    a customizable set of options



29
30
31
32
33
34
35
36
37
# File 'lib/tablesalt/thread_accessor.rb', line 29

def thread_reader(method, thread_key, **options)
  define_method(method) { Thread.current[thread_key] }
  define_singleton_method(method) { Thread.current[thread_key] }

  return unless options.fetch(:private, true)

  private method
  private_class_method method
end

#thread_writer(method, thread_key, **options) ⇒ Object (private)

Defines an instance method and a singleton method to write to a given key in Thread.current

Examples:

class SomeClass
  include Tablesalt::ThreadAccessor

  thread_writer :current_foo, :foo, private: false
end

SomeClass.current_foo = "bar"

Thread.current[:foo]
=> "bar"

Parameters:

  • method (String, Symbol)

    The name of the writer method

  • thread_key (String, Symbol)

    The key to write to on Thread.current

  • :private (Hash)

    a customizable set of options



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/tablesalt/thread_accessor.rb', line 56

def thread_writer(method, thread_key, **options)
  method_name = "#{method}="

  define_method(method_name) { |value| Thread.current[thread_key] = value }
  define_singleton_method(method_name) { |value| Thread.current[thread_key] = value }

  return unless options.fetch(:private, true)

  private method_name
  private_class_method method_name
end