Skip to content

Commit 9834714

Browse files
committed
Rework options, add currentUserIssuesR and organizationIssuesR
1 parent 40f6c18 commit 9834714

14 files changed

Lines changed: 730 additions & 302 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
Changes for 0.15.0
22

33
- Reworked `PullRequest` (notably `pullRequestsFor`)
4+
- Reworked PR and Issue filtering
45
- GHC-8.0.1 support
56
- Change `repoMasterBranch` to `repoDefaultBranch` in `Repo`
67
- Add `listTeamReposR`
78
- Add `myStarredAcceptStarR`
89
- Add `HeaderQuery` to `Request`
910
- Add `Hashable Auth` instance
1011
- Add `mkUserId`, `mkUserName`, `fromUserId`, `fromOrganizationId`
12+
- Add 'userIssuesR'
13+
- Add 'organizationIssuesR'
1114

1215
Changes for 0.14.1
1316

github.cabal

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,24 @@ Library
6767
GitHub.Internal.Prelude
6868
GitHub.Auth
6969
GitHub.Data
70+
GitHub.Data.Activities
7071
GitHub.Data.Comments
7172
GitHub.Data.Content
7273
GitHub.Data.Definitions
74+
GitHub.Data.DeployKeys
7375
GitHub.Data.Gists
7476
GitHub.Data.GitData
7577
GitHub.Data.Id
7678
GitHub.Data.Issues
7779
GitHub.Data.Name
80+
GitHub.Data.Milestone
81+
GitHub.Data.Options
7882
GitHub.Data.PullRequests
7983
GitHub.Data.Repos
8084
GitHub.Data.Request
8185
GitHub.Data.Search
8286
GitHub.Data.Teams
83-
GitHub.Data.Activities
8487
GitHub.Data.URL
85-
GitHub.Data.DeployKeys
8688
GitHub.Data.Webhooks
8789
GitHub.Data.Webhooks.Validate
8890
GitHub.Endpoints.Activity.Starring

spec/GitHub/IssuesSpec.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ module GitHub.IssuesSpec where
33

44
import qualified GitHub
55

6+
import Prelude ()
7+
import Prelude.Compat
8+
69
import Data.Either.Compat (isRight)
710
import Data.Foldable (for_)
811
import Data.String (fromString)
@@ -25,7 +28,7 @@ spec = do
2528
describe "issuesForRepoR" $ do
2629
it "works" $ withAuth $ \auth -> for_ repos $ \(owner, repo) -> do
2730
cs <- GitHub.executeRequest auth $
28-
GitHub.issuesForRepoR owner repo [] GitHub.FetchAll
31+
GitHub.issuesForRepoR owner repo mempty GitHub.FetchAll
2932
cs `shouldSatisfy` isRight
3033
where
3134
repos =

spec/GitHub/PullRequestsSpec.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ module GitHub.PullRequestsSpec where
33

44
import qualified GitHub
55

6+
import Prelude ()
7+
import Prelude.Compat
8+
69
import Data.Either.Compat (isRight)
710
import Data.Foldable (for_)
8-
import Data.Function.Compat ((&))
911
import Data.String (fromString)
1012
import System.Environment (lookupEnv)
1113
import Test.Hspec (Spec, describe, it, pendingWith, shouldSatisfy)
@@ -34,5 +36,4 @@ spec = do
3436
, ("phadej", "github")
3537
, ("haskell", "cabal")
3638
]
37-
opts = GitHub.defaultPullRequestOptions
38-
& GitHub.setPullRequestOptionsState GitHub.PullRequestStateClosed
39+
opts = GitHub.stateClosed

