GUIDES
GUIDESDOCS
GUIDES

Basic Usage

Install

  1. Create a new application
mix new my_app
  1. Add maru to your mix.exs dependencies:
defp deps do
  [ 
    {:maru, "~> 0.13"},
    {:cowboy, "~> 2.3"},

    # Optional dependency, you can also add your own json_library dependency
    # and config with `config :maru, json_library, YOUR_JSON_LIBRARY`.
    {:jason, "~> 1.0"},
  ]
end
  1. List :maru as your application dependencies: (you don't need do this for elixir ~> 1.4)
def application do
  [ applications: [:maru] ]
end

Config

config :my_app, MyAPP.Server,
  adapter: Plug.Adapters.Cowboy2,
  plug: MyAPP.API,
  scheme: :http,
  port: 8880

config :my_app,
  maru_servers: [MyAPP.Server]

Basic Server

defmodule MyAPP.Server do
  use Maru.Server, otp_app: :my_app
end

# Add MyAPP.Server to Your Supervisor Tree
defmodule MyApp.Supervisor do
  use Supervisor

  def init(_arg) do
    children = [
      MyAPP.Server
    ]

    Supervisor.init(children, strategy: :one_for_one)
  end
end

Basic Router

defmodule MyAPP.Router.Homepage do
    use MyAPP.Server

    get do
      json(conn, %{ hello: :world })
    end
  end

  defmodule MyAPP.API do
    use MyAPP.Server

    plug Plug.Parsers,
      pass: ["*/*"],
      json_decoder: Poison,
      parsers: [:urlencoded, :json, :multipart]
    
    mount MyAPP.Router.Homepage

    rescue_from :all do
      conn
      |> put_status(500)
      |> text("Server Error")
    end
  end

Run server

$ mix deps.get

$ iex -S mix
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)

17:42:17.691 [info]  Running Elixir.API with Cowboy on http://127.0.0.1:8880
iex(1)> 

$ curl 127.0.0.1:8880
{"hello":"world"}

Generate routes documents

$ MIX_ENV=dev mix maru.routes