Module: Kickplan::Concurrency

Included in:
Adapter, Client
Defined in:
lib/kickplan/concurrency.rb

Defined Under Namespace

Modules: Initializer

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



5
6
7
# File 'lib/kickplan/concurrency.rb', line 5

def self.included(klass)
  klass.prepend Initializer
end

Instance Method Details

#memoize(name = caller_locations(1,1)[0].label, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/kickplan/concurrency.rb', line 9

def memoize(name = caller_locations(1,1)[0].label, &block)
  memo = memoization_variable(name)

  synchronize do
    if instance_variable_defined?(memo)
      instance_variable_get(memo)
    else
      instance_variable_set(memo, block.call)
    end
  end
end

#synchronize(&block) ⇒ Object



21
22
23
# File 'lib/kickplan/concurrency.rb', line 21

def synchronize(&block)
  @_semaphore.synchronize(&block)
end

#unset(name) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/kickplan/concurrency.rb', line 25

def unset(name)
  memo = memoization_variable(name)

  if instance_variable_defined?(memo)
    remove_instance_variable(memo)
  end
end