Skip to content

Instantly share code, notes, and snippets.

@iconara
Created November 16, 2012 16:55
Show Gist options
  • Save iconara/4088943 to your computer and use it in GitHub Desktop.
Save iconara/4088943 to your computer and use it in GitHub Desktop.
Webbit
class MyHandler
include Webbit::HttpHandler
def handleHttpRequest(request, response, control)
request.content("I'm a teapot").status(418).end
end
end
class Server
def run
@server = Webbit.start_server(3000) do
map %r</.+> => MyHandler.new
end
$stderr.puts("Server started: #{@server.uri}")
nil
end
def stop
@server.stop
end
end
# encoding: utf-8
require 'webbit-jars'
module Webbit
import 'org.webbitserver.WebServer'
import 'org.webbitserver.WebServers'
import 'org.webbitserver.HttpHandler'
import 'org.webbitserver.EventSourceHandler'
import 'org.webbitserver.EventSourceMessage'
import 'org.webbitserver.handler.StaticFileHandler'
import 'org.webbitserver.handler.PathMatchHandler'
module WebServer
def start!
start.get
end
end
class Config
attr_reader :server
def initialize(port)
@server = Webbit::WebServers.create_web_server(port)
end
def map(options)
options.each do |key, handler_or_path|
case key
when :static
@server.add(StaticFileHandler.new(handler_or_path))
when String
@server.add(key, handler_or_path)
when Regexp
@server.add(PathMatchHandler.new(to_java_regex(key), handler_or_path))
else
raise ArgumentError, "Unknown mapping: #{key} => #{handler_or_path}"
end
end
end
def to_java_regex(regex)
java.util.regex.Pattern.compile(regex.to_s)
end
end
def self.server(port, &block)
config = Config.new(port)
config.instance_eval(&block)
config.server
end
def self.start_server(port, &block)
s = server(port, &block)
s.start.get
s
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment