Skip to content

scrogson/revolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 (?)

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

About

An Elixir HTTP Client inspired by Plug and Ecto

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages