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 |