From 2d49dd2c2b018c331f8322e100a46dc9e89b7e4e Mon Sep 17 00:00:00 2001 From: Yann Hodique Date: Mon, 25 Nov 2013 19:55:38 -0800 Subject: [PATCH] add users api --- gh-users.el | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 gh-users.el diff --git a/gh-users.el b/gh-users.el new file mode 100644 index 0000000..1ec709b --- /dev/null +++ b/gh-users.el @@ -0,0 +1,120 @@ +;;; gh-users.el --- users module for gh.el + +;; Copyright (C) 2013 Yann Hodique + +;; Author: Yann Hodique +;; Keywords: + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + +;;;###autoload +(require 'eieio) + +(require 'gh-api) +(require 'gh-auth) +(require 'gh-common) + +;;;###autoload +(defclass gh-users-api (gh-api-v3) + ((users-cls :allocation :class :initform gh-users-user)) + "Users API") + +;;;###autoload +(defclass gh-users-user (gh-user-stub) + ((gravatar-id :initarg :gravatar-id) + (html-url :initarg :html-url) + (followers-url :initarg :followers-url) + (following-url :initarg :following-url) + (gists-url :initarg :gists-url) + (starred-url :initarg :starred-url) + (subscriptions-url :initarg :subscriptions-url) + (organizations-url :initarg :organizations-url) + (repos-url :initarg :repos-url) + (events-url :initarg :events-url) + (received-events-url :initarg :received-events-url) + (type :initarg :type) + (site-admin :initarg :site-admin) + (name :initarg :name) + (company :initarg :company) + (blog :initarg :blog) + (location :initarg :location) + (email :initarg :email) + (hireable :initarg :hireable) + (bio :initarg :bio) + (public-repos :initarg :public-repos) + (public-gists :initarg :public-gists) + (followers :initarg :followers) + (following :initarg :following) + (created-at :initarg :created-at) + (update-at :initarg :update-at))) + +(defmethod gh-object-read-into ((user gh-users-user) data) + (call-next-method) + (with-slots (gravatar-id html-url followers-url following-url + gists-url starred-url subscriptions-url organizations-url + repos-url events-url received-events-url type site-admin name + company blog location email hireable bio public-repos + public-gists followers following created-at update-at) + user + (setq gravatar-id (gh-read data 'gravatar_id) + html-url (gh-read data 'html_url) + following-url (gh-read data 'following_url) + gists-url (gh-read data 'gists_url) + starred-url (gh-read data 'starred_url) + subscriptions-url (gh-read data 'subscriptions_url) + organizations-url (gh-read data 'organizations_url) + repos-url (gh-read data 'repos_url) + events-url (gh-read data 'events_url) + received-events-url (gh-read data 'received-events_url) + type (gh-read data 'type) + site-admin (gh-read data 'site_admin) + name (gh-read data 'name) + company (gh-read data 'company) + blog (gh-read data 'blog) + location (gh-read data 'location) + email (gh-read data 'email) + hireable (gh-read data 'hireable) + bio (gh-read data 'bio) + public-repos (gh-read data 'public_repos) + public-gists (gh-read data 'public_gists) + followers (gh-read data 'followers) + following (gh-read data 'following) + created-at (gh-read data 'created_at) + update-at (gh-read data 'update_at)))) + +(defmethod gh-users-get ((api gh-users-api) &optional username) + (gh-api-authenticated-request + api (gh-object-reader (oref api users-cls)) "GET" + (if username + (format "/users/%s" username) + "/user"))) + +(defmethod gh-users-list ((api gh-users-api)) + (gh-api-authenticated-request + api (gh-object-list-reader (oref api users-cls)) "GET" + "/users")) + +(provide 'gh-users) +;;; gh-users.el ends here