Class: Testjour::QueueServer

Inherits:
Object
  • Object
show all
Defined in:
lib/testjour/queue_server.rb

Defined Under Namespace

Classes: NoWorkUnitsAvailableError, NoWorkUnitsRemainingError, ResultOverdueError

Constant Summary collapse

TIMEOUT_IN_SECONDS =
60

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeQueueServer

Returns a new instance of QueueServer.



20
21
22
# File 'lib/testjour/queue_server.rb', line 20

def initialize
  reset
end

Class Method Details

.stopObject



16
17
18
# File 'lib/testjour/queue_server.rb', line 16

def self.stop
  DRb.stop_service
end

.with_server {|server| ... } ⇒ Object

Yields:

  • (server)


10
11
12
13
14
# File 'lib/testjour/queue_server.rb', line 10

def self.with_server
  server = new
  DRb.start_service(nil, server)
  yield server
end

Instance Method Details

#done_with_workObject



29
30
31
# File 'lib/testjour/queue_server.rb', line 29

def done_with_work
  @done_with_work = true
end

#resetObject



24
25
26
27
# File 'lib/testjour/queue_server.rb', line 24

def reset
  @work_queue   = Queue.new
  @result_queue = Queue.new
end

#take_resultObject



33
34
35
36
37
# File 'lib/testjour/queue_server.rb', line 33

def take_result
  Timeout.timeout(TIMEOUT_IN_SECONDS, ResultOverdueError) do
    @result_queue.pop
  end
end

#take_workObject



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/testjour/queue_server.rb', line 39

def take_work
  raise NoWorkUnitsRemainingError if @done_with_work

  @work_queue.pop(true)
rescue Object => ex
  if ex.message == "queue empty"
    raise NoWorkUnitsAvailableError
  else
    raise
  end
end

#write_result(uri, dot, message = nil, backtrace = []) ⇒ Object



51
52
53
54
# File 'lib/testjour/queue_server.rb', line 51

def write_result(uri, dot, message = nil, backtrace = [])
  @result_queue.push [uri, dot, message.to_s, backtrace.join("\n")]
  nil
end

#write_work(work_unit) ⇒ Object



56
57
58
59
# File 'lib/testjour/queue_server.rb', line 56

def write_work(work_unit)
  @work_queue.push work_unit
  nil
end