Sha256: 9b81606d17e9043e1b7426e3aa7bdac4b713292fea595ab58192899282c9ff33

Contents?: true

Size: 744 Bytes

Versions: 4

Compression:

Stored size: 744 Bytes

Contents

module Msgr
  class TestPool
    def initialize(*)
      @mutex = Mutex.new
      @queue = []
    end

    def post(*args, &block)
      @mutex.synchronize { @queue << [block, args] }
    end

    def run(timeout: 5, count: 1)
      Timeout.timeout(timeout) do
        while count > 0
          @mutex.synchronize do
            if (item = @queue.pop)
              item[0].call(*item[1])

              count -= 1
            end
          end
        end
      end
    end

    def reset
      @queue.clear
    end

    class << self
      def new(*args)
        @instance ||= super(*args)
      end

      def run(*args)
        new.run(*args)
      end

      def reset
        @instance ? @instance.reset : nil
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
msgr-0.14.1.1.b111 lib/msgr/test_pool.rb
msgr-0.14.1.1.b110 lib/msgr/test_pool.rb
msgr-0.14.1 lib/msgr/test_pool.rb
msgr-0.14.0 lib/msgr/test_pool.rb