packages feed

octohat 0.1.3 → 0.1.4

raw patch · 4 files changed

+121/−2 lines, 4 filesdep ~octohatdep ~text

Dependency ranges changed: octohat, text

Files

octohat.cabal view
@@ -1,7 +1,7 @@ Name:                octohat Synopsis:            A tested, minimal wrapper around GitHub's API. Description:         A tested, minimal wrapper around GitHub's API.-Version:             0.1.3+Version:             0.1.4 License:             MIT License-file:        LICENSE Author:              Stack Builders@@ -59,11 +59,16 @@     base                      >=4.4 && <4.8,     text                      ==1.2.0.*,     optparse-applicative      ==0.11.0.*,-    octohat                   ==0.1.2,+    octohat                   ==0.1.4,     utf8-string               >=0.3 && <=1,     yaml                      ==0.8.10.*    default-language: Haskell2010++  other-modules:   Web.GitHub.CLI.Actions+                 , Web.GitHub.CLI.Messages+                 , Web.GitHub.CLI.Options+   ghc-options: -threaded -Wall  test-suite spec
+ src-demo/Web/GitHub/CLI/Actions.hs view
@@ -0,0 +1,61 @@+module Web.GitHub.CLI.Actions+  ( findTeamsInOrganization+  , addUserToTeamInOrganization+  , deleteUserFromTeamInOrganization+  , findMembersInTeam) where++import Web.GitHub.CLI.Messages+import Network.Octohat.Members (teamsForOrganization, deleteMemberFromTeam)+import Network.Octohat+import Network.Octohat.Types+import qualified Data.Text as T+import Data.Yaml as Y+import Data.List (find)+import Data.ByteString.UTF8 (toString)+import System.IO (hPutStrLn, stderr)+import System.Exit (ExitCode(..), exitWith)++findTeamsInOrganization :: OrganizationName -> IO ()+findTeamsInOrganization nameOfOrg = do+  teamListing <- runGitHub $ teamsForOrganization nameOfOrg+  case teamListing of+    Left status -> errorHandler $ commandMessage status+    Right teams -> putStrLn (toString $ Y.encode teams)++addUserToTeamInOrganization :: String -> OrganizationName -> TeamName -> IO ()+addUserToTeamInOrganization nameOfUser nameOfOrg nameOfTeam = do+  addResult <- runGitHub $ addUserToTeam (T.pack nameOfUser) nameOfOrg nameOfTeam+  case addResult of+    Left status   -> errorHandler $ commandMessage status+    Right Pending -> putStrLn "User invited to join team"+    Right Active  -> putStrLn "User added to team"++deleteUserFromTeamInOrganization :: String -> OrganizationName -> TeamName -> IO ()+deleteUserFromTeamInOrganization nameOfUser nameOfOrg nameOfTeam = do+  teamListing <- runGitHub $ teamsForOrganization nameOfOrg+  case teamListing of+    Left status -> errorHandler $ commandMessage status+    Right []    -> errorHandler "No teams found on this organization"+    Right teams -> getTheTeamAndDeleteUser nameOfUser nameOfTeam teams++findMembersInTeam :: OrganizationName -> TeamName -> IO ()+findMembersInTeam nameOfOrg nameOfTeam = do+  memberListing <- runGitHub $ membersOfTeamInOrganization nameOfOrg nameOfTeam+  case memberListing of+    Left status   -> errorHandler $ commandMessage status+    Right members -> putStrLn (toString $ Y.encode members)++errorHandler :: String -> IO ()+errorHandler message = hPutStrLn stderr message >> exitWith (ExitFailure 1)++getTheTeamAndDeleteUser :: String -> TeamName -> [Team] -> IO ()+getTheTeamAndDeleteUser nameOfUser nameOfTeam teams = +  case (getTeam teams) of+    Nothing   -> errorHandler "There's no such team in that organization"+    Just team -> do+      result <- runGitHub $ deleteMemberFromTeam (T.pack nameOfUser) (teamId team)+      case result of+        Left status      -> errorHandler $ commandMessage status+        Right NotDeleted -> errorHandler "The user could not be deleted from the team"+        Right Deleted    -> putStrLn "The user was succesfully deleted from the team"+  where getTeam = find (\t -> (teamName t) == (unTeamName nameOfTeam))
+ src-demo/Web/GitHub/CLI/Messages.hs view
@@ -0,0 +1,10 @@+module Web.GitHub.CLI.Messages+  (commandMessage) where++import Network.Octohat.Types++commandMessage :: GitHubReturnStatus -> String+commandMessage NotFound               = "Organization or Team not found"+commandMessage NotAllowed             = "Not authorized"+commandMessage RequiresAuthentication = "Credentials must be configured to use this function"+commandMessage _                      = "Internal application error"
+ src-demo/Web/GitHub/CLI/Options.hs view
@@ -0,0 +1,43 @@+module Web.GitHub.CLI.Options ( TeamOptions(..)+                              , TeamCommand(..)+                              , teamOptions) where++import Options.Applicative++type OrganizationName = String+type Username = String+type TeamName = String++data TeamCommand = ListTeams OrganizationName+                 | ListMembers OrganizationName TeamName+                 | AddToTeam OrganizationName TeamName Username+                 | DeleteFromTeam OrganizationName TeamName Username ++data TeamOptions = TeamOptions TeamCommand++teamOptions :: Parser TeamOptions+teamOptions = TeamOptions <$> parseTeamCommand++parseTeamCommand :: Parser TeamCommand+parseTeamCommand = subparser $+  command "list-teams"  (info listTeams      (progDesc "List teams in a organization" ))          <>+  command "members-in"  (info listMembers    (progDesc "List members in team and organization" )) <>+  command "add-to-team" (info addToTeam      (progDesc "Add users to a team"))                    <>+  command "delete-user" (info deleteFromTeam (progDesc "Delete a user from a team"))++listTeams :: Parser TeamCommand+listTeams = ListTeams <$> argument str (metavar "<organization name>")++listMembers :: Parser TeamCommand+listMembers = ListMembers <$> argument str (metavar "<organization-name>")+                          <*> argument str (metavar "<team-name>")++addToTeam :: Parser TeamCommand+addToTeam = AddToTeam <$> argument str (metavar "<organization name>")+                      <*> argument str (metavar "<team name>")+                      <*> argument str (metavar "<github username>")++deleteFromTeam :: Parser TeamCommand+deleteFromTeam = DeleteFromTeam <$> argument str (metavar "<organization name>")+                                <*> argument str (metavar "<team name>")+                                <*> argument str (metavar "<github username>")