Revolver
========
An Elixir HTTP Client inspired by [Plug] and [Ecto].
> **WARNING:** This library is under early development. The API may change
> frequently until it reaches 1.0.
The library is currently an experiment. The goal is to create something that is
very composeable, like [Plug]. It will provide adapters for different Erlang
HTTP clients.
## Desired API (?)
```elixir
defmodule GitHub do
use Revolver.Client, otp_app: :github
end
defmodule GitHub.Repos do
import GitHub
import Revolver.Conn
@doc """
Fetches a list of repos for the give username.
"""
def list!(user) do
conn()
|> get!("/users/#{user}/repos")
end
@doc """
Create a repo for the current user (based on OAuth token)
"""
def create!(token, params \\ %{}) do
params = Map.take(params, ~w(name description homepage private has_issues
has_wiki has_downloads team_id auto_init
gitignore_template license_template)a)
conn()
|> put_req_body(params)
|> put_req_header("authorization", "Bearer " <> token)
|> post!("/user/repos")
end
end
# config/config.exs
config :github, GitHub,
adapter: Revolver.Adapters.Hackney,
host: "https://api.github.com",
headers: [
{"accept", "application/vnd.github.v3+json"},
{"content-type", "application/json"}
]
# Configure serializers for automatic encoding/decoding request/response bodies
config :revolver,
serializers: %{
"application/json" => Poison,
"application/vnd.github.v3+json" => Poison
}
conn = GitHub.Repos.list!("scrogson")
IO.inspect conn
#=> %Revolver.Conn{host: "api.github.com", port: 443, scheme: :https, ...}
conn.resp_body
#=> [%{...}, %{...}]
```
## LICENSE
See [LICENSE]
[Plug]: https://github.com/elixir-lang/plug
[Ecto]: https://github.com/elixir-ecto/ecto
[LICENSE]: https://github.com/scrogson/revolver/blob/master/LICENSE