Skip to content

Instantly share code, notes, and snippets.

@duykhoa
Forked from Integralist/web-server.rb
Created August 27, 2016 10:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save duykhoa/7579b291a3d32c90d9f5868b6ade3b72 to your computer and use it in GitHub Desktop.
Save duykhoa/7579b291a3d32c90d9f5868b6ade3b72 to your computer and use it in GitHub Desktop.
Create basic Web Server in Ruby (using WEBrick)
#!/usr/bin/env ruby
require "webrick"
=begin
WEBrick is a Ruby library that makes it easy to build an HTTP server with Ruby.
It comes with most installations of Ruby by default (it’s part of the standard library),
so you can usually create a basic web/HTTP server with only several lines of code.
The following code creates a generic WEBrick server on the local machine on port 1234,
shuts the server down if the process is interrupted (often done with Ctrl+C).
This example lets you call the URL's: "add" and "subtract" and pass through arguments to them
Example usage:
http://localhost:1234/ (this will show the specified error message)
http://localhost:1234/add?a=10&b=10
http://localhost:1234/subtract?a=10&b=9
=end
class MyNormalClass
def self.add (a, b)
a.to_i + b.to_i
end
def self.subtract (a, b)
a.to_i - b.to_i
end
end
class MyServlet < WEBrick::HTTPServlet::AbstractServlet
def do_GET (request, response)
if request.query["a"] && request.query["b"]
a = request.query["a"]
b = request.query["b"]
response.status = 200
response.content_type = "text/plain"
result = nil
case request.path
when "/add"
result = MyNormalClass.add(a, b)
when "/subtract"
result = MyNormalClass.subtract(a, b)
else
result = "No such method"
end
response.body = result.to_s + "\n"
else
response.status = 200
response.body = "You did not provide the correct parameters"
end
end
end
server = WEBrick::HTTPServer.new(:Port => 1234)
server.mount "/", MyServlet
trap("INT") {
server.shutdown
}
server.start
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment