Module: Concurrent::Dereferenceable

Included in:
Agent, Obligation, TimerTask
Defined in:
lib/concurrent/dereferenceable.rb

Instance Method Summary collapse

Instance Method Details

#set_deref_options(opts = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/concurrent/dereferenceable.rb', line 5

def set_deref_options(opts = {})
  mutex.synchronize do
    @dup_on_deref = opts[:dup_on_deref] || opts[:dup] || false
    @freeze_on_deref = opts[:freeze_on_deref] || opts[:freeze] || false
    @copy_on_deref = opts[:copy_on_deref] || opts[:copy]
    @do_nothing_on_deref = ! (@dup_on_deref || @freeze_on_deref || @copy_on_deref)
  end
end

#valueObject Also known as: deref



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/concurrent/dereferenceable.rb', line 14

def value
  return nil if @value.nil?
  return @value if @do_nothing_on_deref
  return mutex.synchronize do
    value = @value
    value = @copy_on_deref.call(value) if @copy_on_deref
    value = value.dup if @dup_on_deref
    value = value.freeze if @freeze_on_deref
    value
  end
end