-
Notifications
You must be signed in to change notification settings - Fork 4
/
issues.lisp
112 lines (94 loc) · 5.25 KB
/
issues.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
(in-package :nisp.github)
;;; Issues API
(defgeneric search-issues (username repository state term &key login token)
(:documentation "Search for TERM with STATE on USERNAME's REPOSITORY."))
(defgeneric show-issues (username repository state &key login token)
(:documentation "Show all issues with STATE on USERNAME's REPOSITORY."))
(defgeneric show-issue (username repository issue &key login token)
(:documentation "Show ISSUE on USERNAME's REPOSITORY."))
(defgeneric open-issue (username repository title body &key login token)
(:documentation "Open issue about TITLE with BODY on USERNAME's REPOSITORY."))
(defgeneric close-issue (username repository issue &key login token)
(:documentation "Close ISSUE on USERNAME's REPOSITORY."))
(defgeneric reopen-issue (username repository issue &key login token)
(:documentation "Reopen ISSUE on USERNAME's REPOSITORY."))
(defgeneric edit-issue (username repository issue title body &key login token)
(:documentation "Edit ISSUE setting TITLE and BODY on USERNAME's REPOSITORY.
Editing an issue causes your TITLE and BODY to completely replace the
original TITLE and BODY."))
(defgeneric show-labels (username repository &key login token)
(:documentation "Show issue labels for USERNAME's REPOSITORY."))
(defgeneric add-label (username repository issue label &key login token)
(:documentation "Add LABEL to ISSUE on USERNAME's REPOSITORY."))
(defgeneric remove-label (username repository issue label &key login token)
(:documentation "Remove LABEL from ISSUE on USERNAME's REPOSITORY."))
(defgeneric add-comment (username repository issue comment &key login token)
(:documentation "Add COMMENT to ISSUE on USERNAME's REPOSITORY."))
(defclass issue-labels ()
(labels)
(:documentation "Github issue tracker labels."))
(defclass issue ()
(number votes created-at body title updated-at closed-at user labels state)
(:documentation "Github issue information."))
(defclass comment ()
(comment status)
(:documentation "Comment on a github issue."))
(deftype valid-issue-state ()
"Github issues have two valid states."
'(member :open :closed))
(defmethod search-issues ((username string) (repository string)
(state string) (term string)
&key login token)
(to-json (request login token `("issues" "search" ,username
,repository ,state ,term))))
(defmethod show-issues ((username string) (repository string)
(state string) &key login token)
(to-json (request login token `("issues" "list" ,username ,repository ,state))))
(defmethod show-issue ((username string) (repository string)
(issue string) &key login token)
(to-json (request login token `("issues" "show" ,username ,repository ,issue))))
(defmethod open-issue ((username string) (repository string)
(title string) (body string)
&key login token)
(to-json (authed-request login token `("issues" "open" ,username ,repository)
:title title :body body)))
(defmethod close-issue ((username string) (repository string)
(issue string)
&key login token)
(to-json (authed-request login token `("issues" "close" ,username
,repository ,issue))))
(defmethod reopen-issue ((username string) (repository string)
(issue string)
&key login token)
(to-json (authed-request login token `("issues" "reopen" ,username
,repository ,issue))))
(defmethod edit-issue ((username string) (repository string)
(issue string) (title string) (body string)
&key login token)
(to-json (authed-request login token `("issues" "edit" ,username
,repository ,issue)
:title title :body body)))
(defmethod show-labels ((username string) (repository string)
&key login token)
(json->list (request login token
`("issues" "labels" ,username ,repository))))
(defmethod add-label ((username string) (repository string)
(issue string) (label string)
&key login token)
(json->list (authed-request login token
`("issues" "label" "add"
,username ,repository
,label ,issue))))
(defmethod remove-label ((username string) (repository string)
(issue string) (label string)
&key login token)
(json->list (authed-request login token
`("issues" "label" "remove"
,username ,repository
,label ,issue))))
(defmethod add-comment ((username string) (repository string)
(issue string) (comment string)
&key login token)
(to-json (authed-request login token `("issues" "comment" ,username
,repository ,issue)
:comment comment)))