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