Module: FiniteMachine::Threadable::ClassMethods

Includes:
InstanceMethods
Defined in:
lib/finite_machine/threadable.rb

Instance Method Summary collapse

Methods included from InstanceMethods

#sync_exclusive, #sync_shared

Instance Method Details

#attr_threadsafe(*attrs) ⇒ nil

Defines threadsafe attributes for a class

Examples:

attr_threadable :errors, :events
attr_threadable :errors, default: []

Returns:

  • (nil)


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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 "      def \#{attr}(*args)\n        value = args.shift\n        if value\n          self.\#{attr} = value\n        elsif instance_variables.include?(:@\#{attr})\n          sync_shared { @\#{attr} }\n        elsif \#{!default.nil?}\n          sync_shared { instance_variable_set(:@\#{attr}, \#{default}) }\n        end\n      end\n      alias_method '\#{attr}?', '\#{attr}'\n\n      def \#{attr}=(value)\n        sync_exclusive { @\#{attr} = value }\n      end\n    RUBY_EVAL\n  end\nend\n", __FILE__, __LINE__ + 1