defmodule SoundcloudEx do use HTTPoison.Base alias SoundcloudEx.Client def get(path, client, params \\ %{}) do url_for(path, client) |> add_mandatory_params_to_url(client) |> add_params_to_url(params) |> get! |> parse_response end def post(path, client, params \\ []) do url_for(path, client) |> post!({:form, params}) |> parse_response end def url_for(path, client) do client.endpoint <> path end def add_params_to_url(url, params \\ %{}) do <> end def add_mandatory_params_to_url(url, %Client{oauth_token: nil, client_id: client_id}) do <> end def add_mandatory_params_to_url(url, %Client{oauth_token: oauth_token, client_id: nil}) do <> end defp start_query_string(params) do to_string('?' ++ URI.encode_query(params)) end def parse_response(%HTTPoison.Response{status_code: 200, body: ""}), do: nil def parse_response(%HTTPoison.Response{status_code: 200, body: body}), do: body def parse_response(%HTTPoison.Response{status_code: status_code, body: ""}), do: { status_code, nil } def parse_response(%HTTPoison.Response{status_code: status_code, body: body }), do: { status_code, body } end