require 'socket'
class RWServer
def initialize()
@route = {}
end
def get(arg,&block)
methodx = {String: :string_get, Regexp: :regex_get}
send (methodx[arg.class.to_s.to_sym]), arg, &block
end
def string_get(s, &block)
s.gsub!(/\:\w+/,'(\w+)')
@route[Regexp.new s] = block
end
def regex_get(r, &block)
@route[r] = block
end
# -- start of custom code
def application(params)
get '/sugar' do
'ffff'
end
get '/sweet' do
'gggg'
end
get '/hello/:name' do |name|
'Hello ' + name
end
get %r{/hello2/([\w]+)} do
'ready ' + params[:captures].first
end
end
# -- end of custom code
def start
params = {}
server = TCPServer.new('0.0.0.0', 4446)
application(params)
while (session = server.accept)
raw_request = session.gets
request = raw_request[/.[^\s]+(?= HTTP\/1\.\d)/].strip
result = nil
@route.each do |key, block|
match = request.match(key)
if match then
puts @route.inspect
args = match.captures
params[:captures] = *args
result = @route[key].call *args
break
end
end
result ||= "404: page not found"
session.print "HTTP/1.1 200/OK\rContent-type: text/plain\r\n\r\n"
session.print result
session.close
end
end
end
rws = RWServer.new
rws.start
Tested (localhost:4446) Observed
----------------------- ---------
/sugar ffff
/hello/kid Hello kid
/clouds 404: page not found
/hello2/you ready you
Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/x2EMUD6pk2o/11213