class SimpleServer

Constants

LOG
WEB_ROOT

Attributes

level[R]
output[R]
server[R]

Public Class Methods

new(host='localhost', port=2345) click to toggle source
# File lib/simple_server.rb, line 14
def initialize(host='localhost', port=2345)
  @server = TCPServer.new(host, port)
  LOG.debug("Server is set up.")
end

Public Instance Methods

clean_path(path) click to toggle source
# File lib/simple_server.rb, line 19
def clean_path(path)
  clean = []

  parts = path.split("/")
  parts.each do |part|
    next if part.empty? || part == '.'
    part == '..' ? clean.pop : clean << part
  end 
  File.join(WEB_ROOT, *clean)
end
run() click to toggle source
# File lib/simple_server.rb, line 34
def run
  server_info
  begin
    loop do
      Thread.start(server.accept) do |socket|
        LOG.debug("Accepted socket: #{socket.inspect}")
        
        request = Request.parse(socket.gets)
        LOG.debug("Incoming request: #{request.inspect}")
        
        path = clean_path(request.resource)
        path = File.join(path, 'index.html') if File.directory?(path)
        LOG.debug("Requested path: #{path.inspect}")
        
        response = Response.build(path)
        socket.print response.header
        socket.print response.stream
        LOG.info(response.header)
        
        socket.close
      end
    end
  rescue Interrupt
    puts "\nExiting...Thank you for using this super awesome server."
  end
end
server_info() click to toggle source
# File lib/simple_server.rb, line 30
def server_info
  puts "#{'-' * 30}\nWelcome to the Simple Server.\nPlease use CONTROL-C to exit.\n#{'-' * 30}\n\n"
end