src/GitHub.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,8 @@ module GitHub (
9292
-- * Issues
9393
-- | See <https://developer.github.com/v3/issues/>
9494
--
95-
-- Missing endpoints:
96-
--
97-
-- * List issues
95+
currentUserIssuesR,
96+
organizationIssuesR,
9897
issueR,
9998
issuesForRepoR,
10099
createIssueR,

src/GitHub/Data.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ module GitHub.Data (
3939
module GitHub.Data.Gists,
4040
module GitHub.Data.GitData,
4141
module GitHub.Data.Issues,
42+
module GitHub.Data.Milestone,
43+
module GitHub.Data.Options,
4244
module GitHub.Data.PullRequests,
4345
module GitHub.Data.Repos,
4446
module GitHub.Data.Request,
@@ -62,9 +64,11 @@ import GitHub.Data.GitData
6264
import GitHub.Data.Id
6365
import GitHub.Data.Issues
6466
import GitHub.Data.Name
67+
import GitHub.Data.Milestone
6568
import GitHub.Data.PullRequests
6669
import GitHub.Data.Repos
6770
import GitHub.Data.Request
71+
import GitHub.Data.Options
6872
import GitHub.Data.Search
6973
import GitHub.Data.Teams
7074
import GitHub.Data.URL

src/GitHub/Data/Issues.hs

Lines changed: 70 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,42 @@ import GitHub.Data.Id (Id)
1010
import GitHub.Data.PullRequests
1111
import GitHub.Data.URL (URL)
1212
import GitHub.Internal.Prelude
13+
import GitHub.Data.Milestone (Milestone)
1314
import Prelude ()
1415

15-
data Issue = Issue {
16-
issueClosedAt :: Maybe UTCTime
17-
,issueUpdatedAt :: UTCTime
18-
,issueEventsUrl :: URL
19-
,issueHtmlUrl :: Maybe URL
20-
,issueClosedBy :: Maybe SimpleUser
21-
,issueLabels :: (Vector IssueLabel)
22-
,issueNumber :: Int
23-
,issueAssignee :: Maybe SimpleUser
24-
,issueUser :: SimpleUser
25-
,issueTitle :: Text
26-
,issuePullRequest :: Maybe PullRequestReference
27-
,issueUrl :: URL
28-
,issueCreatedAt :: UTCTime
29-
,issueBody :: Maybe Text
30-
,issueState :: Text
31-
,issueId :: Id Issue
32-
,issueComments :: Int
33-
,issueMilestone :: Maybe Milestone
34-
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
16+
data Issue = Issue
17+
{ issueClosedAt :: Maybe UTCTime
18+
, issueUpdatedAt :: UTCTime
19+
, issueEventsUrl :: URL
20+
, issueHtmlUrl :: Maybe URL
21+
, issueClosedBy :: Maybe SimpleUser
22+
, issueLabels :: (Vector IssueLabel)
23+
, issueNumber :: Int
24+
, issueAssignee :: Maybe SimpleUser
25+
, issueUser :: SimpleUser
26+
, issueTitle :: Text
27+
, issuePullRequest :: Maybe PullRequestReference
28+
, issueUrl :: URL
29+
, issueCreatedAt :: UTCTime
30+
, issueBody :: Maybe Text
31+
, issueState :: Text
32+
, issueId :: Id Issue
33+
, issueComments :: Int
34+
, issueMilestone :: Maybe Milestone
35+
}
36+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
3537

3638
instance NFData Issue where rnf = genericRnf
3739
instance Binary Issue
3840

39-
data NewIssue = NewIssue {
40-
newIssueTitle :: Text
41-
, newIssueBody :: Maybe Text
42-
, newIssueAssignee :: Maybe Text
43-
, newIssueMilestone :: Maybe Int
44-
, newIssueLabels :: Maybe (Vector Text)
45-
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
41+
data NewIssue = NewIssue
42+
{ newIssueTitle :: Text
43+
, newIssueBody :: Maybe Text
44+
, newIssueAssignee :: Maybe Text
45+
, newIssueMilestone :: Maybe (Id Milestone)
46+
, newIssueLabels :: Maybe (Vector Text)
47+
}
48+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
4649

4750
instance NFData NewIssue where rnf = genericRnf
4851
instance Binary NewIssue
@@ -52,29 +55,13 @@ data EditIssue = EditIssue {
5255
, editIssueBody :: Maybe Text
5356
, editIssueAssignee :: Maybe Text
5457
, editIssueState :: Maybe Text
55-
, editIssueMilestone :: Maybe Int
58+
, editIssueMilestone :: Maybe (Id Milestone)
5659
, editIssueLabels :: Maybe (Vector Text)
5760
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
5861

5962
instance NFData EditIssue where rnf = genericRnf
6063
instance Binary EditIssue
6164

62-
data Milestone = Milestone {
63-
milestoneCreator :: SimpleUser
64-
,milestoneDueOn :: Maybe UTCTime
65-
,milestoneOpenIssues :: Int
66-
,milestoneNumber :: Int
67-
,milestoneClosedIssues :: Int
68-
,milestoneDescription :: Maybe Text
69-
,milestoneTitle :: Text
70-
,milestoneUrl :: URL
71-
,milestoneCreatedAt :: UTCTime
72-
,milestoneState :: Text
73-
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
74-
75-
instance NFData Milestone where rnf = genericRnf
76-
instance Binary Milestone
77-
7865
data IssueLabel = IssueLabel {
7966
labelColor :: Text
8067
,labelUrl :: URL
@@ -135,76 +122,52 @@ data Event = Event {
135122
instance NFData Event where rnf = genericRnf
136123
instance Binary Event
137124

138-
-- | A data structure for describing how to filter issues. This is used by
139-
-- @issuesForRepo@.
140-
data IssueLimitation =
141-
AnyMilestone -- ^ Issues appearing in any milestone. [default]
142-
| NoMilestone -- ^ Issues without a milestone.
143-
| MilestoneId Int -- ^ Only issues that are in the milestone with the given id.
144-
| Open -- ^ Only open issues. [default]
145-
| OnlyClosed -- ^ Only closed issues.
146-
| Unassigned -- ^ Issues to which no one has been assigned ownership.
147-
| AnyAssignment -- ^ All issues regardless of assignment. [default]
148-
| AssignedTo String -- ^ Only issues assigned to the user with the given login.
149-
| Mentions String -- ^ Issues which mention the given string, taken to be a user's login.
150-
| Labels [String] -- ^ A list of labels to filter by.
151-
| Ascending -- ^ Sort ascending.
152-
| Descending -- ^ Sort descending. [default]
153-
| Since UTCTime -- ^ Only issues created since the specified date and time.
154-
| PerPage Int -- ^ Download this many issues per query
155-
deriving (Eq, Ord, Show, Typeable, Data, Generic)
156-
157-
instance NFData IssueLimitation where rnf = genericRnf
158-
instance Binary IssueLimitation
159-
160-
-- JSON instances
161-
162125
instance FromJSON Event where
163-
parseJSON = withObject "Event" $ \o ->
164-
Event <$> o .: "actor"
165-
<*> o .: "event"
166-
<*> o .:? "commit_id"
167-
<*> o .: "url"
168-
<*> o .: "created_at"
169-
<*> o .: "id"
170-
<*> o .:? "issue"
126+
parseJSON = withObject "Event" $ \o -> Event
127+
<$> o .: "actor"
128+
<*> o .: "event"
129+
<*> o .:? "commit_id"
130+
<*> o .: "url"
131+
<*> o .: "created_at"
132+
<*> o .: "id"
133+
<*> o .:? "issue"
171134

172135
instance FromJSON EventType where
173-
parseJSON (String "closed") = pure Closed
174-
parseJSON (String "reopened") = pure Reopened
175-
parseJSON (String "subscribed") = pure Subscribed
176-
parseJSON (String "merged") = pure Merged
177-
parseJSON (String "referenced") = pure Referenced
178-
parseJSON (String "mentioned") = pure Mentioned
179-
parseJSON (String "assigned") = pure Assigned
180-
parseJSON (String "unsubscribed") = pure Unsubscribed
181-
parseJSON (String "unassigned") = pure ActorUnassigned
182-
parseJSON (String "labeled") = pure Labeled
183-
parseJSON (String "unlabeled") = pure Unlabeled
184-
parseJSON (String "milestoned") = pure Milestoned
185-
parseJSON (String "demilestoned") = pure Demilestoned
186-
parseJSON (String "renamed") = pure Renamed
187-
parseJSON (String "locked") = pure Locked
188-
parseJSON (String "unlocked") = pure Unlocked
189-
parseJSON (String "head_ref_deleted") = pure HeadRefDeleted
190-
parseJSON (String "head_ref_restored") = pure HeadRefRestored
191-
parseJSON _ = fail "Could not build an EventType"
136+
parseJSON (String "closed") = pure Closed
137+
parseJSON (String "reopened") = pure Reopened
138+
parseJSON (String "subscribed") = pure Subscribed
139+
parseJSON (String "merged") = pure Merged
140+
parseJSON (String "referenced") = pure Referenced
141+
parseJSON (String "mentioned") = pure Mentioned
142+
parseJSON (String "assigned") = pure Assigned
143+
parseJSON (String "unsubscribed") = pure Unsubscribed
144+
parseJSON (String "unassigned") = pure ActorUnassigned
145+
parseJSON (String "labeled") = pure Labeled
146+
parseJSON (String "unlabeled") = pure Unlabeled
147+
parseJSON (String "milestoned") = pure Milestoned
148+
parseJSON (String "demilestoned") = pure Demilestoned
149+
parseJSON (String "renamed") = pure Renamed
150+
parseJSON (String "locked") = pure Locked
151+
parseJSON (String "unlocked") = pure Unlocked
152+
parseJSON (String "head_ref_deleted") = pure HeadRefDeleted
153+
parseJSON (String "head_ref_restored") = pure HeadRefRestored
154+
parseJSON _ = fail "Could not build an EventType"
192155

193156
instance FromJSON IssueLabel where
194-
parseJSON = withObject "IssueLabel" $ \o ->
195-
IssueLabel <$> o .: "color"
196-
<*> o .: "url"
197-
<*> o .: "name"
157+
parseJSON = withObject "IssueLabel" $ \o -> IssueLabel
158+
<$> o .: "color"
159+
<*> o .: "url"
160+
<*> o .: "name"
198161

199162
instance FromJSON IssueComment where
200-
parseJSON = withObject "IssueComment" $ \o ->
201-
IssueComment <$> o .: "updated_at"
202-
<*> o .: "user"
203-
<*> o .: "url"
204-
<*> o .: "html_url"
205-
<*> o .: "created_at"
206-
<*> o .: "body"
207-
<*> o .: "id"
163+
parseJSON = withObject "IssueComment" $ \o -> IssueComment
164+
<$> o .: "updated_at"
165+
<*> o .: "user"
166+
<*> o .: "url"
167+
<*> o .: "html_url"
168+
<*> o .: "created_at"
169+
<*> o .: "body"
170+
<*> o .: "id"
208171

209172
instance FromJSON Issue where
210173
parseJSON = withObject "Issue" $ \o ->
@@ -246,16 +209,3 @@ instance ToJSON EditIssue where
246209
, "labels" .= ls ]
247210
where notNull (_, Null) = False
248211
notNull (_, _) = True
249-
250-
instance FromJSON Milestone where
251-
parseJSON = withObject "Milestone" $ \o ->
252-
Milestone <$> o .: "creator"
253-
<*> o .: "due_on"
254-
<*> o .: "open_issues"
255-
<*> o .: "number"
256-
<*> o .: "closed_issues"
257-
<*> o .: "description"
258-
<*> o .: "title"
259-
<*> o .: "url"
260-
<*> o .: "created_at"
261-
<*> o .: "state"

src/GitHub/Data/Milestone.hs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
-----------------------------------------------------------------------------
2+
-- |
3+
-- License : BSD-3-Clause
4+
-- Maintainer : Oleg Grenrus <[email protected]>
5+
--
6+
module GitHub.Data.Milestone where
7+
8+
import GitHub.Data.Definitions
9+
import GitHub.Data.Id (Id)
10+
import GitHub.Data.URL (URL)
11+
import GitHub.Internal.Prelude
12+
import Prelude ()
13+
14+
data Milestone = Milestone
15+
{ milestoneCreator :: !SimpleUser
16+
, milestoneDueOn :: !(Maybe UTCTime)
17+
, milestoneOpenIssues :: !Int
18+
, milestoneNumber :: !(Id Milestone)
19+
, milestoneClosedIssues :: !Int
20+
, milestoneDescription :: !(Maybe Text)
21+
, milestoneTitle :: !Text
22+
, milestoneUrl :: !URL
23+
, milestoneCreatedAt :: !UTCTime
24+
, milestoneState :: !Text
25+
}
26+
deriving (Show, Data, Typeable, Eq, Ord, Generic)
27+
28+
instance NFData Milestone where rnf = genericRnf
29+
instance Binary Milestone
30+
31+
instance FromJSON Milestone where
32+
parseJSON = withObject "Milestone" $ \o -> Milestone
33+
<$> o .: "creator"
34+
<*> o .: "due_on"
35+
<*> o .: "open_issues"
36+
<*> o .: "number"
37+
<*> o .: "closed_issues"
38+
<*> o .: "description"
39+
<*> o .: "title"
40+
<*> o .: "url"
41+
<*> o .: "created_at"
42+
<*> o .: "state"

0 commit comments

Comments
 (0)