Method: ASIR::ThreadVariable::ModuleMethods#mattr_getter_thread

Defined in:
lib/asir/thread_variable.rb

#mattr_getter_thread(*names) ⇒ Object Also known as: cattr_getter_thread

Defines a class attribute getter stored in Thread.current.

Options:

:initialize -- String: expression to initialize the variable is undefined.
:default    -- String: expression to return if the variable value if undefined.
:transform  -- String: expression to transform the __val variable before returning.

Also defines clear_NAME method that undefines the thread variable.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/asir/thread_variable.rb', line 68

def mattr_getter_thread *names
  opts = Hash === names[-1] ? names.pop : EMPTY_HASH

  initialize = opts[:initialize]
  initialize = "||= [ #{initialize} ]" if initialize

  default = opts[:default]
  default = "__val ||= [ #{default} ]" if default

  transform = opts[:transform]
  transform = "__val = (#{transform})" if transform

  names.each do | name |
    instance_eval(expr = <<"END", __FILE__, __LINE__)
def self.clear_#{name}
  Thread.current[:'#{self.name}.#{name}'] = nil
  self
end

def self.#{name}
  __val = Thread.current[:'#{self.name}.#{name}'] #{initialize}
  #{default}
  __val &&= __val.first
  #{transform}
  __val
end
END
    # $stderr.puts "#{expr}"
  end
end