Skip to content

Commit abc27ca

Browse files
committed
Complete API for repo-issues
Add missing methods to set the following fields of 'IssueRepoOptions': - specific milestone - specific assignee - creator - mentioned
1 parent ec59ef8 commit abc27ca

File tree

2 files changed

+96
-14
lines changed

2 files changed

+96
-14
lines changed

github.cabal

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
cabal-version: >=1.10
22
name: github
3-
version: 0.27
4-
x-revision: 1
3+
version: 0.28
54
synopsis: Access to the GitHub API, v3.
65
category: Network
76
description:

src/GitHub/Data/Options.hs

Lines changed: 95 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ module GitHub.Data.Options (
3838
-- * Repo issues
3939
IssueRepoMod,
4040
issueRepoModToQueryString,
41+
optionsCreator,
42+
optionsMentioned,
4143
optionsIrrelevantMilestone,
4244
optionsAnyMilestone,
4345
optionsNoMilestone,
46+
optionsMilestone,
4447
optionsIrrelevantAssignee,
4548
optionsAnyAssignee,
4649
optionsNoAssignee,
50+
optionsAssignee,
4751
-- * Data
4852
IssueState (..),
4953
MergeableState (..),
@@ -351,7 +355,7 @@ sortByLongRunning = PRMod $ \opts ->
351355
-- Issues
352356
-------------------------------------------------------------------------------
353357

354-
-- | See <https://developer.github.com/v3/issues/#parameters>.
358+
-- | See <https://docs.github.com/en/rest/reference/issues#list-issues-assigned-to-the-authenticated-user--parameters>.
355359
data IssueOptions = IssueOptions
356360
{ issueOptionsFilter :: !IssueFilter
357361
, issueOptionsState :: !(Maybe IssueState)
@@ -373,7 +377,7 @@ defaultIssueOptions = IssueOptions
373377
, issueOptionsSince = Nothing
374378
}
375379

376-
-- | See <https://developer.github.com/v3/issues/#parameters>.
380+
-- | See <https://docs.github.com/en/rest/reference/issues#list-issues-assigned-to-the-authenticated-user--parameters>.
377381
newtype IssueMod = IssueMod (IssueOptions -> IssueOptions)
378382

379383
instance Semigroup IssueMod where
@@ -491,16 +495,70 @@ issueFilter f = IssueMod $ \opts ->
491495
-- Issues repo
492496
-------------------------------------------------------------------------------
493497

498+
-- | See <https://docs.github.com/en/rest/reference/issues#list-repository-issues>.
499+
-- Retrieved: 2021-12-08
500+
--
501+
-- Parameters of "list repository issues" (@get /repos/{owner}/{repo}/issues@)
502+
--
503+
-- * milestone : string
504+
--
505+
-- If an integer is passed, it should refer to a milestone by its number field. If the string * is passed, issues with any milestone are accepted. If the string none is passed, issues without milestones are returned.
506+
--
507+
-- * state : string
508+
--
509+
-- Indicates the state of the issues to return. Can be either open, closed, or all.
510+
-- Default: open
511+
--
512+
-- * assignee : string
513+
--
514+
-- Can be the name of a user. Pass in none for issues with no assigned user, and * for issues assigned to any user.
515+
--
516+
-- * creator : string
517+
--
518+
-- The user that created the issue.
519+
--
520+
-- * mentioned : string
521+
--
522+
-- A user that's mentioned in the issue.
523+
--
524+
-- * labels : string
525+
--
526+
-- A list of comma separated label names. Example: bug,ui,@high
527+
--
528+
-- * sort : string
529+
--
530+
-- What to sort results by. Can be either created, updated, comments.
531+
-- Default: created
532+
--
533+
-- * direction : string
534+
--
535+
-- One of asc (ascending) or desc (descending).
536+
-- Default: desc
537+
--
538+
-- * since : string
539+
--
540+
-- Only show notifications updated after the given time. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.
541+
--
542+
-- * per_page : integer
543+
--
544+
-- Results per page (max 100)
545+
-- Default: 30
546+
--
547+
-- * page : integer
548+
--
549+
-- Page number of the results to fetch.
550+
-- Default: 1
551+
--
494552
data IssueRepoOptions = IssueRepoOptions
495-
{ issueRepoOptionsMilestone :: !(FilterBy (Id Milestone))
496-
, issueRepoOptionsState :: !(Maybe IssueState)
497-
, issueRepoOptionsAssignee :: !(FilterBy (Name User))
498-
, issueRepoOptionsCreator :: !(Maybe (Name User))
499-
, issueRepoOptionsMentioned :: !(Maybe (Name User))
500-
, issueRepoOptionsLabels :: ![Name IssueLabel]
501-
, issueRepoOptionsSort :: !SortIssue
502-
, issueRepoOptionsDirection :: !SortDirection
503-
, issueRepoOptionsSince :: !(Maybe UTCTime)
553+
{ issueRepoOptionsMilestone :: !(FilterBy (Id Milestone)) -- ^ 'optionsMilestone' etc.
554+
, issueRepoOptionsState :: !(Maybe IssueState) -- ^ 'HasState'
555+
, issueRepoOptionsAssignee :: !(FilterBy (Name User)) -- ^ 'optionsAssignee' etc.
556+
, issueRepoOptionsCreator :: !(Maybe (Name User)) -- ^ 'optionsCreator'
557+
, issueRepoOptionsMentioned :: !(Maybe (Name User)) -- ^ 'optionsMentioned'
558+
, issueRepoOptionsLabels :: ![Name IssueLabel] -- ^ 'HasLabels'
559+
, issueRepoOptionsSort :: !SortIssue -- ^ 'HasCreatedUpdated' and 'HasComments'
560+
, issueRepoOptionsDirection :: !SortDirection -- ^ 'HasDirection'
561+
, issueRepoOptionsSince :: !(Maybe UTCTime) -- ^ 'HasSince'
504562
}
505563
deriving
506564
(Eq, Ord, Show, Generic, Typeable, Data)
@@ -579,7 +637,17 @@ issueRepoOptionsToQueryString IssueRepoOptions {..} =
579637
-- Issues repo modifiers
580638
-------------------------------------------------------------------------------
581639

582-
-- | Don't care about milestones.
640+
-- | Issues created by a certain user.
641+
optionsCreator :: Name User -> IssueRepoMod
642+
optionsCreator u = IssueRepoMod $ \opts ->
643+
opts { issueRepoOptionsCreator = Just u }
644+
645+
-- | Issue mentioning the given user.
646+
optionsMentioned :: Name User -> IssueRepoMod
647+
optionsMentioned u = IssueRepoMod $ \opts ->
648+
opts { issueRepoOptionsMentioned = Just u }
649+
650+
-- | Don't care about milestones (default).
583651
--
584652
-- 'optionsAnyMilestone' means there should be some milestone, but it can be any.
585653
--
@@ -588,22 +656,37 @@ optionsIrrelevantMilestone :: IssueRepoMod
588656
optionsIrrelevantMilestone = IssueRepoMod $ \opts ->
589657
opts { issueRepoOptionsMilestone = FilterNotSpecified }
590658

659+
-- | Issues that have a milestone.
591660
optionsAnyMilestone :: IssueRepoMod
592661
optionsAnyMilestone = IssueRepoMod $ \opts ->
593662
opts { issueRepoOptionsMilestone = FilterAny }
594663

664+
-- | Issues that have no milestone.
595665
optionsNoMilestone :: IssueRepoMod
596666
optionsNoMilestone = IssueRepoMod $ \opts ->
597667
opts { issueRepoOptionsMilestone = FilterNone }
598668

669+
-- | Issues with the given milestone.
670+
optionsMilestone :: Id Milestone -> IssueRepoMod
671+
optionsMilestone m = IssueRepoMod $ \opts ->
672+
opts { issueRepoOptionsMilestone = FilterBy m }
673+
674+
-- | Issues with or without assignee (default).
599675
optionsIrrelevantAssignee :: IssueRepoMod
600676
optionsIrrelevantAssignee = IssueRepoMod $ \opts ->
601677
opts { issueRepoOptionsAssignee = FilterNotSpecified }
602678

679+
-- | Issues assigned to someone.
603680
optionsAnyAssignee :: IssueRepoMod
604681
optionsAnyAssignee = IssueRepoMod $ \opts ->
605682
opts { issueRepoOptionsAssignee = FilterAny }
606683

684+
-- | Issues assigned to nobody.
607685
optionsNoAssignee :: IssueRepoMod
608686
optionsNoAssignee = IssueRepoMod $ \opts ->
609687
opts { issueRepoOptionsAssignee = FilterNone }
688+
689+
-- | Issues assigned to a specific user.
690+
optionsAssignee :: Name User -> IssueRepoMod
691+
optionsAssignee u = IssueRepoMod $ \opts ->
692+
opts { issueRepoOptionsAssignee = FilterBy u }

0 commit comments

Comments
 (0)