Nephos Ruby Server

GitHub version

Gem Version

Code Climate

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 creation.

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 wich will not be provided by nephos-server:

  • Templating (HTML with variables, loops, ...): It already exists and they are easy to implement.
  • Database orm and connector: It already exists and simple to implement

Start

gem install nephos-server # download the server
nephos-generator application MyApp # generate the application
cd MyApp # go in
nephos-server -p 8080 -h 0.0.0.0 # start the server. port is not required, neither host

nephos-server is a binary 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)

Documentation

Guides

Theses guides will provide you knowlegde about everything you can use in the application.

Examples

Production

To avoid information leaks from your application, set the environment variable export ENVIRONMENT=production. It will disable ruby error messages when an error occurs in the controller.

Controller

To create a controller, add a ruby file to app/, with a class inherited by Nephos::Controller The basic code of a controller can be generated via nephos-generator controller NAME.

class Example < Nephos::Controller
  def root
    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 to an url not described in the file, it will automaticaly render a 404 not found.

get url: "/", controller: "MainController", method: "root"       # /
get url: "/add", controller: "MainController", method: "add_url" # /add
get url: "/add/:url", controller: "MainController", method: "add_url" # /add with parameter :url
get url: "/rm", controller: "MainController", method: "rm_url"   # /rm
get url: "/rm/:url", controller: "MainController", method: "rm_url"   # /rm with parameter :url
resource "infos" do
  get url: "/", controller: "MainController", method: "root" # generate /infos
  get url: "/abbout", controller: "MainController", method: "root" # generate /infos/about
end

Developers: Roadmap

TODO v0.4

  • improve generator with application tests
  • improve executables (tests, arguments)
  • improve documentation (bin)

TODO v0.5

  • executables with version
  • cookies, ...
  • usage of rack parsers (Rack::Request.new(env) etc.)

TODO v0.6

  • startable as daemon
  • hooks for controller

v1 requierements

  • Environement, Daemons, Port, Listen Host, Routables, Arguments
  • Generator readables and powerfull
  • At least 80% tests coverage
  • Guide about
    • Controllers
    • Routing
    • Api Creation
    • Database creation
    • Web HTML with templating