Nephos Ruby Server

This is a minimal web server, based on rack and puma.
It is written in ruby. It also gives you a minimal architecture
to speed up your application bootstrap.
Features provided:
- Controllers: gives you a resource logic.
- Render: easier render content to the client.
- Router: create a robust and simple routing system, with url variables.
Features which will not be provided by nserver:
- Templating (HTML with variables, loops, ...): It already exists and it is easy to implement.
- Database orm and connector: It already exists and simple to implement too.
Start
gem install nephos
ngenerator application MyApp
cd MyApp
nserver -p 8080 -h 0.0.0.0
nserver
is an executable designed to start the server easly. It can take few arguments, all optionnal:
-p
: port to listen
-h
: host to listen (network address)
-e
: environment (default is development, can be set to production)
-d
: daemonize the process
-k
: kill daemonized process
Documentation
Guides
Theses guides will provide you knowlegde about everything you can use in the application.
Examples
Production and environment
To avoid information leaks from your application, set the environment variable
export ENVIRONMENT=production
, or run the server with -e production
parameter. When an error occurs, the backtrace will be print to the client in
the rendered page, unless the server runs in production environment.
Controller
Every routes will call a method from a controller.
To create a controller, add a ruby file to app/
, with a class inherited by Nephos::Controller
You should user ngenerator --controller NAME
to generate a new controller.
class Example < Nephos::Controller
def root
cookies["last_visit"] = Time.now
if params["index"] == "true"
return {plain: "index"}
else
return :empty
end
end
end
Rendering
To render a content to the client, you can return informations from a Controller method:
return 404
return {status: code}
return {status: code, content: "Not today"}
return {json: {status: "resource created"}, status: 201}
return {plain: "text"}
return {html: "<html><body><h1>:D</h1></body></html>"}
return {type: "image/jpeg", content: File.read("images/photo.jpg")}
return :empty
Routing
The routing (rules to execute the action the user wants), you have to write the /routes.rb
file.
If the user try to access an url not described in the file, it will automaticaly render a 404 not found.
get url: "/", controller: "MainController", method: "root"
post url: "/add", controller: "MainController", method: "add_url"
post url: "/add/:url", controller: "MainController", method: "add_url"
put url: "/rm", controller: "MainController", method: "rm_url"
put url: "/rm/:url", controller: "MainController", method: "rm_url"
resource "infos" do
get url: "/", controller: "MainController", method: "root"
get url: "/about", controller: "MainController", method: "root"
get url: "/notice", to: "MainController#notice"
end
Developers: Roadmap
TODO v0.7
- feature to change HTTP header from controller
- Documentation on architecture (UML)
- Improved documentation (Tutorial, Improved guides)
v1 requierements
- Environement, Daemons, Port, Listen Host, Routables, Arguments
- Clear architecture
- Generator readables and powerfull
- At least 80% tests coverage
- Performances benchmark
- Guide about
- Controllers
- Routing
- Api Creation
- Database creation
- Web HTML with templating
- Clear documentation on the features using regexp, options, ...
Gitlab Continuous Integration:

Github version

Released version on ruby-gems

Code Quality

Nephos gem version
