Skip to content

Commit

Permalink
General cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
begedin committed Oct 3, 2017
1 parent 36794f3 commit d47828e
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
16 changes: 12 additions & 4 deletions lib/code_corps/github/adapters/task.ex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule CodeCorps.GitHub.Adapters.Task do
@moduledoc """
Used to adapt a GitHub issue payload into attributes for creating or updating
a `CodeCorps.Task`.
a `CodeCorps.Task` and vice-versa.
"""

alias CodeCorps.{
Expand All @@ -18,18 +18,26 @@ defmodule CodeCorps.GitHub.Adapters.Task do
{:title, ["title"]}
]

@doc ~S"""
Converts a GitHub issue payled into a set of attributes used to update or
create a `Task` record.
"""
@spec from_issue(map) :: map
def from_issue(%{} = payload) do
payload |> MapTransformer.transform(@mapping)
end

@autogenerated_github_keys ~w(created_at number updated_at)

@doc ~S"""
Converts a `Task` into a set of attributes used to update or create an
associated GitHub issue
"""
@spec to_issue(Task.t) :: map
def to_issue(%Task{} = task) do
task
|> Map.from_struct
|> MapTransformer.transform_inverse(@mapping)
|> Map.delete("created_at")
|> Map.delete("number")
|> Map.delete("updated_at")
|> Map.drop(@autogenerated_github_keys)
end
end
15 changes: 11 additions & 4 deletions lib/code_corps/github/event/issues/changeset_builder.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ defmodule CodeCorps.GitHub.Event.Issues.ChangesetBuilder do
alias Ecto.Changeset

@doc ~S"""
Constructs a changeset for syncing a task when processing an Issues webhook
Constructs a changeset for syncing a `Task` when processing an Issues or
IssueComment webhook.
The changeset can be used to create or update a `Task`
"""
@spec build_changeset(Task.t, map, ProjectGithubRepo.t, User.t) :: Changeset.t
def build_changeset(
Expand All @@ -31,6 +34,8 @@ defmodule CodeCorps.GitHub.Event.Issues.ChangesetBuilder do
end
end

@create_attrs ~w(created_at github_issue_number markdown modified_at status title)a
@spec create_changeset(Task.t, map, ProjectGithubRepo.t, User.t) :: Changeset.t
defp create_changeset(
%Task{} = task,
%{} = issue_attrs,
Expand All @@ -41,7 +46,7 @@ defmodule CodeCorps.GitHub.Event.Issues.ChangesetBuilder do
TaskList |> Repo.get_by(project_id: project_id, inbox: true)

task
|> Changeset.cast(TaskAdapter.from_issue(issue_attrs), [:created_at, :github_issue_number, :markdown, :modified_at, :status, :title])
|> Changeset.cast(TaskAdapter.from_issue(issue_attrs), @create_attrs)
|> MarkdownRendererService.render_markdown_to_html(:markdown, :body)
|> Changeset.put_change(:created_on, "github")
|> Changeset.put_change(:github_repo_id, github_repo_id)
Expand All @@ -55,9 +60,11 @@ defmodule CodeCorps.GitHub.Event.Issues.ChangesetBuilder do
|> Changeset.assoc_constraint(:user)
end

defp update_changeset(%Task{} = task, issue_attrs) do
@update_attrs ~w(github_issue_number markdown modified_at status title)a
@spec update_changeset(Task.t, map) :: Changeset.t
defp update_changeset(%Task{} = task, %{} = issue_attrs) do
task
|> Changeset.cast(TaskAdapter.from_issue(issue_attrs), [:github_issue_number, :markdown, :modified_at, :status, :title])
|> Changeset.cast(TaskAdapter.from_issue(issue_attrs), @update_attrs)
|> MarkdownRendererService.render_markdown_to_html(:markdown, :body)
|> Changeset.put_change(:updated_on, "github")
|> Changeset.validate_required([:project_id, :title, :user_id])
Expand Down

0 comments on commit d47828e

Please sign in to comment.