#+Title: GHub+  [[https://travis-ci.org/vermiculus/ghub-plus][https://travis-ci.org/vermiculus/ghub-plus.svg?branch=master]] [[https://melpa.org/#/ghub%2B][file:https://melpa.org/packages/ghub+-badge.svg]]

GHub+ is a thick GitHub API client built using =API-Wrap.el= on =ghub=,
[[https://github.com/tarsius/ghub][the minuscule GitHub API client]].

* Tour by Example
#+BEGIN_SRC elisp
  ;;; GET /issues
  (ghubp-get-issues)

  ;;; GET /issues?state=closed
  (ghubp-get-issues :state 'closed)

  (let ((repo (ghub-get "/repos/magit/magit")))
    (list
     ;; Magit's issues
     ;; GET /repos/magit/magit/issues
     (ghubp-get-repos-owner-repo-issues repo)

     ;; Magit's closed issues labeled 'easy'
     ;; GET /repos/magit/magit/issues?state=closed&labels=easy
     (ghubp-get-repos-owner-repo-issues repo
       :state 'closed :labels "easy")))
#+END_SRC

* Contributing
  :PROPERTIES:
  :ID:       1F4644C5-72AC-49DA-A83C-443AA7F9651E
  :END:
Contributions should be made via pull-request.  When it makes sense,
be sure your addition works when passing around object-alists.

* Introduction
This package is a thick client built on =ghub=, the miniscule GitHub
client.  Its aim is to provide the common functionality most helpful
for application development.

Since =ghub+= is built on =ghub=, any and all features you find lacking in
=ghub+= can be done with =ghub= without needing to dig into either
package's internals.  However, =ghub+= provides some macros you may find
helpful in development; see [[id:7208D9BD-1524-4701-A061-70861C5376DA][Extending]] for details.  If you find your
function to be particularly helpful or believe it to be a common use
case, please consider [[id:1F4644C5-72AC-49DA-A83C-443AA7F9651E][contributing]] it to the library!

* Extending
  :PROPERTIES:
  :ID:       7208D9BD-1524-4701-A061-70861C5376DA
  :END:
To simplify application development, tools have been developed to
shorten repetitive syntax and provide useful syntax for common
problems that might not otherwise have good, succinct solutions.

** ~(ghubp-unpaginate &rest BODY)~
Wraps the form in a let-binding where ~ghub-unpaginate~ is ~t~.  Forms
executed here will continue to poll the API until all output has been
received.

** ~(defapi{get,put,head,post,patch,delete}-ghubp ...)~
These wonderful macros super-charge the standard ~ghub-{get,put,...}~
functions into documentation-generating, resource-wrapping machines.
Refer to their documentation or see [[https://github.com/vermiculus/apiwrap.el#using-the-generated-macros][apiwrap.el]] for a short tutorial in
using these macros.
# Local Variables:
# org-id-link-to-org-use-id: t
# End:
