README.md

Spirit
======

n. a microframework for web development.

## Description

We are big fans of [cuba] for `ruby` so we wanted to contribute to `elixir`
community with a similar microframework.

The intention of this project is to learn how `elixir` works and create a
framework for our upcoming projects.

We know there are many frameworks like [phoenix], [clint], [sugar] and others
which we will be watching to learn and contribute but we still want to build
a new one. It will teach us a lot!

## Installation

Add `:spirit` to deps

```elixir
defp deps do
  [
    { :spirit, "~> 0.0.1" }
  ]
end
```

And run `mix do deps.get, deps.compile`

## Usage

Here's a simple application:

```elixir
# cat lib/sample_app.ex

defmodule SampleApp do
  use Spirit

  get "/hello" do
    send_resp(conn, 200, "<h1>Hello World!</h1>")
  end

  match _ do
    send_resp(conn, 404, "Not found :/")
  end
end
```

And the config file

```elixir
# cat config/config.exs

use Mix.Config

config :spirit, app: SampleApp
```

To run it, just do `mix server` and start browsing your application.

> Check [spirit-example] to see the full example and step-by-step guide.

## Composition

You can compose as many Spirit applications as you want using `forward`.
This is a recommended practice when you have nested routes or want to group
routes based on a criterion.

```elixir
defmodule Users do
  use Spirit

  get "/" do
    send_resp(conn, 200, "Users index")
  end

  get "/:id" do
    # Show the User with `id`
  end

  post "/" do
    # Create a new user
  end

  match _ do
    send_resp(conn, 404, "Not found")
  end
end

defmodule MainApp do
  use Spirit

  get "/hi/:name" do
    send_resp(conn, 200, "<h1>hello #{name}!</h1>")
  end

  forward "/users", to: Users

  get "/hello/*_rest" do
    send_resp(conn, 200, "matches all routes starting with /hello")
  end

  match _ do
    send_resp(conn, 404, "Not found")
  end
end
```


[cuba]: https://github.com/soveran/cuba
[clint]: https://github.com/lpil/clint
[sugar]: http://sugar-framework.github.io
[phoenix]: http://phoenixframework.org
[spirit-example]: https://github.com/citrusbyte/spirit-example