Module: FiniteMachine::Threadable::ClassMethods
- Includes:
- InstanceMethods
- Defined in:
- lib/finite_machine/threadable.rb
Instance Method Summary collapse
-
#attr_threadsafe(*attrs) ⇒ nil
Defines threadsafe attributes for a class.
Methods included from InstanceMethods
Instance Method Details
#attr_threadsafe(*attrs) ⇒ nil
Defines threadsafe attributes for a class
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 |