module FiniteMachine::Threadable::ClassMethods
Public Instance Methods
attr_threadsafe(*attrs)
click to toggle source
Defines threadsafe attributes for a class
@example
attr_threadable :errors, :events
@example
attr_threadable :errors, default: []
@return [nil]
@api public
# File lib/finite_machine/threadable.rb, line 56 def attr_threadsafe(*attrs) opts = attrs.last.is_a?(::Hash) ? attrs.pop : {} default = opts.fetch(:default, nil) attrs.flatten.each do |attr| class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def #{attr}(*args) value = args.shift if value self.#{attr} = value elsif instance_variables.include?(:@#{attr}) sync_shared { @#{attr} } elsif #{!default.nil?} sync_shared { instance_variable_set(:@#{attr}, #{default}) } end end alias_method '#{attr}?', '#{attr}' def #{attr}=(value) sync_exclusive { @#{attr} = value } end RUBY_EVAL end end