aboutsummaryrefslogtreecommitdiff
(define-module (web gn-uri)
  #:use-module (ice-9 string-fun)
  #:use-module (ice-9 match)
  #:use-module (ice-9 regex)

  #:export (get-version
            ;; url-parse-id
            ;; normalize-id
            ;; strip-lang
            mk-meta
            mk-data
            mk-doc
            mk-html
            mk-url
            mk-id
            mk-gnid
            mk-predicate
            prefix
            url-parse-id
            normalize-id))

(define (normalize-id str)
  ;; (string-replace-substring (string-downcase str) " " "_")
  (match str
    (#f "unknown")
    (_ (string-replace-substring str " " "_"))))

(define (url-parse-id uri)
  (if uri
      (car (reverse (string-split uri #\/))) "unknown"))

(define get-version
  "4.0.0")

(define base-url
  "http://localhost:8091")

(define uri-base-url
   ;always points to genenetwork.org!
  "http://genenetwork.org")

(define (prefix)
  "Build the API URL including version" base-url)

(define* (mk-url postfix
                 #:optional (ext ""))
  "Makes a fully qualified URL by adding the path (postfix+ext) to the API URL.
   If there is an existing http+hostname no prefix is added"
  (match (string-match "^http:" postfix)
    (#f (string-append (prefix) "/" postfix ext))
    (_ (string-append postfix ext))))

(define* (mk-uri postfix)
  "Add the path to the GN URI. A URI always points to http://genenetwork.org/"
  (string-append uri-base-url "/" postfix))

(define (mk-html path)
  "Create a pointer to API HTML documentation"
  (mk-url path ".html"))

(define (mk-doc path)
  "Create a pointer to API HTML documentation (doc infix)"
  (mk-html (string-append "doc/" path)))

(define (mk-meta path)
  "Create a meta URL for the API path"
  (mk-url path ".meta.json"))

(define (mk-data path)
  "Append .json for the API path. If it is not a full URL it will prepend the host"
  (mk-url path ".json"))

(define (mk-term postfix)
  (mk-html (string-append "term" "/" postfix)))

(define (mk-predicate postfix)
  (mk-html (string-append "predicate" "/" postfix)))

(define (mk-id postfix)
  "Expand URL to make $api/id/identifier.
   If postfix is a path it will only apply the last element"
  (mk-url (string-append "id" "/"
                         (url-parse-id postfix))))

(define (mk-gnid postfix)
  "Expand URL to make http://genenetwork.org/id/identifier.
   If postfix is a path it will only apply the last element"
  (mk-uri (string-append "id" "/"
                         (url-parse-id postfix))))