# Rapidax
**TODO: Add description**
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:
1. Add rapidax to your list of dependencies in `mix.exs`:
def deps do
[{:rapidax, "~> 0.0.1"}]
end
2. Ensure rapidax is started before your application:
def application do
[applications: [:rapidax]]
end
## Documentation
This example use https://github.com/typicode/jsonplaceholder#how-to
Full example source code: https://github.com/victorlcampos/rapidax-example
# Modules
```elixir
defmodule RapidaxExample.Client do
import Rapidax.Client.Http
defstruct Rapidax.Client.Http.client_struct ++ [site: "http://jsonplaceholder.typicode.com"]
end
defmodule RapidaxExample.Resource.Post do
@resource_struct Rapidax.Resource.resource_struct ++ [name: "posts"]
defstruct @resource_struct
def resource_struct, do: @resource_struct
end
defmodule RapidaxExample.Resource.Comment do
alias RapidaxExample.Resource.Post
@resource_struct Rapidax.Resource.resource_struct ++ [name: "comments", belongs: %Post{}]
defstruct @resource_struct
def resource_struct, do: @resource_struct
end
```
# Showing a resource
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.query(%Client{}, %Post{id: "1"})
```
# Listing resources
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.query(%Client{}, %Post{})
```
# Creating a resource
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.create(%Client{}, %Post{params: [title: "foo", bar: "bar", userId: 1]})
```
# Updating a resource
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.update(%Client{use_patch: false}, %Post{id: "1", params: [id: 1, title: "foo", bar: "bar", userId: 1]})
```
# Updating a resource
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.update(%Client{use_patch: true}, %Post{id: "1", params: [title: "foo"]})
```
# Deleting a resource
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.destroy(%Client{}, %Post{id: "1"})
```
# Filtering resources
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
{:ok, body} = Rapidax.Client.Http.query(%Client{}, %Post{params: [userId: "1"]})
```
# Nested resources
```elixir
alias RapidaxExample.Client
alias RapidaxExample.Resource.Post
alias RapidaxExample.Resource.Comment
{:ok, body} = Rapidax.Client.Http.query(%Client{}, %Comment{belongs: %Post{id: "1"}})
```