class DreddHooks::Server

The hooks worker server

Constants

EVENTS
HOST
MESSAGE_DELIMITER
PORT

Attributes

buffer[R]
error[R]
events_handler[R]
out[R]
server[R]

Public Class Methods

new(error=STDERR, out=STDOUT) click to toggle source
# File lib/dredd_hooks/server.rb, line 18
def initialize(error=STDERR, out=STDOUT)
  @error = error
  @out = out
  @server = TCPServer.new(HOST, PORT)
  @buffer = Buffer.new(MESSAGE_DELIMITER)
  @events_handler = EventsHandler.new
end

Public Instance Methods

run() click to toggle source
# File lib/dredd_hooks/server.rb, line 26
def run
  disable_buffering(out)
  loop do
    client = server.accept
    out.puts 'Dredd connected to Ruby Dredd hooks worker'
    buffer.flush!
    while (data = client.recv(10))
      buffer << data
      if buffer.any_message?
        messages = buffer.unshift_messages

        messages.each do |message|
          response = process_message(message)
          client.puts response + MESSAGE_DELIMITER
        end
      end
    end
    client.close
  end
end

Private Instance Methods

disable_buffering(file) click to toggle source

Write to a file (e.g. STDOUT) without delay

See stackoverflow.com/q/23001033 and ruby-doc.org/core-2.3.1/IO.html#method-i-sync-3D

# File lib/dredd_hooks/server.rb, line 53
def disable_buffering(file)
  file.sync = true
end
process_message(message) click to toggle source
# File lib/dredd_hooks/server.rb, line 57
def process_message(message)
  event = message['event']
  transaction = message['data']

  transaction = events_handler.handle(event, transaction)

  response(message['uuid'], event, transaction)
end
response(message_uuid, event, transaction) click to toggle source
# File lib/dredd_hooks/server.rb, line 66
def response(message_uuid, event, transaction)
  {
    uuid: message_uuid,
    event: event,
    data: transaction,
  }.to_json
end