class GH::Parallel

Public: …

Attributes

parallelize[RW]

Public Instance Methods

connection() click to toggle source
# File lib/gh/parallel.rb, line 51
def connection
  @connection ||= begin
    layer = backend
    layer = layer.backend until layer.respond_to? :connection
    layer.connection
  end
end
generate_response(key, response) click to toggle source
Calls superclass method
# File lib/gh/parallel.rb, line 26
def generate_response(key, response)
  return super unless in_parallel?
  dummy = Dummy.new
  @mutex.synchronize { @queue << [dummy, key, response] }
  dummy
end
in_parallel() { || ... } click to toggle source
# File lib/gh/parallel.rb, line 33
def in_parallel
  return yield if in_parallel? or not @parallelize
  was, @in_parallel = @in_parallel, true
  result = nil
  connection.in_parallel { result = yield }
  @mutex.synchronize do
    @queue.each { |dummy, key, response| dummy.__delegate__ = backend.generate_response(key, response) }
    @queue.clear
  end
  result
ensure
  @in_parallel = was unless was.nil?
end
in_parallel?() click to toggle source
# File lib/gh/parallel.rb, line 47
def in_parallel?
  @in_parallel
end
setup(*) click to toggle source
Calls superclass method
# File lib/gh/parallel.rb, line 18
def setup(*)
  @parallelize = true if @parallelize.nil?
  @in_parallel = false
  @mutex       = Mutex.new
  @queue       = []
  super
end