View Source Francis
Nothing is stable! Try it out with caution
Simple boilerplate killer using Plug and Bandit inspired by Sinatra for Ruby
Installation
If available in Hex, the package can be installed
by adding francis to your list of dependencies in mix.exs:
def deps do
[
{:francis, "~> 0.1.0"}
]
endExample
defmodule Example do
use Francis
get("/", fn _ -> "<html>world</html>" end)
get("/:name", fn %{params: %{"name" => name}} -> "hello #{name}" end)
ws("ws", fn "ping" -> "pong" end)
unmatched(fn _ -> "not found" end)
endExample with Plugs
With the plugs option you are able to apply a list of plugs that happen between before dispatching the request.
# Example with Basic authentication enabled
defmodule Example do
import Plug.BasicAuth
use Francis, plugs: [{:basic_auth, username: "test", password: "test"}]
get("/", fn _ -> "<html>world</html>" end)
get("/:name", fn %{params: %{"name" => name}} -> "hello #{name}" end)
ws("ws", fn "ping" -> "pong" end)
unmatched(fn _ -> "not found" end)
endExample using it with Mix.install
# create a new file called server.ex
Mix.install([:francis])
defmodule Example do
use Francis
get("/", fn _ -> "<html>world</html>" end)
get("/:name", fn %{params: %{"name" => name}} -> "hello #{name}" end)
ws("ws", fn "ping" -> "pong" end)
unmatched(fn _ -> "not found" end)
def start(_, _) do
children = [{Bandit, [plug: __MODULE__]}]
Supervisor.start_link(children, strategy: :one_for_one)
end
end
Example.start(nil, nil)
Process.sleep(:infinity)
# run this file with elixir server.exCheck the folder example to check the code.