@@ -6,7 +6,11 @@ defmodule CodeCorps.Helpers.Policy do
66
77 import Ecto.Query
88
9- alias CodeCorps . { Organization , OrganizationMembership , Project , Repo , StripeConnectAccount , User }
9+ alias CodeCorps . {
10+ Organization , OrganizationMembership ,
11+ Project , Repo , StripeConnectAccount ,
12+ TaskSkill , Task , User , UserTask
13+ }
1014 alias Ecto.Changeset
1115
1216 @ doc """
@@ -15,6 +19,7 @@ defmodule CodeCorps.Helpers.Policy do
1519
1620 Returns `CodeCorps.OrganizationMembership`
1721 """
22+ @ spec get_membership ( nil | Changeset . t | Project . t | Organization . t | StripeConnectAccount . t , User . t ) :: nil | OrganizationMembership . t
1823 def get_membership ( nil , % User { } ) , do: nil
1924 def get_membership ( % Changeset { changes: % { organization_id: organization_id } } , % User { id: user_id } ) , do: do_get_membership ( organization_id , user_id )
2025 def get_membership ( % Project { organization_id: organization_id } , % User { id: user_id } ) , do: do_get_membership ( organization_id , user_id )
@@ -31,6 +36,7 @@ defmodule CodeCorps.Helpers.Policy do
3136
3237 Returns `CodeCorps.Project`
3338 """
39+ @ spec get_project ( struct | Changeset . t | any ) :: Project . t
3440 def get_project ( % { project_id: project_id } ) , do: Project |> Repo . get ( project_id )
3541 def get_project ( % Changeset { changes: % { project_id: project_id } } ) , do: Project |> Repo . get ( project_id )
3642 def get_project ( _ ) , do: nil
@@ -40,25 +46,45 @@ defmodule CodeCorps.Helpers.Policy do
4046
4147 Returns `:string`
4248 """
49+ @ spec get_role ( nil | OrganizationMembership . t | Changeset . t ) :: String . t
4350 def get_role ( nil ) , do: nil
4451 def get_role ( % OrganizationMembership { role: role } ) , do: role
4552 def get_role ( % Changeset { } = changeset ) , do: changeset |> Changeset . get_field ( :role )
4653
4754 @ doc """
4855 Determines if provided string is equal to "owner"
4956 """
57+ @ spec owner? ( String . t ) :: boolean
5058 def owner? ( "owner" ) , do: true
5159 def owner? ( _ ) , do: false
5260
5361 @ doc """
5462 Determines if provided string is equal to one of `["admin", "owner"]`
5563 """
64+ @ spec admin_or_higher? ( String . t ) :: boolean
5665 def admin_or_higher? ( role ) when role in [ "admin" , "owner" ] , do: true
5766 def admin_or_higher? ( _ ) , do: false
5867
5968 @ doc """
6069 Determines if provided string is equal to one of `["contributor", "admin", "owner"]`
6170 """
71+ @ spec contributor_or_higher? ( String . t ) :: boolean
6272 def contributor_or_higher? ( role ) when role in [ "contributor" , "admin" , "owner" ] , do: true
6373 def contributor_or_higher? ( _ ) , do: false
74+
75+ @ doc """
76+ Retrieves task from associated record
77+ """
78+ @ spec get_task ( Changeset . t | TaskSkill . t | UserTask . t ) :: Task . t
79+ def get_task ( % TaskSkill { task_id: task_id } ) , do: Repo . get ( Task , task_id )
80+ def get_task ( % UserTask { task_id: task_id } ) , do: Repo . get ( Task , task_id )
81+ def get_task ( % Changeset { changes: % { task_id: task_id } } ) , do: Repo . get ( Task , task_id )
82+
83+ @ doc """
84+ Determines if the provided task was authored by the provided user
85+ """
86+ @ spec task_authored_by? ( Task . t , User . t ) :: boolean
87+ def task_authored_by? ( % Task { user_id: author_id } , % User { id: user_id } ) , do: user_id == author_id
88+
89+
6490end
0 commit comments