@@ -5,40 +5,50 @@ defmodule CodeCorps.Policy.Helpers do
55 """
66
77 alias CodeCorps . {
8- Organization , ProjectUser ,
9- Project , ProjectUser , Repo ,
10- TaskSkill , Task , User , UserTask
8+ Organization ,
9+ ProjectUser ,
10+ Project ,
11+ ProjectUser ,
12+ Repo ,
13+ TaskSkill ,
14+ Task ,
15+ User ,
16+ UserTask
1117 }
18+
1219 alias Ecto.Changeset
1320
1421 @ doc """
1522 Determines if the provided organization or project is owned by the provided user
1623 """
17- @ spec owned_by? ( nil | Organization . t | Project . t , User . t ) :: boolean
18- def owned_by? ( % Organization { owner_id: owner_id } , % User { id: user_id } ) ,
19- do: owner_id == user_id
24+ @ spec owned_by? ( nil | Organization . t ( ) | Project . t ( ) , User . t ( ) ) :: boolean
25+ def owned_by? ( % Organization { owner_id: owner_id } , % User { id: user_id } ) , do: owner_id == user_id
26+
2027 def owned_by? ( % Project { } = project , % User { } = user ) ,
2128 do: project |> get_membership ( user ) |> get_role |> owner?
29+
2230 def owned_by? ( nil , _ ) , do: false
2331
2432 @ doc """
2533 Determines if the provided project is being administered by the provided User
2634
2735 Returns `true` if the user is an admin or higher member of the project
2836 """
29- @ spec administered_by? ( nil | Project . t , User . t ) :: boolean
37+ @ spec administered_by? ( nil | Project . t ( ) , User . t ( ) ) :: boolean
3038 def administered_by? ( % Project { } = project , % User { } = user ) ,
3139 do: project |> get_membership ( user ) |> get_role |> admin_or_higher?
40+
3241 def administered_by? ( nil , _ ) , do: false
3342
3443 @ doc """
3544 Determines if the provided project is being contributed to by the provided User
3645
3746 Returns `true` if the user is a contributor or higher member of the project
3847 """
39- @ spec contributed_by? ( nil | Project . t , User . t ) :: boolean
48+ @ spec contributed_by? ( nil | Project . t ( ) , User . t ( ) ) :: boolean
4049 def contributed_by? ( % Project { } = project , % User { } = user ) ,
4150 do: project |> get_membership ( user ) |> get_role |> contributor_or_higher?
51+
4252 def contributed_by? ( nil , _ ) , do: false
4353
4454 @ doc """
@@ -47,10 +57,13 @@ defmodule CodeCorps.Policy.Helpers do
4757
4858 Returns `CodeCorps.Organization`
4959 """
50- @ spec get_organization ( struct | Changeset . t | any ) :: Organization . t
60+ @ spec get_organization ( struct | Changeset . t ( ) | any ) :: Organization . t ( )
5161 def get_organization ( % { "organization_id" => id } ) , do: Organization |> Repo . get ( id )
5262 def get_organization ( % { organization_id: id } ) , do: Organization |> Repo . get ( id )
53- def get_organization ( % Changeset { changes: % { organization_id: id } } ) , do: Organization |> Repo . get ( id )
63+
64+ def get_organization ( % Changeset { changes: % { organization_id: id } } ) ,
65+ do: Organization |> Repo . get ( id )
66+
5467 def get_organization ( _ ) , do: nil
5568
5669 @ doc """
@@ -59,7 +72,7 @@ defmodule CodeCorps.Policy.Helpers do
5972
6073 Returns `CodeCorps.Project`
6174 """
62- @ spec get_project ( struct | Changeset . t | any ) :: Project . t
75+ @ spec get_project ( struct | Changeset . t ( ) | any ) :: Project . t ( )
6376 def get_project ( % { "project_id" => id } ) , do: Project |> Repo . get ( id )
6477 def get_project ( % { project_id: id } ) , do: Project |> Repo . get ( id )
6578 def get_project ( % Changeset { changes: % { project_id: id } } ) , do: Project |> Repo . get ( id )
@@ -68,27 +81,27 @@ defmodule CodeCorps.Policy.Helpers do
6881 @ doc """
6982 Retrieves the role field from a `CodeCorps.ProjectUser` struct or an `Ecto.Changeset`
7083 """
71- @ spec get_role ( nil | ProjectUser . t | Changeset . t ) :: String . t | nil
84+ @ spec get_role ( nil | ProjectUser . t ( ) | Changeset . t ( ) ) :: String . t ( ) | nil
7285 def get_role ( nil ) , do: nil
7386 def get_role ( % ProjectUser { role: role } ) , do: role
7487 def get_role ( % Changeset { } = changeset ) , do: changeset |> Changeset . get_field ( :role )
7588
76- @ spec admin_or_higher? ( String . t ) :: boolean
89+ @ spec admin_or_higher? ( String . t ( ) ) :: boolean
7790 defp admin_or_higher? ( role ) when role in [ "admin" , "owner" ] , do: true
7891 defp admin_or_higher? ( _ ) , do: false
7992
80- @ spec contributor_or_higher? ( String . t ) :: boolean
93+ @ spec contributor_or_higher? ( String . t ( ) ) :: boolean
8194 defp contributor_or_higher? ( role ) when role in [ "contributor" , "admin" , "owner" ] , do: true
8295 defp contributor_or_higher? ( _ ) , do: false
8396
84- @ spec owner? ( String . t ) :: boolean
97+ @ spec owner? ( String . t ( ) ) :: boolean
8598 defp owner? ( "owner" ) , do: true
8699 defp owner? ( _ ) , do: false
87100
88101 @ doc """
89102 Retrieves task from associated record
90103 """
91- @ spec get_task ( Changeset . t | TaskSkill . t | UserTask . t | map ) :: Task . t
104+ @ spec get_task ( Changeset . t ( ) | TaskSkill . t ( ) | UserTask . t ( ) | map ) :: Task . t ( )
92105 def get_task ( % TaskSkill { task_id: task_id } ) , do: Repo . get ( Task , task_id )
93106 def get_task ( % UserTask { task_id: task_id } ) , do: Repo . get ( Task , task_id )
94107 def get_task ( % { "task_id" => task_id } ) , do: Repo . get ( Task , task_id )
@@ -97,12 +110,14 @@ defmodule CodeCorps.Policy.Helpers do
97110 @ doc """
98111 Determines if the provided task was authored by the provided user
99112 """
100- @ spec task_authored_by? ( Task . t , User . t ) :: boolean
113+ @ spec task_authored_by? ( Task . t ( ) , User . t ( ) ) :: boolean
101114 def task_authored_by? ( % Task { user_id: author_id } , % User { id: user_id } ) , do: user_id == author_id
102115
103- # Returns `CodeCorps.ProjectUser` for specified `CodeCorps.Project`
104- # and `CodeCorps.User`, or nil
105- @ spec get_membership ( Project . t , User . t ) :: nil | ProjectUser . t
106- defp get_membership ( % Project { id: project_id } , % User { id: user_id } ) ,
116+ @ doc """
117+ Returns `CodeCorps.ProjectUser` for specified `CodeCorps.Project`
118+ and `CodeCorps.User`, or nil
119+ """
120+ @ spec get_membership ( Project . t ( ) , User . t ( ) ) :: nil | ProjectUser . t ( )
121+ def get_membership ( % Project { id: project_id } , % User { id: user_id } ) ,
107122 do: ProjectUser |> Repo . get_by ( project_id: project_id , user_id: user_id )
108123end
0 commit comments