Module: Synchronizable
- Defined in:
- lib/synchronizable.rb,
lib/synchronizable/version.rb
Overview
Synchronizable is intended to be injected into objects via Object#extend. After Object#extend(Synchronizable) is performed, the object’s original methods will become synchronized via a per-instance lock.
Constant Summary collapse
- IGNORABLE_METHOD_OWNERS =
[Object, Kernel, BasicObject]
- VERSION =
"0.0.4"
Class Method Summary collapse
Class Method Details
.extended(obj) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/synchronizable.rb', line 10 def self.extended(obj) # immediately create object-level lock obj.send(:__lock) # redefine all user-defined methods to utilize lock obj.methods.each do |m| original_method = obj.method(m) next if IGNORABLE_METHOD_OWNERS.include?(original_method.owner) obj.define_singleton_method(m) do |*args, &block| __lock.synchronize do original_method.call(*args, &block) end end end # define synchronize method that executes a block # protected with the internal instance lock obj.define_singleton_method(:synchronize) do |&block| __lock.synchronize(&block) end end |