From c2131a1ee9f9842af4f3236c6bc575731cbfa066 Mon Sep 17 00:00:00 2001 From: Robbie McMichael <2044464+robbiemcmichael@users.noreply.github.com> Date: Tue, 3 Dec 2019 22:26:22 +1100 Subject: [PATCH 1/5] Fix permission field in types for teams --- src/GitHub/Data/Teams.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs index 387318e0..2a6edfb6 100644 --- a/src/GitHub/Data/Teams.hs +++ b/src/GitHub/Data/Teams.hs @@ -84,7 +84,7 @@ data CreateTeam = CreateTeam , createTeamDescription :: !(Maybe Text) , createTeamRepoNames :: !(Vector (Name Repo)) -- , createTeamPrivacy :: Privacy - , createTeamPermission :: Permission + , createTeamPermission :: !Permission } deriving (Show, Data, Typeable, Eq, Ord, Generic) @@ -165,19 +165,21 @@ instance FromJSON Team where <*> o .: "organization" instance ToJSON CreateTeam where - toJSON (CreateTeam name desc repo_names {-privacy-} permissions) = + toJSON (CreateTeam name desc repo_names {-privacy-} permission) = object [ "name" .= name , "description" .= desc , "repo_names" .= repo_names {-, "privacy" .= privacy-} - , "permissions" .= permissions ] + , "permission" .= permission + ] instance ToJSON EditTeam where - toJSON (EditTeam name desc {-privacy-} permissions) = + toJSON (EditTeam name desc {-privacy-} permission) = object [ "name" .= name , "description" .= desc {-, "privacy" .= privacy-} - , "permissions" .= permissions ] + , "permission" .= permission + ] instance FromJSON TeamMembership where parseJSON = withObject "TeamMembership" $ \o -> TeamMembership From 452c1c8871f19722673cbfe1d0260d6e3cfcdd97 Mon Sep 17 00:00:00 2001 From: Robbie McMichael <2044464+robbiemcmichael@users.noreply.github.com> Date: Wed, 4 Dec 2019 00:24:29 +1100 Subject: [PATCH 2/5] Add privacy field to types for teams The privacy field was previously commented out while the privacy level of a team was part of the `ironman` API preview. This feature is now part of the official v3 API, so this commit adds support for this field. --- samples/Organizations/Teams/CreateTeamFor.hs | 2 +- samples/Teams/EditTeam.hs | 2 +- src/GitHub/Data/Teams.hs | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/Organizations/Teams/CreateTeamFor.hs b/samples/Organizations/Teams/CreateTeamFor.hs index 6004b100..ed9a0d0a 100644 --- a/samples/Organizations/Teams/CreateTeamFor.hs +++ b/samples/Organizations/Teams/CreateTeamFor.hs @@ -13,7 +13,7 @@ main = do Github.createTeamFor' (Github.OAuth token) org - (Github.CreateTeam team (Just desc) (read repos :: [String]) Github.PermissionPull) + (Github.CreateTeam team (Just desc) (read repos :: [String]) Nothing Github.PermissionPull) _ -> error "usage: CreateTeamFor <[\"repos\"]>" case result of diff --git a/samples/Teams/EditTeam.hs b/samples/Teams/EditTeam.hs index bb0a05ca..e8fc0a11 100644 --- a/samples/Teams/EditTeam.hs +++ b/samples/Teams/EditTeam.hs @@ -15,7 +15,7 @@ main = do (GitHub.OAuth $ fromString token) GitHub.editTeamR (GitHub.mkTeamId $ read team_id) - (GitHub.EditTeam (GitHub.mkTeamName $ fromString team_name) (Just $ fromString desc) GitHub.PermissionPull) + (GitHub.EditTeam (GitHub.mkTeamName $ fromString team_name) (Just $ fromString desc) Nothing GitHub.PermissionPull) _ -> error "usage: EditTeam " case result of diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs index 2a6edfb6..6eb5a8f3 100644 --- a/src/GitHub/Data/Teams.hs +++ b/src/GitHub/Data/Teams.hs @@ -83,7 +83,7 @@ data CreateTeam = CreateTeam { createTeamName :: !(Name Team) , createTeamDescription :: !(Maybe Text) , createTeamRepoNames :: !(Vector (Name Repo)) - -- , createTeamPrivacy :: Privacy + , createTeamPrivacy :: !(Maybe Privacy) , createTeamPermission :: !Permission } deriving (Show, Data, Typeable, Eq, Ord, Generic) @@ -94,7 +94,7 @@ instance Binary CreateTeam data EditTeam = EditTeam { editTeamName :: !(Name Team) , editTeamDescription :: !(Maybe Text) - -- , editTeamPrivacy :: Privacy + , editTeamPrivacy :: !(Maybe Privacy) , editTeamPermission :: !Permission } deriving (Show, Data, Typeable, Eq, Ord, Generic) @@ -165,19 +165,19 @@ instance FromJSON Team where <*> o .: "organization" instance ToJSON CreateTeam where - toJSON (CreateTeam name desc repo_names {-privacy-} permission) = + toJSON (CreateTeam name desc repo_names privacy permission) = object [ "name" .= name , "description" .= desc , "repo_names" .= repo_names - {-, "privacy" .= privacy-} + , "privacy" .= privacy , "permission" .= permission ] instance ToJSON EditTeam where - toJSON (EditTeam name desc {-privacy-} permission) = + toJSON (EditTeam name desc privacy permission) = object [ "name" .= name , "description" .= desc - {-, "privacy" .= privacy-} + , "privacy" .= privacy , "permission" .= permission ] From b2275d1fa8801dbc77325b493ab9d6e68a3913dd Mon Sep 17 00:00:00 2001 From: Robbie McMichael <2044464+robbiemcmichael@users.noreply.github.com> Date: Wed, 4 Dec 2019 00:37:57 +1100 Subject: [PATCH 3/5] Make privacy field non-optional in teams The `privacy` field is optional when creating/editing teams, but has a context dependent default value. When getting the team details, the field is expected to always be populated due to these default values. --- src/GitHub/Data/Teams.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs index 6eb5a8f3..d02e77b8 100644 --- a/src/GitHub/Data/Teams.hs +++ b/src/GitHub/Data/Teams.hs @@ -50,7 +50,7 @@ data SimpleTeam = SimpleTeam , simpleTeamName :: !Text -- TODO (0.15.0): unify this and 'simpleTeamSlug' as in 'Team'. , simpleTeamSlug :: !(Name Team) , simpleTeamDescription :: !(Maybe Text) - , simpleTeamPrivacy :: !(Maybe Privacy) + , simpleTeamPrivacy :: !Privacy , simpleTeamPermission :: !Permission , simpleTeamMembersUrl :: !URL , simpleTeamRepositoriesUrl :: !URL @@ -66,7 +66,7 @@ data Team = Team , teamName :: !Text , teamSlug :: !(Name Team) , teamDescription :: !(Maybe Text) - , teamPrivacy :: !(Maybe Privacy) + , teamPrivacy :: !Privacy , teamPermission :: !Permission , teamMembersUrl :: !URL , teamRepositoriesUrl :: !URL @@ -144,7 +144,7 @@ instance FromJSON SimpleTeam where <*> o .: "name" <*> o .: "slug" <*> o .:?"description" .!= Nothing - <*> o .:?"privacy" .!= Nothing + <*> o .: "privacy" <*> o .: "permission" <*> o .: "members_url" <*> o .: "repositories_url" @@ -156,7 +156,7 @@ instance FromJSON Team where <*> o .: "name" <*> o .: "slug" <*> o .:?"description" .!= Nothing - <*> o .:?"privacy" .!= Nothing + <*> o .: "privacy" <*> o .: "permission" <*> o .: "members_url" <*> o .: "repositories_url" From df1f2b51c3d22c7b3135f36523edc1e5f0c6b951 Mon Sep 17 00:00:00 2001 From: Robbie McMichael <2044464+robbiemcmichael@users.noreply.github.com> Date: Fri, 6 Dec 2019 23:06:12 +1100 Subject: [PATCH 4/5] Update team privacy/permission optionality Makes team `privacy` and `permission` fields required when creating a team so users are forced to choose, but optional when editing a team. --- samples/Organizations/Teams/CreateTeamFor.hs | 2 +- samples/Teams/EditTeam.hs | 2 +- src/GitHub/Data/Teams.hs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/Organizations/Teams/CreateTeamFor.hs b/samples/Organizations/Teams/CreateTeamFor.hs index ed9a0d0a..df270bce 100644 --- a/samples/Organizations/Teams/CreateTeamFor.hs +++ b/samples/Organizations/Teams/CreateTeamFor.hs @@ -13,7 +13,7 @@ main = do Github.createTeamFor' (Github.OAuth token) org - (Github.CreateTeam team (Just desc) (read repos :: [String]) Nothing Github.PermissionPull) + (Github.CreateTeam team (Just desc) (read repos :: [String]) Github.PrivacyClosed Github.PermissionPull) _ -> error "usage: CreateTeamFor <[\"repos\"]>" case result of diff --git a/samples/Teams/EditTeam.hs b/samples/Teams/EditTeam.hs index e8fc0a11..7e83e5c9 100644 --- a/samples/Teams/EditTeam.hs +++ b/samples/Teams/EditTeam.hs @@ -15,7 +15,7 @@ main = do (GitHub.OAuth $ fromString token) GitHub.editTeamR (GitHub.mkTeamId $ read team_id) - (GitHub.EditTeam (GitHub.mkTeamName $ fromString team_name) (Just $ fromString desc) Nothing GitHub.PermissionPull) + (GitHub.EditTeam (GitHub.mkTeamName $ fromString team_name) (Just $ fromString desc) Nothing Nothing) _ -> error "usage: EditTeam " case result of diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs index d02e77b8..38df3770 100644 --- a/src/GitHub/Data/Teams.hs +++ b/src/GitHub/Data/Teams.hs @@ -83,7 +83,7 @@ data CreateTeam = CreateTeam { createTeamName :: !(Name Team) , createTeamDescription :: !(Maybe Text) , createTeamRepoNames :: !(Vector (Name Repo)) - , createTeamPrivacy :: !(Maybe Privacy) + , createTeamPrivacy :: !Privacy , createTeamPermission :: !Permission } deriving (Show, Data, Typeable, Eq, Ord, Generic) @@ -95,7 +95,7 @@ data EditTeam = EditTeam { editTeamName :: !(Name Team) , editTeamDescription :: !(Maybe Text) , editTeamPrivacy :: !(Maybe Privacy) - , editTeamPermission :: !Permission + , editTeamPermission :: !(Maybe Permission) } deriving (Show, Data, Typeable, Eq, Ord, Generic) From d1eaa923134f469eedb3b1ac64dba3fc83013754 Mon Sep 17 00:00:00 2001 From: Robbie McMichael <2044464+robbiemcmichael@users.noreply.github.com> Date: Fri, 6 Dec 2019 23:21:10 +1100 Subject: [PATCH 5/5] Filter null values from types for teams --- src/GitHub/Data/Teams.hs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs index 38df3770..79ef9706 100644 --- a/src/GitHub/Data/Teams.hs +++ b/src/GitHub/Data/Teams.hs @@ -165,21 +165,29 @@ instance FromJSON Team where <*> o .: "organization" instance ToJSON CreateTeam where - toJSON (CreateTeam name desc repo_names privacy permission) = - object [ "name" .= name - , "description" .= desc - , "repo_names" .= repo_names - , "privacy" .= privacy - , "permission" .= permission - ] + toJSON (CreateTeam name desc repo_names privacy permission) = + object $ filter notNull + [ "name" .= name + , "description" .= desc + , "repo_names" .= repo_names + , "privacy" .= privacy + , "permission" .= permission + ] + where + notNull (_, Null) = False + notNull (_, _) = True instance ToJSON EditTeam where - toJSON (EditTeam name desc privacy permission) = - object [ "name" .= name - , "description" .= desc - , "privacy" .= privacy - , "permission" .= permission - ] + toJSON (EditTeam name desc privacy permission) = + object $ filter notNull + [ "name" .= name + , "description" .= desc + , "privacy" .= privacy + , "permission" .= permission + ] + where + notNull (_, Null) = False + notNull (_, _) = True instance FromJSON TeamMembership where parseJSON = withObject "TeamMembership" $ \o -> TeamMembership