Skip to content

Commit a75aacb

Browse files
landongrindheimbegedin
authored andcommitted
Remove JaResource from PreviewController (#1061)
1 parent 455b8f2 commit a75aacb

File tree

4 files changed

+20
-21
lines changed

4 files changed

+20
-21
lines changed

lib/code_corps/policy/policy.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ defmodule CodeCorps.Policy do
4949
%OrganizationGithubAppInstallation{} = organization_github_app_installation, %{}),
5050
do: Policy.OrganizationGithubAppInstallation.delete?(user, organization_github_app_installation)
5151
defp can?(%User{} = user, :create, %OrganizationGithubAppInstallation{}, %{} = params), do: Policy.OrganizationGithubAppInstallation.create?(user, params)
52+
defp can?(%User{} = current_user, :create, %Preview{}, %{} = params), do: Policy.Preview.create?(current_user, params)
5253
defp can?(%User{} = current_user, :create, %ProjectCategory{}, %{} = params), do: Policy.ProjectCategory.create?(current_user, params)
5354
defp can?(%User{} = current_user, :delete, %ProjectCategory{} = project_category, %{}), do: Policy.ProjectCategory.delete?(current_user, project_category)
5455
defp can?(%User{} = current_user, :create, %ProjectGithubRepo{}, %{} = params), do: Policy.ProjectGithubRepo.create?(current_user, params)
@@ -105,8 +106,6 @@ defmodule CodeCorps.Policy do
105106

106107
def can?(%User{} = user, :create, %Changeset{data: %GithubAppInstallation{}} = changeset), do: Policy.GithubAppInstallation.create?(user, changeset)
107108

108-
def can?(%User{} = user, :create, %Changeset{data: %Preview{}} = changeset), do: Policy.Preview.create?(user, changeset)
109-
110109
def can?(%User{} = user, :create, Role), do: Policy.Role.create?(user)
111110
end
112111
end

lib/code_corps/policy/preview.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule CodeCorps.Policy.Preview do
22
alias CodeCorps.User
3-
alias Ecto.Changeset
43

5-
def create?(%User{} = user, %Changeset{changes: %{user_id: author_id}}), do: user.id == author_id
6-
def create?(%User{}, %Changeset{}), do: false
4+
@spec create?(User.t, map) :: boolean
5+
def create?(%User{} = user, %{"user_id" => author_id}), do: user.id == author_id
6+
def create?(%User{}, %{}), do: false
77
end
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
defmodule CodeCorpsWeb.PreviewController do
22
use CodeCorpsWeb, :controller
3-
use JaResource
43

5-
alias CodeCorps.Preview
4+
alias CodeCorps.{Preview, User}
65

7-
plug :load_and_authorize_changeset, model: Preview, only: [:create]
8-
plug JaResource
6+
action_fallback CodeCorpsWeb.FallbackController
7+
plug CodeCorpsWeb.Plug.DataToAttributes
8+
plug CodeCorpsWeb.Plug.IdsToIntegers
99

10-
@spec model :: module
11-
def model, do: CodeCorps.Preview
12-
13-
def handle_create(_conn, attributes) do
14-
Preview.create_changeset(%Preview{}, attributes)
10+
@spec create(Plug.Conn.t, map) :: Conn.t
11+
def create(%Conn{} = conn, %{} = params) do
12+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
13+
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %Preview{}, params),
14+
{:ok, %Preview{} = preview} <- %Preview{} |> Preview.create_changeset(params) |> Repo.insert do
15+
conn |> put_status(:created) |> render("show.json-api", data: preview)
16+
end
1517
end
1618
end

test/lib/code_corps/policy/preview_test.exs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@ defmodule CodeCorps.Policy.PreviewTest do
22
use CodeCorps.PolicyCase
33

44
import CodeCorps.Policy.Preview, only: [create?: 2]
5-
import CodeCorps.Preview, only: [create_changeset: 2]
6-
7-
alias CodeCorps.Preview
85

96
describe "create?" do
107
test "returns true if user is creating their own record" do
118
user = insert(:user)
12-
changeset = %Preview{} |> create_changeset(%{markdown: "markdown", user_id: user.id})
13-
assert create?(user, changeset)
9+
10+
params = %{"markdown" => "markdown", "user_id" => user.id}
11+
assert create?(user, params)
1412
end
1513

1614
test "returns false if user is creating someone else's record" do
1715
[user, another_user] = insert_pair(:user)
18-
changeset = %Preview{} |> create_changeset(%{markdown: "markdown", user_id: another_user.id})
19-
refute create?(user, changeset)
16+
params = %{"markdown" => "markdown", "user_id" => another_user.id}
17+
refute create?(user, params)
2018
end
2119
end
2220
end

0 commit comments

Comments
 (0)