Sha256: 7a64173feb1ffd0e4263826b6f10f8514a01009c2e3f5ac378b7c8dd323bb081

Contents?: true

Size: 1 KB

Versions: 2

Compression:

Stored size: 1 KB

Contents

begin
  require "mongo/connection"
rescue LoadError => error
  raise "Missing EM-Synchrony dependency: gem install mongo"
end

# monkey-patch Mongo to use em-synchrony's socket and thread classs
old_verbose = $VERBOSE
begin
  $VERBOSE = nil
  class Mongo::Connection
    TCPSocket = ::EventMachine::Synchrony::TCPSocket
    Mutex = ::EventMachine::Synchrony::Thread::Mutex
    ConditionVariable = ::EventMachine::Synchrony::Thread::ConditionVariable
  end

  class Mongo::Pool
    TCPSocket = ::EventMachine::Synchrony::TCPSocket
    Mutex = ::EventMachine::Synchrony::Thread::Mutex
    ConditionVariable = ::EventMachine::Synchrony::Thread::ConditionVariable
  end

  class EventMachine::Synchrony::MongoTimeoutHandler
    def self.timeout(op_timeout, ex_class, &block)
      f = Fiber.current
      timer = EM::Timer.new(op_timeout) { f.resume(nil) }
      res = block.call
      timer.cancel
      res
    end
  end

  Mongo::TimeoutHandler = EventMachine::Synchrony::MongoTimeoutHandler
ensure
  $VERBOSE = old_verbose
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
em-synchrony-1.0.2 lib/em-synchrony/mongo.rb
em-synchrony-1.0.1 lib/em-synchrony/mongo.rb