-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgithub.rkt
72 lines (65 loc) · 2.46 KB
/
github.rkt
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
;; The MIT License (MIT)
;;
;; Copyright (c) 2013 Matthew C. Jadud
;;
;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:
;;
;; The above copyright notice and this permission notice shall be included in
;; all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
;; THE SOFTWARE.
#lang racket
(provide (all-defined-out))
(require "seq.rkt"
"debug.rkt"
net/url
"util.rkt"
json)
;(define OWNER "concurrency")
(define OWNER "jadudm")
;(define PROCESSOR b64-decode)
(define PROCESSOR (λ (o) o))
(define github%
(class object%
(init-field owner repos)
; https://bitbucket.org/api/1.0/repositories/jadudm/plumbing-examples/src/master/REDME.md
;(define root "https://api.github.com/repos")
(define root "https://bitbucket.org/api/1.0/repositories")
(define CONTENT-KEY 'data)
(define/public (get path)
(define p (new process%))
(seq p
[(initial? 'ERROR-GH1)
(format "~a/~a/~a/src/master/~a"
root
owner
repos
path)]
[(string? 'ERROR-GH2)
(debug 'GITHUB "URL [~a]" (send p get))
(read-url (send p get))]
[(string? 'ERROR-GH3)
(debug 'GITHUB "Response [~a]" (send p get))
(string->jsexpr (send p get))]
[(hash? 'ERROR-GH4)
NO-CHANGE])
(send p get))
(define/public (get-content path)
(debug 'GITHUB "Fetching [~a]" path)
(let ([h (get path)])
(when (and (hash? h)
(hash-has-key? h CONTENT-KEY))
(PROCESSOR (hash-ref h CONTENT-KEY)))))
(super-new)
))