defmodule Noizu.Github.Api.Issues do
require Noizu.Github
import Noizu.Github
def create(issue, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = issue
api_call(:post, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def delete(issue, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues/#{issue}"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:delete, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def update(issue_number, update, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues/#{issue_number}"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = update
api_call(:patch, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def get(issue_number, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues/#{issue_number}"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:get, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def lock(issue_number, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues/#{issue_number}/lock"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:put, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def unlock(issue_number, options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues/#{issue_number}/lock"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:delete, base_url <> query_params, body, Noizu.Github.Issue, options)
end
def search(search, options \\ nil)
def search("", options), do: list(options)
def search(search, options) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/search/issues?q=is:issue%20repo:#{owner}/#{repo}&20#{search}"
state = get_field(:state, options, nil)
query_options = [state]
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:get, base_url <> query_params, body, Noizu.Github.Issues, options)
end
def list(options \\ nil) do
owner = repo_owner(options)
repo = repo_name(options)
base_url = github_base() <> "/repos/#{owner}/#{repo}/issues"
state = get_field(:state, options, nil)
query_options = [state]
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:get, base_url <> query_params, body, Noizu.Github.Issues, options)
end
def user_issues(options \\ nil) do
base_url = github_base() <> "/repos/user/issues"
query_options = []
|> Enum.filter(&(&1))
query_params = (unless query_options == [] do
"?" <> Enum.join(query_options, "&")
else
""
end)
body = %{}
api_call(:get, base_url <> query_params, body, Noizu.Github.Issues, options)
end
end