class RSpecQueue::Server
Public Class Methods
new()
click to toggle source
# File lib/rspec_queue/server.rb, line 7 def initialize @server = UNIXServer.open(socket_path) end
Public Instance Methods
close()
click to toggle source
# File lib/rspec_queue/server.rb, line 60 def close @server.close FileUtils.rm socket_path end
dispatch(example_group_hash, report)
click to toggle source
# File lib/rspec_queue/server.rb, line 11 def dispatch(example_group_hash, report) example_group_keys = example_group_hash.keys while (example_group_keys.count > 0 || worker_uuids.count > 0) do begin socket = @server.accept message = socket.gets.to_s.strip case message when "REGISTER" worker_uid = generate_worker_uid register_worker(worker_uid) socket.puts worker_uid when "GET_WORK" if example_group_keys.count > 0 socket.puts example_group_keys.shift else socket.puts "SHUT_DOWN" end when "FINISH" socket.puts "GET_UUID" uuid = socket.gets.to_s.strip worker_uuids.delete(uuid) socket.puts "GET_RESULTS" results = socket.gets.to_s.strip json_results = JSON.parse(results, symbolize_names: true) examples = json_results.select { |e| e[:status] == "passed" } failed_examples = json_results.select { |e| e[:status] == "failed" } pending_examples = json_results.select { |e| e[:status] == "pending" } report.examples.push(*examples) report.failed_examples.push(*failed_examples) report.pending_examples.push(*pending_examples) else puts("unsupported: #{message}") end ensure socket.close end end end
register_worker(uid)
click to toggle source
# File lib/rspec_queue/server.rb, line 65 def register_worker(uid) worker_uuids << uid end
socket_path()
click to toggle source
# File lib/rspec_queue/server.rb, line 73 def socket_path "/tmp/rspec-queue-server-#{Process.pid}.sock" end
worker_uuids()
click to toggle source
# File lib/rspec_queue/server.rb, line 69 def worker_uuids @worker_uuids ||= [] end
Private Instance Methods
generate_worker_uid()
click to toggle source
# File lib/rspec_queue/server.rb, line 79 def generate_worker_uid @uid_index ||= 0 "#{SecureRandom.uuid}/#{Process.pid}/worker/#{@uid_index += 1}" end