Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/emancu/spirit

A microframework for web development on Elixir
https://github.com/emancu/spirit

Last synced: 3 months ago
JSON representation

A microframework for web development on Elixir

Awesome Lists containing this project

README

        

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, "

Hello World!

")
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, "

hello #{name}!

")
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