diff --git a/requirements.txt b/requirements.txt --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,8 @@ +nose requests +requests_mock +setuptools SQLAlchemy - +testing.postgresql +xmltodict +celery diff --git a/swh/lister/bitbucket/lister.py b/swh/lister/bitbucket/lister.py new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/lister.py @@ -0,0 +1,36 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from urllib import parse + +from swh.lister.bitbucket.models import BitBucketModel +from swh.lister.core.indexing_lister import SWHIndexingHttpLister + + +class BitBucketLister(SWHIndexingHttpLister): + PATH_TEMPLATE = '/repositories?after=%s' + MODEL = BitBucketModel + + def get_model_from_repo(self, repo): + return { + 'uid': repo['uuid'], + 'indexable': repo['created_on'], + 'name': repo['name'], + 'full_name': repo['full_name'], + 'html_url': repo['links']['html']['href'], + 'origin_url': repo['links']['clone'][0]['href'], + 'origin_type': repo['scm'], + 'description': repo['description'] + } + + def get_next_target_from_response(self, response): + body = response.json() + if 'next' in body: + return parse.unquote(body['next'].split('after=')[1]) + else: + return None + + def transport_response_simplified(self, response): + repos = response.json()['values'] + return [self.get_model_from_repo(repo) for repo in repos] diff --git a/swh/lister/bitbucket/models.py b/swh/lister/bitbucket/models.py new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/models.py @@ -0,0 +1,15 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from sqlalchemy import Column, String + +from swh.lister.core.models import ModelBase + + +class BitBucketModel(ModelBase): + """a BitBucket repository""" + __tablename__ = 'bitbucket_repos' + + uid = Column(String, primary_key=True) + indexable = Column(String, index=True) diff --git a/swh/lister/bitbucket/tasks.py b/swh/lister/bitbucket/tasks.py new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/tasks.py @@ -0,0 +1,28 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from swh.lister.core.tasks import (IndexingDiscoveryListerTask, + IndexingRangeListerTask, + IndexingRefreshListerTask, ListerTaskBase) + +from .lister import BitBucketLister + + +class BitBucketListerTask(ListerTaskBase): + def new_lister(self): + return BitBucketLister(lister_name='bitbucket.com', + api_baseurl='https://api.bitbucket.org/2.0') + + +class IncrementalBitBucketLister(BitBucketListerTask, + IndexingDiscoveryListerTask): + task_queue = 'swh_lister_bitbucket_discover' + + +class RangeBitBucketLister(BitBucketListerTask, IndexingRangeListerTask): + task_queue = 'swh_lister_bitbucket_refresh' + + +class FullBitBucketRelister(BitBucketListerTask, IndexingRefreshListerTask): + task_queue = 'swh_lister_bitbucket_refresh' diff --git a/swh/lister/bitbucket/tests/api_empty_response.json b/swh/lister/bitbucket/tests/api_empty_response.json new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/tests/api_empty_response.json @@ -0,0 +1,4 @@ +{ + "pagelen": 10, + "values": [] +} diff --git a/swh/lister/bitbucket/tests/api_response.json b/swh/lister/bitbucket/tests/api_response.json new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/tests/api_response.json @@ -0,0 +1,806 @@ +{ + "pagelen": 10, + "values": [ + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "app-template", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/bebac/app-template", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/bebac/app-template", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template" + }, + "html": { + "href": "https://bitbucket.org/bebac/app-template" + }, + "avatar": { + "href": "https://bitbucket.org/bebac/app-template/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/bebac/app-template/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{0cf80a6e-e91f-4a4c-a61b-8c8ff51ca3ec}", + "language": "c++", + "created_on": "2008-07-12T07:44:01.476818+00:00", + "full_name": "bebac/app-template", + "has_issues": true, + "owner": { + "username": "bebac", + "display_name": "Benny Bach", + "type": "user", + "uuid": "{d1a83a2a-be1b-4034-8c1d-386a6690cddb}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/bebac" + }, + "html": { + "href": "https://bitbucket.org/bebac/" + }, + "avatar": { + "href": "https://bitbucket.org/account/bebac/avatar/32/" + } + } + }, + "updated_on": "2011-10-05T15:36:19.409008+00:00", + "size": 71548, + "type": "repository", + "slug": "app-template", + "is_private": false, + "description": "Basic files and directory structure for a C++ project. Intended as a starting point for a new project. Includes a basic cross platform core library." + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "mercurialeclipse", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/bastiand/mercurialeclipse", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/bastiand/mercurialeclipse", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse" + }, + "html": { + "href": "https://bitbucket.org/bastiand/mercurialeclipse" + }, + "avatar": { + "href": "https://bitbucket.org/bastiand/mercurialeclipse/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/bastiand/mercurialeclipse/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{f7a08670-bdd1-4465-aa97-7a5ce8d1a25b}", + "language": "", + "created_on": "2008-07-12T09:37:06.254721+00:00", + "full_name": "bastiand/mercurialeclipse", + "has_issues": false, + "owner": { + "username": "bastiand", + "display_name": "Bastian Doetsch", + "type": "user", + "uuid": "{3742cd48-adad-4205-ab0d-04fc992a1728}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/bastiand" + }, + "html": { + "href": "https://bitbucket.org/bastiand/" + }, + "avatar": { + "href": "https://bitbucket.org/account/bastiand/avatar/32/" + } + } + }, + "updated_on": "2011-09-17T02:36:59.062596+00:00", + "size": 6445145, + "type": "repository", + "slug": "mercurialeclipse", + "is_private": false, + "description": "my own repo for MercurialEclipse." + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "sandboxpublic", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/aleax/sandboxpublic", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/aleax/sandboxpublic", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic" + }, + "html": { + "href": "https://bitbucket.org/aleax/sandboxpublic" + }, + "avatar": { + "href": "https://bitbucket.org/aleax/sandboxpublic/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/aleax/sandboxpublic/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{452c716c-a1ce-42bc-a95b-d38da49cbb37}", + "language": "", + "created_on": "2008-07-14T01:59:23.568048+00:00", + "full_name": "aleax/sandboxpublic", + "has_issues": true, + "owner": { + "username": "aleax", + "display_name": "Alex Martelli", + "type": "user", + "uuid": "{1155d94d-fb48-43fe-a431-ec07c900b636}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/aleax" + }, + "html": { + "href": "https://bitbucket.org/aleax/" + }, + "avatar": { + "href": "https://bitbucket.org/account/aleax/avatar/32/" + } + } + }, + "updated_on": "2012-06-22T21:55:28.753727+00:00", + "size": 3120, + "type": "repository", + "slug": "sandboxpublic", + "is_private": false, + "description": "to help debug ACLs for private vs public bitbucket repos" + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "otrsfix-ng", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/adiakin/otrsfix-ng", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/adiakin/otrsfix-ng", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng" + }, + "html": { + "href": "https://bitbucket.org/adiakin/otrsfix-ng" + }, + "avatar": { + "href": "https://bitbucket.org/adiakin/otrsfix-ng/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/adiakin/otrsfix-ng/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{05b1b9dc-a7b6-46d6-ae1b-e66a17aa4f55}", + "language": "", + "created_on": "2008-07-15T06:14:39.306314+00:00", + "full_name": "adiakin/otrsfix-ng", + "has_issues": true, + "owner": { + "username": "adiakin", + "display_name": "adiakin", + "type": "user", + "uuid": "{414012b5-1ac9-4096-9f46-8893cfa3cda5}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/adiakin" + }, + "html": { + "href": "https://bitbucket.org/adiakin/" + }, + "avatar": { + "href": "https://bitbucket.org/account/adiakin/avatar/32/" + } + } + }, + "updated_on": "2016-06-02T18:56:34.868302+00:00", + "size": 211631, + "type": "repository", + "slug": "otrsfix-ng", + "is_private": false, + "description": "OTRS greasemonkey extension" + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "pida-pypaned", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/aafshar/pida-pypaned", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/aafshar/pida-pypaned", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned" + }, + "html": { + "href": "https://bitbucket.org/aafshar/pida-pypaned" + }, + "avatar": { + "href": "https://bitbucket.org/aafshar/pida-pypaned/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/aafshar/pida-pypaned/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{94cb830a-1784-4e51-9791-8f5cc93990a9}", + "language": "", + "created_on": "2008-07-16T22:47:38.682491+00:00", + "full_name": "aafshar/pida-pypaned", + "has_issues": true, + "owner": { + "username": "aafshar", + "display_name": "Ali Afshar", + "type": "user", + "uuid": "{bcb87110-6a92-41fc-b95c-680feeea5512}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/aafshar" + }, + "html": { + "href": "https://bitbucket.org/aafshar/" + }, + "avatar": { + "href": "https://bitbucket.org/account/aafshar/avatar/32/" + } + } + }, + "updated_on": "2012-06-22T21:55:42.451431+00:00", + "size": 4680652, + "type": "repository", + "slug": "pida-pypaned", + "is_private": false, + "description": "" + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "TLOMM-testing", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/tgrimley/tlomm-testing", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/tgrimley/tlomm-testing", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing" + }, + "html": { + "href": "https://bitbucket.org/tgrimley/tlomm-testing" + }, + "avatar": { + "href": "https://bitbucket.org/tgrimley/tlomm-testing/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/tgrimley/tlomm-testing/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{95283ca1-f77e-40d6-b3ed-5bfae6ed2d15}", + "language": "", + "created_on": "2008-07-18T21:05:17.750587+00:00", + "full_name": "tgrimley/tlomm-testing", + "has_issues": true, + "owner": { + "username": "tgrimley", + "display_name": "Thomas Grimley", + "type": "user", + "uuid": "{c958a08f-4669-4c77-81ec-4e2faa8ebf35}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/tgrimley" + }, + "html": { + "href": "https://bitbucket.org/tgrimley/" + }, + "avatar": { + "href": "https://bitbucket.org/account/tgrimley/avatar/32/" + } + } + }, + "updated_on": "2012-06-22T21:55:46.627825+00:00", + "size": 3128, + "type": "repository", + "slug": "tlomm-testing", + "is_private": false, + "description": "File related to testing functionality of TLOMM->TLOTTS transition" + }, + { + "scm": "hg", + "website": "", + "has_wiki": true, + "name": "test", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/tingle/test", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/tingle/test", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test" + }, + "html": { + "href": "https://bitbucket.org/tingle/test" + }, + "avatar": { + "href": "https://bitbucket.org/tingle/test/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/tingle/test/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{457953ec-fe87-41b9-b659-94756fb40ece}", + "language": "", + "created_on": "2008-07-18T22:24:31.984981+00:00", + "full_name": "tingle/test", + "has_issues": true, + "owner": { + "username": "tingle", + "display_name": "tingle", + "type": "user", + "uuid": "{dddce42b-bd19-417b-90ff-72cdbfb6eb7d}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/tingle" + }, + "html": { + "href": "https://bitbucket.org/tingle/" + }, + "avatar": { + "href": "https://bitbucket.org/account/tingle/avatar/32/" + } + } + }, + "updated_on": "2012-06-22T21:55:49.860564+00:00", + "size": 3090, + "type": "repository", + "slug": "test", + "is_private": false, + "description": "" + }, + { + "scm": "hg", + "website": "http://shaze.myopenid.com/", + "has_wiki": true, + "name": "Repository", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/Shaze/repository", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/Shaze/repository", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository" + }, + "html": { + "href": "https://bitbucket.org/Shaze/repository" + }, + "avatar": { + "href": "https://bitbucket.org/Shaze/repository/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/Shaze/repository/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{3c0b8076-caef-465a-8d08-a184459f659b}", + "language": "", + "created_on": "2008-07-18T22:39:51.380134+00:00", + "full_name": "Shaze/repository", + "has_issues": true, + "owner": { + "username": "Shaze", + "display_name": "Shaze", + "type": "user", + "uuid": "{f57817e9-bfe4-4c65-84dd-662152430323}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/Shaze" + }, + "html": { + "href": "https://bitbucket.org/Shaze/" + }, + "avatar": { + "href": "https://bitbucket.org/account/Shaze/avatar/32/" + } + } + }, + "updated_on": "2012-06-22T21:55:51.570502+00:00", + "size": 3052, + "type": "repository", + "slug": "repository", + "is_private": false, + "description": "Mine, all mine!" + }, + { + "scm": "hg", + "website": "http://bitbucket.org/copiesofcopies/identifox/", + "has_wiki": true, + "name": "identifox", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/uncryptic/identifox", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/uncryptic/identifox", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox" + }, + "html": { + "href": "https://bitbucket.org/uncryptic/identifox" + }, + "avatar": { + "href": "https://bitbucket.org/uncryptic/identifox/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/uncryptic/identifox/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{78a1a080-a77e-4d0d-823a-b107484477a8}", + "language": "", + "created_on": "2008-07-19T00:33:14.065946+00:00", + "full_name": "uncryptic/identifox", + "has_issues": true, + "owner": { + "username": "uncryptic", + "display_name": "Uncryptic Communications", + "type": "user", + "uuid": "{db87bb9a-9980-4840-bd4a-61f7748a56b4}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/uncryptic" + }, + "html": { + "href": "https://bitbucket.org/uncryptic/" + }, + "avatar": { + "href": "https://bitbucket.org/account/uncryptic/avatar/32/" + } + } + }, + "updated_on": "2008-07-19T00:33:14+00:00", + "size": 1918, + "type": "repository", + "slug": "identifox", + "is_private": false, + "description": "TwitterFox, modified to work with Identi.ca, including cosmetic and subtle code changes. For the most part, the code is nearly identical to the TwitterFox base: http://www.naan.net/trac/wiki/TwitterFox" + }, + { + "scm": "hg", + "website": "http://rforce.rubyforge.org", + "has_wiki": false, + "name": "rforce", + "links": { + "watchers": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/watchers" + }, + "branches": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/refs/branches" + }, + "tags": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/refs/tags" + }, + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/commits" + }, + "clone": [ + { + "href": "https://bitbucket.org/undees/rforce", + "name": "https" + }, + { + "href": "ssh://hg@bitbucket.org/undees/rforce", + "name": "ssh" + } + ], + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce" + }, + "html": { + "href": "https://bitbucket.org/undees/rforce" + }, + "avatar": { + "href": "https://bitbucket.org/undees/rforce/avatar/32/" + }, + "hooks": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/hooks" + }, + "forks": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/forks" + }, + "downloads": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/downloads" + }, + "pullrequests": { + "href": "https://api.bitbucket.org/2.0/repositories/undees/rforce/pullrequests" + } + }, + "fork_policy": "allow_forks", + "uuid": "{ec2ffee7-bfcd-4e95-83c8-22ac31e69fa3}", + "language": "", + "created_on": "2008-07-19T06:16:43.044743+00:00", + "full_name": "undees/rforce", + "has_issues": false, + "owner": { + "username": "undees", + "display_name": "Ian Dees", + "type": "user", + "uuid": "{6ff66a34-6412-4f28-bf57-707a2a5c6d7b}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/undees" + }, + "html": { + "href": "https://bitbucket.org/undees/" + }, + "avatar": { + "href": "https://bitbucket.org/account/undees/avatar/32/" + } + } + }, + "updated_on": "2015-02-09T00:48:15.408680+00:00", + "size": 338402, + "type": "repository", + "slug": "rforce", + "is_private": false, + "description": "A simple, usable binding to the SalesForce API." + } + ], + "next": "https://api.bitbucket.org/2.0/repositories?after=2008-07-19T19%3A53%3A07.031845%2B00%3A00" +} diff --git a/swh/lister/bitbucket/tests/test_bb_lister.py b/swh/lister/bitbucket/tests/test_bb_lister.py new file mode 100644 --- /dev/null +++ b/swh/lister/bitbucket/tests/test_bb_lister.py @@ -0,0 +1,20 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import re +import unittest + +from swh.lister.bitbucket.lister import BitBucketLister +from swh.lister.core.tests.test_lister import IndexingHttpListerTesterBase + + +class BitBucketListerTester(IndexingHttpListerTesterBase, unittest.TestCase): + Lister = BitBucketLister + test_re = re.compile(r'/repositories\?after=([^?&]+)') + lister_subdir = 'bitbucket' + good_api_response_file = 'api_response.json' + bad_api_response_file = 'api_empty_response.json' + first_index = '2008-07-12T07:44:01.476818+00:00' + last_index = '2008-07-19T06:16:43.044743+00:00' + entries_per_page = 10 diff --git a/swh/lister/core/abstractattribute.py b/swh/lister/core/abstractattribute.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/abstractattribute.py @@ -0,0 +1,24 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + + +class AbstractAttribute: + """AbstractAttributes in a base class must be overridden by the subclass. + + It's like the @abc.abstractmethod decorator, but for things that are + explicitly attributes/properties, not methods, without the need for + empty method def boilerplate. Like abc.abstractmethod, the class + containing AbstractAttributes must inherit abc.ABC or use the + abc.ABCMeta metaclass. + + Usage Example: + import abc + class ClassContainingAnAbstractAttribute(abc.ABC): + foo = AbstractAttribute('descriptive docstring for foo') + """ + __isabstractmethod__ = True + + def __init__(self, docstring=None): + if docstring is not None: + self.__doc__ = 'AbstractAttribute: ' + docstring diff --git a/swh/lister/github/db_utils.py b/swh/lister/core/db_utils.py rename from swh/lister/github/db_utils.py rename to swh/lister/core/db_utils.py diff --git a/swh/lister/core/indexing_lister.py b/swh/lister/core/indexing_lister.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/indexing_lister.py @@ -0,0 +1,210 @@ +# Copyright (C) 2015-2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import logging + +from sqlalchemy import func + +from .lister_transports import SWHListerHttpTransport +from .lister_base import SWHListerBase + + +class SWHIndexingLister(SWHListerBase): + """Lister* intermediate class for any service that follows the pattern: + -- The service must report at least one stable unique identifier, + known herein as the UID value, for every listed repository. + -- If the service splits the list of repositories into sublists, + it must report at least one stable and sorted index identifier + for every listed repository, known herein as the indexable value, + which can be used as part of the service endpoint query to request + a sublist beginning from that index. This might be the UID if the + UID is monotonic. + -- Client sends a request to list repositories starting from a given + index. + -- Client receives structured (json/xml/etc) response with information + about a sequential series of repositories starting from that index + and, if necessary/available, some indication of the URL or index + for fetching the next series of repository data. + + * - See swh.lister.core.lister_base.SWHListerBase for more details. + + This class cannot be instantiated. To create a new Lister for a source + code listing service that follows the model described above, you must + subclass this class and provide the required overrides in addition to + any unmet implementation/override requirements of this class's base. + (see parent class and member docstrings for details) + + Required Overrides: + def get_next_target_from_response + """ + + @abc.abstractmethod + def get_next_target_from_response(self, response): + """Find the next server endpoint identifier given the entire response. + + Implementation of this method depends on the server API spec + and the shape of the network response object returned by the + transport_request method. + + Args: + response (transport response): response page from the server + Returns: + index of next page, possibly extracted from a next href url + """ + pass + + # You probably don't need to override anything below this line. + + def filter_before_inject(self, models_list): + """Overrides SWHListerBase.filter_before_inject + + Bounds query results by this Lister's set max_index. + """ + models_list = [ + m for m in models_list + if self.is_within_bounds(m['indexable'], None, self.max_index) + ] + return models_list + + def db_query_range(self, start, end): + """Look in the db for a range of repositories with indexable + values in the range [start, end] + + Args: + start (model indexable type): start of desired indexable range + end (model indexable type): end of desired indexable range + Returns: + a list of sqlalchemy.ext.declarative.declarative_base objects + with indexable values within the given range + """ + retlist = self.db_session.query(self.MODEL) + if start is not None: + retlist.filter(self.MODEL.indexable >= start) + if end is not None: + retlist.filter(self.MODEL.indexable <= end) + return retlist + + def db_partition_indices(self, partition_size): + """Describe an index-space compartmentalization of the db table + in equal sized chunks. This is used to describe min&max bounds for + parallelizing fetch tasks. + + Args: + partition_size (int): desired size to make each partition + Returns: + a list of tuples (begin, end) of indexable value that + declare approximately equal-sized ranges of existing + repos + """ + n = self.db_num_entries() + + partitions = [] + partition_size = min(partition_size, n) + prev_index = None + for i in range(0, n-1, partition_size): + # indexable column from the ith row + index = self.db_session.query(self.MODEL.indexable) \ + .order_by(self.MODEL.indexable).offset(i).first() + if index is not None and prev_index is not None: + partitions.append((prev_index, index)) + prev_index = index + + partitions.append((prev_index, self.db_last_index())) + return partitions + + def db_last_index(self): + """Look in the db for the largest indexable value + + Returns: + the largest indexable value of all repos in the db + """ + t = self.db_session.query(func.max(self.MODEL.indexable)).first() + if t: + return t[0] + else: + return None + + def disable_deleted_repo_tasks(self, start, end, keep_these): + """Disable tasks for repos that no longer exist between start and end. + + Args: + start: beginning of range to disable + end: end of range to disable + keep_these (uid list): do not disable repos with uids in this list + """ + if end is None: + end = self.db_last_index() + + if not self.is_within_bounds(end, None, self.max_index): + end = self.max_index + + deleted_repos = self.winnow_models( + self.db_query_range(start, end), self.MODEL.uid, keep_these + ) + tasks_to_disable = [repo for repo in deleted_repos + if repo.task_id is not None] + if tasks_to_disable: + self.scheduler.disable_tasks(tasks_to_disable) + for repo in deleted_repos: + repo.task_id = None + + def run(self, min_index=None, max_index=None): + """Main entry function. Sequentially fetches repository data + from the service according to the basic outline in the class + docstring, continually fetching sublists until either there + is no next index reference given or the given next index is greater + than the desired max_index. + + Args: + min_index (indexable type): optional index to start from + max_index (indexable type): optional index to stop at + Returns: + nothing + """ + index = min_index or '' + loop_count = 0 + self.min_index = min_index + self.max_index = max_index + + while self.is_within_bounds(index, self.min_index, self.max_index): + logging.info('listing repos starting at %s' % index) + + response, injected_repos = self.ingest_data(index) + + next_index = self.get_next_target_from_response(response) + + # Determine if any repos were deleted, and disable their tasks. + + keep_these = [k for k in injected_repos.keys()] + self.disable_deleted_repo_tasks(index, next_index, keep_these) + + # termination condition + + if (next_index is None) or (next_index == index): + logging.info('stopping after index %s, no next link found' % + index) + break + else: + index = next_index + + loop_count += 1 + if loop_count == 20: + logging.info('flushing updates') + loop_count = 0 + self.db_session.commit() + self.db_session = self.mk_session() + + self.db_session.commit() + self.db_session = self.mk_session() + + +class SWHIndexingHttpLister(SWHListerHttpTransport, SWHIndexingLister): + """Convenience class for ensuring right lookup and init order + when combining SWHIndexingLister and SWHListerHttpTransport.""" + def __init__(self, lister_name=None, api_baseurl=None, + override_config=None): + SWHListerHttpTransport.__init__(self, api_baseurl=api_baseurl) + SWHIndexingLister.__init__(self, lister_name=lister_name, + override_config=override_config) diff --git a/swh/lister/core/lister_base.py b/swh/lister/core/lister_base.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/lister_base.py @@ -0,0 +1,492 @@ +# Copyright (C) 2015-2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import gzip +import logging +import os +import re +import time +from datetime import datetime + +from sqlalchemy import create_engine, func +from sqlalchemy.orm import sessionmaker + +from swh.core import config +from swh.scheduler.backend import SchedulerBackend +from swh.storage import get_storage + +from .abstractattribute import AbstractAttribute + + +class FetchError(RuntimeError): + def __init__(self, response): + self.response = response + + def __str__(self): + return repr(self.response) + + +class SWHListerBase(abc.ABC, config.SWHConfig): + """Lister core base class. + Generally a source code hosting service provides an API endpoint + for listing the set of stored repositories. A Lister is the discovery + service responsible for finding this list, all at once or sequentially + by parts, and queueing local tasks to fetch and ingest the referenced + repositories. + + The core method in this class is ingest_data. Any subclasses should be + calling this method one or more times to fetch and ingest data from API + endpoints. See swh.lister.core.lister_base.SWHIndexingLister for + example usage. + + This class cannot be instantiated. Any instantiable Lister descending + from SWHListerBase must provide at least the required overrides. + (see member docstrings for details): + + Required Overrides: + MODEL + def transport_request + def transport_response_to_string + def transport_response_simplified + def transport_quota_check + + Optional Overrides: + def filter_before_inject + def is_within_bounds + """ + + MODEL = AbstractAttribute('Subclass type (not instance)' + ' of swh.lister.core.models.ModelBase' + ' customized for a specific service.') + + @abc.abstractmethod + def transport_request(self, identifier): + """Given a target endpoint identifier to query, try once to request it. + + Implementation of this method determines the network request protocol. + + Args: + identifier (string): unique identifier for an endpoint query. + e.g. If the service indexes lists of repositories by date and + time of creation, this might be that as a formatted string. Or + it might be an integer UID. Or it might be nothing. + It depends on what the service needs. + Returns: + the entire request response + Raises: + Will catch internal transport-dependent connection exceptions and + raise swh.lister.core.lister_base.FetchError instead. Other + non-connection exceptions should propogate unchanged. + """ + pass + + @abc.abstractmethod + def transport_response_to_string(self, response): + """Convert the server response into a formatted string for logging. + + Implementation of this method depends on the shape of the network + response object returned by the transport_request method. + + Args: + response: the server response + Returns: + a pretty string of the response + """ + pass + + @abc.abstractmethod + def transport_response_simplified(self, response): + """Convert the server response into list of a dict for each repo in the + response, mapping columns in the lister's MODEL class to repo data. + + Implementation of this method depends on the server API spec and the + shape of the network response object returned by the transport_request + method. + + Args: + response: response object from the server. + Returns: + list of repo MODEL dicts + ( eg. [{'uid': r['id'], etc.} for r in response.json()] ) + """ + pass + + @abc.abstractmethod + def transport_quota_check(self, response): + """Check server response to see if we're hitting request rate limits. + + Implementation of this method depends on the server communication + protocol and API spec and the shape of the network response object + returned by the transport_request method. + + Args: + response (session response): complete API query response + Returns: + 1) must retry request? True/False + 2) seconds to delay if True + """ + pass + + def filter_before_inject(self, models_list): + """Function run after transport_response_simplified but before injection + into the local db and creation of workers. Can be used to eliminate + some of the results if necessary. + + MAY BE OVERRIDDEN if an intermediate Lister class needs to filter + results before injection without requiring every child class to do so. + + Args: + models_list: list of dicts returned by + transport_response_simplified. + Returns: + models_list with entries changed according to custom logic. + """ + pass + + def is_within_bounds(self, inner, lower=None, upper=None): + """See if a sortable value is inside the range [lower,upper]. + + MAY BE OVERRIDDEN, for example if the server indexable* key is + technically sortable but not automatically so. + + * - ( see: swh.lister.core.indexing_lister.SWHIndexingLister ) + + Args: + inner (sortable type): the value being checked + lower (sortable type): optional lower bound + upper (sortable type): optional upper bound + Returns: + whether inner is confined by the optional lower and upper bounds + """ + try: + if lower is None and upper is None: + return True + elif lower is None: + ret = inner <= upper + elif upper is None: + ret = inner >= lower + else: + ret = lower <= inner <= upper + + self.string_pattern_check(inner, lower, upper) + except Exception as e: + logging.error(str(e) + ': %s, %s, %s' % + (('inner=%s%s' % (type(inner), inner)), + ('lower=%s%s' % (type(lower), lower)), + ('upper=%s%s' % (type(upper), upper))) + ) + raise + + return ret + + # You probably don't need to override anything below this line. + + DEFAULT_CONFIG = { + 'storage': ('dict', { + 'cls': 'remote', + 'args': { + 'url': 'http://localhost:5000/' + }, + }), + 'scheduling_db': ('str', 'dbname=softwareheritage-scheduler'), + } + + @property + def CONFIG_BASE_FILENAME(self): # noqa: N802 + return 'lister-%s' % self.lister_name + + @property + def ADDITIONAL_CONFIG(self): # noqa: N802 + return { + 'lister_db_url': + ('str', 'postgresql:///lister-%s' % self.lister_name), + 'credentials': + ('list[dict]', []), + 'cache_responses': + ('bool', False), + 'cache_dir': + ('str', '~/.cache/swh/lister/%s' % self.lister_name), + } + + INITIAL_BACKOFF = 10 + MAX_RETRIES = 7 + CONN_SLEEP = 10 + + def __init__(self, lister_name=None, override_config=None): + self.backoff = self.INITIAL_BACKOFF + if lister_name is None: + raise NameError("Every lister must be assigned a lister_name.") + self.lister_name = lister_name # 'github?', 'bitbucket?', 'foo.com?' + self.config = self.parse_config_file( + base_filename=self.CONFIG_BASE_FILENAME, + additional_configs=[self.ADDITIONAL_CONFIG] + ) + self.config['cache_dir'] = os.path.expanduser(self.config['cache_dir']) + if self.config['cache_responses']: + config.prepare_folders(self.config, ['cache_dir']) + + if override_config: + self.config.update(override_config) + + self.storage = get_storage(**self.config['storage']) + self.scheduler = SchedulerBackend( + scheduling_db=self.config['scheduling_db'], + ) + self.db_engine = create_engine(self.config['lister_db_url']) + self.mk_session = sessionmaker(bind=self.db_engine) + self.db_session = self.mk_session() + + def reset_backoff(self): + """Reset exponential backoff timeout to initial level.""" + self.backoff = self.INITIAL_BACKOFF + + def back_off(self): + """Get next exponential backoff timeout.""" + ret = self.backoff + self.backoff *= 10 + return ret + + def safely_issue_request(self, identifier): + """Make network request with retries, rate quotas, and response logs. + + Protocol is handled by the implementation of the transport_request + method. + + Args: + identifier: resource identifier + Returns: + server response + """ + retries_left = self.MAX_RETRIES + while retries_left > 0: + try: + r = self.transport_request(identifier) + except FetchError: + # network-level connection error, try again + logging.warn('connection error on %s: sleep for %d seconds' % + (identifier, self.CONN_SLEEP)) + time.sleep(self.CONN_SLEEP) + retries_left -= 1 + continue + + # detect throttling + must_retry, delay = self.transport_quota_check(r) + if must_retry: + logging.warn('rate limited on %s: sleep for %f seconds' % + (identifier, delay)) + time.sleep(delay) + else: # request ok + break + + retries_left -= 1 + + if not retries_left: + logging.warn('giving up on %s: max retries exceeded' % identifier) + + do_cache = self.config['cache_responses'] + if do_cache: + self.save_response(r) + + return r + + def db_query_equal(self, key, value): + """Look in the db for a row with key == value + + Args: + key: column key to look at + value: value to look for in that column + Returns: + sqlalchemy.ext.declarative.declarative_base object + with the given key == value + """ + if isinstance(key, str): + key = self.MODEL.__dict__[key] + return self.db_session.query(self.MODEL) \ + .filter(key == value).first() + + def winnow_models(self, mlist, key, to_remove): + """Given a list of models, remove any with matching + some member of a list of values. + + Args: + mlist (list of model rows): the initial list of models + key (column): the column to filter on + to_remove (list): if anything in mlist has column equal to + one of the values in to_remove, it will be removed from the + result + Returns: + A list of model rows starting from mlist minus any matching rows + """ + if isinstance(key, str): + key = self.MODEL.__dict__[key] + + if to_remove: + return mlist.filter(~key.in_(to_remove)).all() + else: + return mlist.all() + + def db_num_entries(self): + """Return the known number of entries in the lister db""" + return self.db_session.query(func.count('*')).select_from(self.MODEL) \ + .scalar() + + def db_inject_repo(self, model_dict): + """Add/update a new repo to the db and mark it last_seen now. + + Args: + model_dict: dictionary mapping model keys to values + Returns: + new or updated sqlalchemy.ext.declarative.declarative_base + object associated with the injection + """ + sql_repo = self.db_query_equal('uid', model_dict['uid']) + + if not sql_repo: + sql_repo = self.MODEL(**model_dict) + self.db_session.add(sql_repo) + else: + for k in model_dict: + setattr(sql_repo, k, model_dict[k]) + sql_repo.last_seen = datetime.now() + + return sql_repo + + def origin_dict(self, origin_type, origin_url): + """Return special dict format for the origins list + + Args: + origin_type (string) + origin_url (string) + Returns: + the same information in a different form + """ + return { + 'type': origin_type, + 'url': origin_url, + } + + def task_dict(self, origin_type, origin_url): + """Return special dict format for the tasks list + + Args: + origin_type (string) + origin_url (string) + Returns: + the same information in a different form + """ + return { + 'type': 'origin-update-%s' % origin_type, + 'arguments': { + 'args': [ + origin_url, + ], + 'kwargs': {}, + }, + 'next_run': datetime.now(), + } + + def string_pattern_check(self, a, b, c=None): + """When comparing indexable types in is_within_bounds, complex strings + may not be allowed to differ in basic structure. If they do, it + could be a sign of not understanding the data well. For instance, + an ISO 8601 time string cannot be compared against its urlencoded + equivalent, but this is an easy mistake to accidentally make. This + method acts as a friendly sanity check. + + Args: + a (string): inner component of the is_within_bounds method + b (string): lower component of the is_within_bounds method + c (string): upper component of the is_within_bounds method + Returns: + nothing + Raises: + TypeError if strings a, b, and c don't conform to the same basic + pattern. + """ + if isinstance(a, str): + a_pattern = re.sub('[a-zA-Z0-9]', + '[a-zA-Z0-9]', + re.escape(a)) + if (isinstance(b, str) and (re.match(a_pattern, b) is None) + or isinstance(c, str) and (re.match(a_pattern, c) is None)): + logging.debug(a_pattern) + raise TypeError('incomparable string patterns detected') + + def inject_repo_data_into_db(self, models_list): + """Inject data into the db. + + Args: + models_list: list of dicts mapping keys from the db model + for each repo to be injected + Returns: + dict of uid:sql_repo pairs + """ + injected_repos = {} + for m in models_list: + injected_repos[m['uid']] = self.db_inject_repo(m) + return injected_repos + + def create_missing_origins_and_tasks(self, models_list, injected_repos): + """Find any newly created db entries that don't yet have tasks or + origin objects assigned. + + Args: + models_list: a list of dicts mapping keys in the db model for + each repo + injected_repos: dict of uid:sql_repo pairs that have just + been created + Returns: + Nothing. Modifies injected_repos. + """ + for m in models_list: + ir = injected_repos[m['uid']] + if not ir.origin_id: + ir.origin_id = self.storage.origin_add_one( + self.origin_dict(m['origin_type'], m['origin_url']) + ) + if not ir.task_id: + ir.task_id = self.scheduler.create_tasks( + [self.task_dict(m['origin_type'], m['origin_url'])] + )['id'] + + def ingest_data(self, identifier): + """The core data fetch sequence. Request server endpoint. Simplify and + filter response list of repositories. Inject repo information into + local db. Queue loader tasks for linked repositories. + + Args: + identifier: Resource identifier. + """ + # Request (partial?) list of repositories info + response = self.safely_issue_request(identifier) + models_list = self.transport_response_simplified(response) + models_list = self.filter_before_inject(models_list) + # inject into local db + injected = self.inject_repo_data_into_db(models_list) + # queue workers + self.create_missing_origins_and_tasks(models_list, injected) + return response, injected + + def save_response(self, response): + """Log the response from a server request to a cache dir. + + Args: + response: full server response + cache_dir: system path for cache dir + Returns: + nothing + """ + def escape_url_path(p): + return p.replace('/', '__') + + fname = os.path.join( + self.config['cache_dir'], + escape_url_path(response.request.path_url) + '.gz' + ) + with gzip.open(fname, 'w') as f: + f.write(bytes( + self.transport_response_to_string(response), + 'UTF-8' + )) diff --git a/swh/lister/core/lister_transports.py b/swh/lister/core/lister_transports.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/lister_transports.py @@ -0,0 +1,97 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import random +from datetime import datetime +from email.utils import parsedate +from pprint import pformat + +import requests +import xmltodict + +from .abstractattribute import AbstractAttribute +from .lister_base import FetchError + + +class SWHListerHttpTransport(abc.ABC): + """Use the Requests library for making Lister endpoint requests. + + To be used in conjunction with SWHListerBase or a subclass of it. + """ + + PATH_TEMPLATE = AbstractAttribute('string containing a python string' + ' format pattern that produces the API' + ' endpoint path for listing stored' + ' repositories when given an index.' + ' eg. "/repositories?after=%s".' + 'To be implemented in the API-specific' + ' class inheriting this.') + + def request_headers(self): + """Returns dictionary of any request headers needed by the server. + + MAY BE OVERRIDDEN if request headers are needed. + """ + return {} + + def transport_quota_check(self, response): + """Implements SWHListerBase.transport_quota_check with standard 429 code + check for HTTP with Requests library. + + MAY BE OVERRIDDEN if the server notifies about rate limits in a + non-standard way that doesn't use HTTP 429 and the Retry-After + response header. ( https://tools.ietf.org/html/rfc6585#section-4 ) + """ + if response.status_code == 429: # HTTP too many requests + retry_after = response.headers.get('Retry-After', self.back_off()) + try: + # might be seconds + return True, float(retry_after) + except: + # might be http-date + at_date = datetime(*parsedate(retry_after)[:6]) + from_now = (at_date - datetime.today()).total_seconds() + 5 + return True, max(0, from_now) + else: # response ok + self.reset_backoff() + return False, 0 + + def __init__(self, api_baseurl=None): + if not api_baseurl: + raise NameError('HTTP Lister Transport requires api_baseurl.') + self.api_baseurl = api_baseurl # eg. 'https://api.github.com' + self.session = requests.Session() + + def transport_request(self, identifier): + """Implements SWHListerBase.transport_request for HTTP using Requests. + """ + path = self.PATH_TEMPLATE % identifier + params = {} + params['headers'] = self.request_headers() or {} + creds = self.config['credentials'] + auth = random.choice(creds) if creds else None + if auth: + params['auth'] = auth + try: + return self.session.get(self.api_baseurl + path, **params) + except requests.exceptions.ConnectionError as e: + raise FetchError(e) + + def transport_response_to_string(self, response): + """Implements SWHListerBase.transport_response_to_string for HTTP given + Requests responses. + """ + s = pformat(response.request.path_url) + s += '\n#\n' + pformat(response.status_code) + s += '\n#\n' + pformat(response.headers) + s += '\n#\n' + try: # json? + s += pformat(response.json()) + except: # not json + try: # xml? + s += pformat(xmltodict.parse(response.text)) + except: # not xml + s += pformat(response.text) + return s diff --git a/swh/lister/core/models.py b/swh/lister/core/models.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/models.py @@ -0,0 +1,67 @@ +# Copyright (C) 2015-2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +from datetime import datetime + +from sqlalchemy import Column, DateTime, Integer, String +from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta + +from .abstractattribute import AbstractAttribute + +SQLBase = declarative_base() + + +class ABCSQLMeta(abc.ABCMeta, DeclarativeMeta): + pass + + +class ModelBase(SQLBase, metaclass=ABCSQLMeta): + """a common repository""" + __abstract__ = True + __tablename__ = AbstractAttribute + + uid = AbstractAttribute('Column(, primary_key=True)') + + # The value used for sorting, segmenting, or api query paging, + # because uids aren't always sequential. + indexable = AbstractAttribute('Column(, index=True)') + + name = Column(String, index=True) + full_name = Column(String, index=True) + html_url = Column(String) + origin_url = Column(String) + origin_type = Column(String) + description = Column(String) + + last_seen = Column(DateTime, nullable=False) + + task_id = Column(Integer) + origin_id = Column(Integer) + + def __init__(self, uid=None, indexable=None, name=None, full_name=None, + html_url=None, origin_url=None, origin_type=None, + description=None, task_id=None, origin_id=None): + self.uid = uid + self.last_seen = datetime.now() + + if indexable is not None: + self.indexable = indexable + if name is not None: + self.name = name + if full_name is not None: + self.full_name = full_name + if html_url is not None: + self.html_url = html_url + if origin_url is not None: + self.origin_url = origin_url + if origin_type is not None: + self.origin_type = origin_type + if description is not None: + self.description = description + + if task_id is not None: + self.task_id = task_id + if origin_id is not None: + self.origin_id = origin_id diff --git a/swh/lister/core/tasks.py b/swh/lister/core/tasks.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/tasks.py @@ -0,0 +1,71 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import random + +from celery import group +from celery.app.task import TaskType + +from swh.scheduler.task import Task + +from .abstractattribute import AbstractAttribute + + +class AbstractTaskMeta(abc.ABCMeta, TaskType): + pass + + +class ListerTaskBase(Task, metaclass=AbstractTaskMeta): + """Lister Tasks define the process of periodically requesting batches of + repository information from source code hosting services. They + instantiate Listers to do batches of work at periodic intervals. + + There are two main kinds of lister tasks: + + 1) Discovering new repositories. + 2) Refreshing the list of already discovered repositories. + + If the hosting service is indexable (according to the requirements of + SWHIndexingLister), then we can optionally partition the set of known + repositories into sub-sets to distribute the work. + + This means that there is a third possible Task type for Indexing + Listers: + 3) Discover or refresh a specific range of indices. + """ + task_queue = AbstractAttribute('Celery Task queue name') + + @abc.abstractmethod + def new_lister(self): + """Return a new lister of the appropriate type. + """ + pass + + @abc.abstractmethod + def run(self): + pass + + +class IndexingDiscoveryListerTask(ListerTaskBase): + def run(self): + lister = self.new_lister() + lister.run(min_index=lister.db_last_index(), max_index=None) + + +class IndexingRangeListerTask(ListerTaskBase): + def run(self, start, end): + lister = self.new_lister() + lister.run(min_index=start, max_index=end) + + +class IndexingRefreshListerTask(ListerTaskBase): + GROUP_SPLIT = 10000 + + def run(self): + lister = self.new_lister() + ranges = lister.db_partition_indices(self.GROUP_SPLIT) + random.shuffle(ranges) + range_task = IndexingRangeListerTask() + group(range_task.s(minv, maxv) for minv, maxv in ranges)() diff --git a/swh/lister/core/tests/test_abstractattribute.py b/swh/lister/core/tests/test_abstractattribute.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/tests/test_abstractattribute.py @@ -0,0 +1,68 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import unittest + +from nose.tools import istest + +from swh.lister.core.abstractattribute import AbstractAttribute + + +class BaseClass(abc.ABC): + v1 = AbstractAttribute + v2 = AbstractAttribute() + v3 = AbstractAttribute('changed docstring') + v4 = 'qux' + + +class BadSubclass1(BaseClass): + pass + + +class BadSubclass2(BaseClass): + v1 = 'foo' + v2 = 'bar' + + +class BadSubclass3(BaseClass): + v2 = 'bar' + v3 = 'baz' + + +class GoodSubclass(BaseClass): + v1 = 'foo' + v2 = 'bar' + v3 = 'baz' + + +class TestAbstractAttributes(unittest.TestCase): + @istest + def test_aa(self): + with self.assertRaises(TypeError): + BaseClass() + + with self.assertRaises(TypeError): + BadSubclass1() + + with self.assertRaises(TypeError): + BadSubclass2() + + with self.assertRaises(TypeError): + BadSubclass3() + + self.assertIsInstance(GoodSubclass(), GoodSubclass) + gsc = GoodSubclass() + + self.assertEqual(gsc.v1, 'foo') + self.assertEqual(gsc.v2, 'bar') + self.assertEqual(gsc.v3, 'baz') + self.assertEqual(gsc.v4, 'qux') + + @istest + def test_aa_docstrings(self): + self.assertEqual(BaseClass.v1.__doc__, AbstractAttribute.__doc__) + self.assertEqual(BaseClass.v2.__doc__, AbstractAttribute.__doc__) + self.assertEqual(BaseClass.v3.__doc__, + 'AbstractAttribute: changed docstring') diff --git a/swh/lister/core/tests/test_lister.py b/swh/lister/core/tests/test_lister.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/tests/test_lister.py @@ -0,0 +1,229 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import abc +import time +from unittest import TestCase +from unittest.mock import Mock, patch + +import requests_mock +import testing.postgresql +from nose.tools import istest +from sqlalchemy import create_engine + +from swh.lister.core.abstractattribute import AbstractAttribute + + +def noop(*args, **kwargs): + pass + + +@requests_mock.Mocker() +class IndexingHttpListerTesterBase(abc.ABC): + """Base testing class for subclasses of + swh.lister.core.indexing_lister.SWHIndexingHttpLister. + + See swh.lister.github.tests.test_gh_lister for an example of how to + customize for a specific listing service. + """ + Lister = AbstractAttribute('The lister class to test') + test_re = AbstractAttribute('Compiled regex matching the server url. Must' + ' capture the index value.') + lister_subdir = AbstractAttribute('bitbucket, github, etc.') + good_api_response_file = AbstractAttribute('Example good response body') + bad_api_response_file = AbstractAttribute('Example bad response body') + first_index = AbstractAttribute('First index in good_api_response') + last_index = AbstractAttribute('Last index in good_api_response') + entries_per_page = AbstractAttribute('Number of results in good response') + + # May need to override this if the headers are used for something + def response_headers(self, request): + return {} + + # May need to override this if the server uses non-standard rate limiting + # method. + # Please keep the requested retry delay reasonably low. + def mock_rate_quota(self, n, request, context): + self.rate_limit += 1 + context.status_code = 429 + context.headers['Retry-After'] = '1' + return '{"error":"dummy"}' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.rate_limit = 1 + self.response = None + self.fl = None + self.helper = None + if self.__class__ != IndexingHttpListerTesterBase: + self.run = TestCase.run.__get__(self, self.__class__) + else: + self.run = noop + + def request_index(self, request): + m = self.test_re.search(request.path_url) + if m and (len(m.groups()) > 0): + return m.group(1) + else: + return None + + def mock_response(self, request, context): + self.fl.reset_backoff() + self.rate_limit = 1 + context.status_code = 200 + custom_headers = self.response_headers(request) + context.headers.update(custom_headers) + if self.request_index(request) == str(self.first_index): + with open('swh/lister/%s/tests/%s' % (self.lister_subdir, + self.good_api_response_file), + 'r') as r: + return r.read() + else: + with open('swh/lister/%s/tests/%s' % (self.lister_subdir, + self.bad_api_response_file), + 'r') as r: + return r.read() + + def mock_limit_n_response(self, n, request, context): + self.fl.reset_backoff() + if self.rate_limit <= n: + return self.mock_rate_quota(n, request, context) + else: + return self.mock_response(request, context) + + def mock_limit_once_response(self, request, context): + return self.mock_limit_n_response(1, request, context) + + def mock_limit_twice_response(self, request, context): + return self.mock_limit_n_response(2, request, context) + + def get_fl(self, override_config=None): + if override_config or self.fl is None: + with patch( + 'swh.scheduler.backend.SchedulerBackend.reconnect', noop + ): + self.fl = self.Lister(lister_name='fakelister', + api_baseurl='https://fakeurl', + override_config=override_config) + self.fl.INITIAL_BACKOFF = 1 + + self.fl.reset_backoff() + return self.fl + + def get_api_response(self): + fl = self.get_fl() + if self.response is None: + self.response = fl.safely_issue_request(self.first_index) + return self.response + + @istest + def test_is_within_bounds(self, http_mocker): + fl = self.get_fl() + self.assertFalse(fl.is_within_bounds(1, 2, 3)) + self.assertTrue(fl.is_within_bounds(2, 1, 3)) + self.assertTrue(fl.is_within_bounds(1, 1, 1)) + self.assertTrue(fl.is_within_bounds(1, None, None)) + self.assertTrue(fl.is_within_bounds(1, None, 2)) + self.assertTrue(fl.is_within_bounds(1, 0, None)) + self.assertTrue(fl.is_within_bounds("b", "a", "c")) + self.assertFalse(fl.is_within_bounds("a", "b", "c")) + self.assertTrue(fl.is_within_bounds("a", None, "c")) + self.assertTrue(fl.is_within_bounds("a", None, None)) + self.assertTrue(fl.is_within_bounds("b", "a", None)) + self.assertFalse(fl.is_within_bounds("a", "b", None)) + self.assertTrue(fl.is_within_bounds("aa:02", "aa:01", "aa:03")) + self.assertFalse(fl.is_within_bounds("aa:12", None, "aa:03")) + with self.assertRaises(TypeError): + fl.is_within_bounds(1.0, "b", None) + with self.assertRaises(TypeError): + fl.is_within_bounds("A:B", "A::B", None) + + @istest + def test_api_request(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_limit_twice_response) + with patch.object(time, 'sleep', wraps=time.sleep) as sleepmock: + self.get_api_response() + self.assertEqual(sleepmock.call_count, 2) + + @istest + def test_repos_list(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + li = self.get_fl().transport_response_simplified( + self.get_api_response() + ) + self.assertIsInstance(li, list) + self.assertEqual(len(li), self.entries_per_page) + + @istest + def test_model_map(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + fl = self.get_fl() + li = fl.transport_response_simplified(self.get_api_response()) + di = li[0] + self.assertIsInstance(di, dict) + pubs = [k for k in vars(fl.MODEL).keys() if not k.startswith('_')] + for k in pubs: + if k not in ['last_seen', 'task_id', 'origin_id']: + self.assertIn(k, di) + + def disable_storage_and_scheduler(self, fl): + fl.create_missing_origins_and_tasks = Mock(return_value=None) + + def disable_db(self, fl): + fl.winnow_models = Mock(return_value=[]) + fl.db_inject_repo = Mock(return_value=fl.MODEL()) + fl.disable_deleted_repo_tasks = Mock(return_value=None) + + @istest + def test_fetch_none_nodb(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + fl = self.get_fl() + + self.disable_storage_and_scheduler(fl) + self.disable_db(fl) + + fl.run(min_index=1, max_index=1) # stores no results + + @istest + def test_fetch_one_nodb(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + fl = self.get_fl() + + self.disable_storage_and_scheduler(fl) + self.disable_db(fl) + + fl.run(min_index=self.first_index, max_index=self.first_index) + + @istest + def test_fetch_multiple_pages_nodb(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + fl = self.get_fl() + + self.disable_storage_and_scheduler(fl) + self.disable_db(fl) + + fl.run(min_index=self.first_index) + + def init_db(self, db, model): + engine = create_engine(db.url()) + model.metadata.create_all(engine) + + @istest + def test_fetch_multiple_pages_yesdb(self, http_mocker): + http_mocker.get(self.test_re, text=self.mock_response) + db = testing.postgresql.Postgresql() + + fl = self.get_fl(override_config={'lister_db_url': db.url()}) + self.init_db(db, fl.MODEL) + + self.disable_storage_and_scheduler(fl) + + fl.run(min_index=self.first_index) + + self.assertEqual(fl.db_last_index(), self.last_index) + partitions = fl.db_partition_indices(5) + self.assertGreater(len(partitions), 0) + for k in partitions: + self.assertLessEqual(len(k), 5) + self.assertGreater(len(k), 0) diff --git a/swh/lister/core/tests/test_model.py b/swh/lister/core/tests/test_model.py new file mode 100644 --- /dev/null +++ b/swh/lister/core/tests/test_model.py @@ -0,0 +1,53 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import unittest + +from nose.tools import istest +from sqlalchemy import Column, Integer + +from swh.lister.core.models import ModelBase + + +class BadSubclass1(ModelBase): + __abstract__ = True + pass + + +class BadSubclass2(ModelBase): + __abstract__ = True + __tablename__ = 'foo' + + +class BadSubclass3(BadSubclass2): + __abstract__ = True + pass + + +class GoodSubclass(BadSubclass2): + uid = Column(Integer, primary_key=True) + indexable = Column(Integer, index=True) + + +class TestModel(unittest.TestCase): + @istest + def test_model_instancing(self): + with self.assertRaises(TypeError): + ModelBase() + + with self.assertRaises(TypeError): + BadSubclass1() + + with self.assertRaises(TypeError): + BadSubclass2() + + with self.assertRaises(TypeError): + BadSubclass3() + + self.assertIsInstance(GoodSubclass(), GoodSubclass) + gsc = GoodSubclass(uid='uid', indexable='indexable') + + self.assertEqual(gsc.__tablename__, 'foo') + self.assertEqual(gsc.uid, 'uid') + self.assertEqual(gsc.indexable, 'indexable') diff --git a/swh/lister/github/base.py b/swh/lister/github/base.py deleted file mode 100644 --- a/swh/lister/github/base.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2016 The Software Heritage developers -# License: GNU General Public License version 3, or any later version -# See top-level LICENSE file for more information - -from swh.core import config -from swh.storage import get_storage -from swh.scheduler.backend import SchedulerBackend - - -# TODO: split this into a lister-agnostic module - -class SWHLister(config.SWHConfig): - CONFIG_BASE_FILENAME = None - - DEFAULT_CONFIG = { - 'storage': ('dict', { - 'cls': 'remote', - 'args': { - 'url': 'http://localhost:5000/' - }, - }), - 'scheduling_db': ('str', 'dbname=softwareheritage-scheduler'), - } - - ADDITIONAL_CONFIG = {} - - def __init__(self): - self.config = self.parse_config_file( - additional_configs=[self.ADDITIONAL_CONFIG]) - - self.storage = get_storage(**self.config['storage']) - - self.scheduler = SchedulerBackend( - scheduling_db=self.config['scheduling_db'], - ) - - def create_origins(self, origins): - """Create the origins listed, and return their ids. - - Args: - origins: a list of origins - Returns: - a list of origin ids - """ - return self.storage.origin_add(origins) - - def create_tasks(self, tasks): - """Create the tasks specified, and return their ids. - - Args: - tasks (list of dict): a list of task specifications: - type (str): the task type - arguments (dict): the arguments for the task runner - args (list of str): arguments - kwargs (dict str -> str): keyword arguments - next_run (datetime.datetime): when to schedule the next run - Returns: - a list of task ids - """ - returned_tasks = self.scheduler.create_tasks(tasks) - return [returned_task['id'] for returned_task in returned_tasks] - - def disable_tasks(self, task_ids): - """Disable the tasks identified by the given ids""" - self.scheduler.disable_tasks(task_ids) diff --git a/swh/lister/github/lister.py b/swh/lister/github/lister.py --- a/swh/lister/github/lister.py +++ b/swh/lister/github/lister.py @@ -1,348 +1,50 @@ -# Copyright (C) 2015 Stefano Zacchiroli -# Copyright (C) 2016 The Software Heritage developers +# Copyright (C) 2017 the Software Heritage developers # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -# see https://developer.github.com/v3/ for GitHub API documentation - -import datetime -import gzip -import logging -import os -import random import re -import requests import time -from pprint import pformat - -from sqlalchemy import create_engine, func -from sqlalchemy.orm import sessionmaker - -from swh.core import config -from swh.lister.github.base import SWHLister -from swh.lister.github.db_utils import session_scope -from swh.lister.github.models import Repository - - -GH_API_URL = 'https://api.github.com' -GH_REPO_URL_TEMPLATE = 'https://github.com/%s' -MAX_RETRIES = 7 -MAX_SLEEP = 3600 # 1 hour -CONN_SLEEP = 10 - -REPO_API_URL_RE = re.compile(r'^.*/repositories\?since=(\d+)') - - -class FetchError(RuntimeError): - - def __init__(self, response): - self.response = response - - def __str__(self): - return repr(self.response) - - -def save_http_response(r, cache_dir): - def escape_url_path(p): - return p.replace('/', '__') - - fname = os.path.join(cache_dir, - escape_url_path(r.request.path_url) + '.gz') - with gzip.open(fname, 'w') as f: - def emit(s): - f.write(bytes(s, 'UTF-8')) - emit(pformat(r.request.path_url)) - emit('\n#\n') - emit(pformat(r.status_code)) - emit('\n#\n') - emit(pformat(r.headers)) - emit('\n#\n') - emit(pformat(r.json())) - - -def gh_api_request(path, username=None, password=None, session=None, - headers=None): - params = {} - - if headers is None: - headers = {} - - if 'Accept' not in headers: # request version 3 of the API - headers['Accept'] = 'application/vnd.github.v3+json' - - params['headers'] = headers - if username is not None and password is not None: - params['auth'] = (username, password) - - if session is None: - session = requests.Session() - - retries_left = MAX_RETRIES - while retries_left > 0: - logging.debug('sending API request: %s' % path) - try: - r = session.get(GH_API_URL + path, **params) - except requests.exceptions.ConnectionError: - # network-level connection error, try again - logging.warn('connection error upon %s: sleep for %d seconds' % - (path, CONN_SLEEP)) - time.sleep(CONN_SLEEP) - retries_left -= 1 - continue - - if r.ok: # all went well, do not retry - break - - # detect throttling - if r.status_code == 403 and \ - int(r.headers['X-RateLimit-Remaining']) == 0: - delay = int(r.headers['X-RateLimit-Reset']) - time.time() - delay = min(delay, MAX_SLEEP) - logging.warn('rate limited upon %s: sleep for %d seconds' % - (path, int(delay))) - time.sleep(delay) - else: # unexpected error, abort - break - - retries_left -= 1 - - if not retries_left: - logging.warn('giving up on %s: max retries exceed' % path) - - return r - - -class GitHubLister(SWHLister): - CONFIG_BASE_FILENAME = 'lister-github' - ADDITIONAL_CONFIG = { - 'lister_db_url': ('str', 'postgresql:///lister-github'), - 'credentials': ('list[dict]', []), - 'cache_json': ('bool', False), - 'cache_dir': ('str', '~/.cache/swh/lister/github'), - } - - def __init__(self, override_config=None): - super().__init__() - if override_config: - self.config.update(override_config) - - self.config['cache_dir'] = os.path.expanduser(self.config['cache_dir']) - if self.config['cache_json']: - config.prepare_folders(self.config, ['cache_dir']) - - if not self.config['credentials']: - raise ValueError('The GitHub lister needs credentials for API') - - self.db_engine = create_engine(self.config['lister_db_url']) - self.mk_session = sessionmaker(bind=self.db_engine) - - def lookup_repo(self, repo_id, db_session=None): - if not db_session: - with session_scope(self.mk_session) as db_session: - return self.lookup_repo(repo_id, db_session=db_session) - - return db_session.query(Repository) \ - .filter(Repository.id == repo_id) \ - .first() - - def query_range(self, start, end, db_session=None): - if not db_session: - with session_scope(self.mk_session) as db_session: - return self.query_range(start, end, db_session=db_session) +from swh.lister.core.indexing_lister import SWHIndexingHttpLister +from swh.lister.github.models import GitHubModel - return db_session.query(Repository) \ - .filter(Repository.id >= start) \ - .filter(Repository.id <= end) - def lookup_full_names(self, full_names, db_session=None): - if not db_session: - with session_scope(self.mk_session) as db_session: - return self.lookup_full_names(full_names, - db_session=db_session) +class GitHubLister(SWHIndexingHttpLister): + PATH_TEMPLATE = '/repositories?since=%d' + MODEL = GitHubModel + API_URL_INDEX_RE = re.compile(r'^.*/repositories\?since=(\d+)') - return db_session.query(Repository) \ - .filter(Repository.full_name.in_(full_names)) \ - .all() - - def last_repo_id(self, db_session=None): - if not db_session: - with session_scope(self.mk_session) as db_session: - return self.last_repo_id(db_session=db_session) - - t = db_session.query(func.max(Repository.id)).first() - - if t is not None: - return t[0] - - INJECT_KEYS = ['id', 'name', 'full_name', 'html_url', 'description', - 'fork'] - - def inject_repo(self, repo, db_session=None): - if not db_session: - with session_scope(self.mk_session) as db_session: - return self.inject_repo(repo, db_session=db_session) - - logging.debug('injecting repo %d' % repo['id']) - sql_repo = self.lookup_repo(repo['id'], db_session) - if not sql_repo: - kwargs = {k: repo[k] for k in self.INJECT_KEYS if k in repo} - sql_repo = Repository(**kwargs) - db_session.add(sql_repo) - else: - for k in self.INJECT_KEYS: - if k in repo: - setattr(sql_repo, k, repo[k]) - sql_repo.last_seen = datetime.datetime.now() - - return sql_repo - - @staticmethod - def repo_to_origin(full_name): + def get_model_from_repo(self, repo): return { - 'type': 'git', - 'url': GH_REPO_URL_TEMPLATE % full_name, - } - - @staticmethod - def repo_to_task(full_name): - return { - 'type': 'origin-update-git', - 'arguments': { - 'args': [ - GH_REPO_URL_TEMPLATE % full_name, - ], - 'kwargs': {}, - }, - 'next_run': datetime.datetime.now(), - } - - def fetch(self, min_id=None, max_id=None): - if min_id is None: - min_id = 1 - if max_id is None: - max_id = float('inf') - next_id = min_id - - do_cache = self.config['cache_json'] - cache_dir = self.config['cache_dir'] - - session = requests.Session() - db_session = self.mk_session() - loop_count = 0 - while min_id <= next_id <= max_id: - logging.info('listing repos starting at %d' % next_id) - - # github API ?since=... is '>' strict, not '>=' - since = next_id - 1 - - cred = random.choice(self.config['credentials']) - repos_res = gh_api_request('/repositories?since=%d' % since, - session=session, **cred) - - if do_cache: - save_http_response(repos_res, cache_dir) - - if not repos_res.ok: - raise FetchError(repos_res) - - next_next_id = None - if 'next' in repos_res.links: - next_url = repos_res.links['next']['url'] - m = REPO_API_URL_RE.match(next_url) # parse next_id - next_next_id = int(m.group(1)) + 1 - - repos = repos_res.json() - mapped_repos = {} - tasks = {} - origins = {} - repo_ids = set() - for repo in repos: - if repo['id'] > max_id: # do not overstep max_id - break - repo_ids.add(repo['id']) - full_name = repo['full_name'] - mapped_repos[full_name] = self.inject_repo(repo, db_session) - - # Retrieve and reset task and origin ids from existing repos - old_repos = self.lookup_full_names(list(mapped_repos.keys()), - db_session=db_session) - for old_repo in old_repos: - full_name = old_repo.full_name - if old_repo.task_id: - tasks[full_name] = old_repo.task_id - old_repo.task_id = None - if old_repo.origin_id: - origins[full_name] = old_repo.origin_id - old_repo.origin_id = None - - # Create missing origins - missing_origins = [ - full_name for full_name in sorted(mapped_repos) - if full_name not in origins - ] - - if missing_origins: - new_origins = [ - self.repo_to_origin(full_name) - for full_name in missing_origins - ] - new_origin_ids = self.create_origins(new_origins) - origins.update(zip(missing_origins, new_origin_ids)) - - for full_name, origin_id in origins.items(): - mapped_repos[full_name].origin_id = origin_id - - # Create missing tasks - missing_tasks = [ - full_name for full_name in sorted(mapped_repos) - if full_name not in tasks - ] - - if missing_tasks: - new_tasks = [ - self.repo_to_task(full_name) - for full_name in missing_tasks - ] - new_task_ids = self.create_tasks(new_tasks) - tasks.update(zip(missing_tasks, new_task_ids)) - - for full_name, task_id in tasks.items(): - mapped_repos[full_name].task_id = task_id - - # Disable tasks for deleted repos - if next_next_id is not None: - start, end = next_id, min(max_id, next_next_id) - else: - start, end = next_id, max_id - - deleted_repos = self.query_range(start, end, - db_session=db_session) \ - .filter(~Repository.id.in_(repo_ids)) \ - .all() - - if deleted_repos: - tasks_to_disable = [] - for repo in deleted_repos: - if repo.task_id is not None: - tasks_to_disable.append(repo.task_id) - repo.task_id = None - - if tasks_to_disable: - self.disable_tasks(tasks_to_disable) + 'uid': repo['id'], + 'indexable': repo['id'], + 'name': repo['name'], + 'full_name': repo['full_name'], + 'html_url': repo['html_url'], + 'origin_url': repo['html_url'], + 'origin_type': 'git', + 'description': repo['description'] + } + + def transport_quota_check(self, response): + reqs_remaining = int(response.headers['X-RateLimit-Remaining']) + if response.status_code == 403 and reqs_remaining == 0: + reset_at = int(response.headers['X-RateLimit-Reset']) + delay = min(reset_at - time.time(), 3600) + return True, delay + else: + return False, 0 - if next_next_id is None: - logging.info('stopping after id %d, no next link found' % - next_id) - break - else: - next_id = next_next_id + def get_next_target_from_response(self, response): + if 'next' in response.links: + next_url = response.links['next']['url'] + return int(self.API_URL_INDEX_RE.match(next_url).group(1)) + else: + return None - loop_count += 1 - if loop_count == 20: - logging.info('flushing updates') - loop_count = 0 - db_session.commit() - db_session = self.mk_session() + def transport_response_simplified(self, response): + repos = response.json() + return [self.get_model_from_repo(repo) for repo in repos] - db_session.commit() + def request_headers(self): + return {'Accept': 'application/vnd.github.v3+json'} diff --git a/swh/lister/github/models.py b/swh/lister/github/models.py --- a/swh/lister/github/models.py +++ b/swh/lister/github/models.py @@ -1,51 +1,18 @@ -# Copyright (C) 2015 Stefano Zacchiroli +# Copyright (C) 2017 the Software Heritage developers # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from datetime import datetime +from sqlalchemy import Column, Integer -from sqlalchemy import Column -from sqlalchemy import Boolean, DateTime, Integer, String -from sqlalchemy.ext.declarative import declarative_base +from swh.lister.core.models import ModelBase -SQLBase = declarative_base() - - -class Repository(SQLBase): - +class GitHubModel(ModelBase): """a GitHub repository""" + __tablename__ = 'github_repos' - __tablename__ = 'repos' - - id = Column(Integer, primary_key=True) - - name = Column(String, index=True) - full_name = Column(String, index=True) - html_url = Column(String) - description = Column(String) - fork = Column(Boolean, index=True) - - last_seen = Column(DateTime, nullable=False) - - task_id = Column(Integer) - origin_id = Column(Integer) + uid = Column(Integer, primary_key=True) + indexable = Column(Integer, index=True) - def __init__(self, id, name=None, full_name=None, html_url=None, - description=None, fork=None, task_id=None, origin_id=None): - self.id = id - self.last_seen = datetime.now() - if name is not None: - self.name = name - if full_name is not None: - self.full_name = full_name - if html_url is not None: - self.html_url = html_url - if description is not None: - self.description = description - if fork is not None: - self.fork = fork - if task_id is not None: - self.task_id = task_id - if origin_id is not None: - self.origin_id = origin_id + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) diff --git a/swh/lister/github/tasks.py b/swh/lister/github/tasks.py --- a/swh/lister/github/tasks.py +++ b/swh/lister/github/tasks.py @@ -1,47 +1,27 @@ -# Copyright (C) 2016 the Software Heritage developers +# Copyright (C) 2017 the Software Heritage developers # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -import random - -from celery import group - -from swh.scheduler.task import Task +from swh.lister.core.tasks import (IndexingDiscoveryListerTask, + IndexingRangeListerTask, + IndexingRefreshListerTask, ListerTaskBase) from .lister import GitHubLister -GROUP_SPLIT = 10000 - - -class IncrementalGitHubLister(Task): - task_queue = 'swh_lister_github_incremental' - - def run(self): - lister = GitHubLister() - last_id = lister.last_repo_id() - lister.fetch(min_id=last_id + 1, max_id=None) - -class RangeGitHubLister(Task): - task_queue = 'swh_lister_github_full' +class GitHubListerTask(ListerTaskBase): + def new_lister(self): + return GitHubLister(lister_name='github.com', + api_baseurl='https://github.com') - def run(self, start, end): - lister = GitHubLister() - lister.fetch(min_id=start, max_id=end) +class IncrementalGitHubLister(GitHubListerTask, IndexingDiscoveryListerTask): + task_queue = 'swh_lister_github_discover' -class FullGitHubLister(Task): - task_queue = 'swh_lister_github_full' - def run(self): - lister = GitHubLister() - last_id = lister.last_repo_id() - ranges = [ - (i, min(last_id, i + GROUP_SPLIT - 1)) - for i in range(1, last_id, GROUP_SPLIT) - ] +class RangeGitHubLister(GitHubListerTask, IndexingRangeListerTask): + task_queue = 'swh_lister_github_refresh' - random.shuffle(ranges) - range_task = RangeGitHubLister() - group(range_task.s(min, max) for min, max in ranges)() +class FullGitHubRelister(GitHubListerTask, IndexingRefreshListerTask): + task_queue = 'swh_lister_github_refresh' diff --git a/swh/lister/github/tests/api_empty_response.json b/swh/lister/github/tests/api_empty_response.json new file mode 100644 --- /dev/null +++ b/swh/lister/github/tests/api_empty_response.json @@ -0,0 +1 @@ +[] diff --git a/swh/lister/github/tests/api_response.json b/swh/lister/github/tests/api_response.json new file mode 100644 --- /dev/null +++ b/swh/lister/github/tests/api_response.json @@ -0,0 +1,6502 @@ +[ + { + "id": 26, + "name": "merb-core", + "full_name": "wycats/merb-core", + "owner": { + "login": "wycats", + "id": 4, + "avatar_url": "https://avatars.githubusercontent.com/u/4?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wycats/merb-core", + "description": "Merb Core: All you need. None you don't.", + "fork": false, + "url": "https://api.github.com/repos/wycats/merb-core", + "forks_url": "https://api.github.com/repos/wycats/merb-core/forks", + "keys_url": "https://api.github.com/repos/wycats/merb-core/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wycats/merb-core/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wycats/merb-core/teams", + "hooks_url": "https://api.github.com/repos/wycats/merb-core/hooks", + "issue_events_url": "https://api.github.com/repos/wycats/merb-core/issues/events{/number}", + "events_url": "https://api.github.com/repos/wycats/merb-core/events", + "assignees_url": "https://api.github.com/repos/wycats/merb-core/assignees{/user}", + "branches_url": "https://api.github.com/repos/wycats/merb-core/branches{/branch}", + "tags_url": "https://api.github.com/repos/wycats/merb-core/tags", + "blobs_url": "https://api.github.com/repos/wycats/merb-core/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wycats/merb-core/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wycats/merb-core/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wycats/merb-core/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wycats/merb-core/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wycats/merb-core/languages", + "stargazers_url": "https://api.github.com/repos/wycats/merb-core/stargazers", + "contributors_url": "https://api.github.com/repos/wycats/merb-core/contributors", + "subscribers_url": "https://api.github.com/repos/wycats/merb-core/subscribers", + "subscription_url": "https://api.github.com/repos/wycats/merb-core/subscription", + "commits_url": "https://api.github.com/repos/wycats/merb-core/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wycats/merb-core/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wycats/merb-core/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wycats/merb-core/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wycats/merb-core/contents/{+path}", + "compare_url": "https://api.github.com/repos/wycats/merb-core/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wycats/merb-core/merges", + "archive_url": "https://api.github.com/repos/wycats/merb-core/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wycats/merb-core/downloads", + "issues_url": "https://api.github.com/repos/wycats/merb-core/issues{/number}", + "pulls_url": "https://api.github.com/repos/wycats/merb-core/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wycats/merb-core/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wycats/merb-core/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wycats/merb-core/labels{/name}", + "releases_url": "https://api.github.com/repos/wycats/merb-core/releases{/id}", + "deployments_url": "https://api.github.com/repos/wycats/merb-core/deployments" + }, + { + "id": 27, + "name": "rubinius", + "full_name": "rubinius/rubinius", + "owner": { + "login": "rubinius", + "id": 317747, + "avatar_url": "https://avatars.githubusercontent.com/u/317747?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rubinius", + "html_url": "https://github.com/rubinius", + "followers_url": "https://api.github.com/users/rubinius/followers", + "following_url": "https://api.github.com/users/rubinius/following{/other_user}", + "gists_url": "https://api.github.com/users/rubinius/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rubinius/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rubinius/subscriptions", + "organizations_url": "https://api.github.com/users/rubinius/orgs", + "repos_url": "https://api.github.com/users/rubinius/repos", + "events_url": "https://api.github.com/users/rubinius/events{/privacy}", + "received_events_url": "https://api.github.com/users/rubinius/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rubinius/rubinius", + "description": "The Rubinius Language Platform", + "fork": false, + "url": "https://api.github.com/repos/rubinius/rubinius", + "forks_url": "https://api.github.com/repos/rubinius/rubinius/forks", + "keys_url": "https://api.github.com/repos/rubinius/rubinius/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rubinius/rubinius/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rubinius/rubinius/teams", + "hooks_url": "https://api.github.com/repos/rubinius/rubinius/hooks", + "issue_events_url": "https://api.github.com/repos/rubinius/rubinius/issues/events{/number}", + "events_url": "https://api.github.com/repos/rubinius/rubinius/events", + "assignees_url": "https://api.github.com/repos/rubinius/rubinius/assignees{/user}", + "branches_url": "https://api.github.com/repos/rubinius/rubinius/branches{/branch}", + "tags_url": "https://api.github.com/repos/rubinius/rubinius/tags", + "blobs_url": "https://api.github.com/repos/rubinius/rubinius/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rubinius/rubinius/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rubinius/rubinius/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rubinius/rubinius/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rubinius/rubinius/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rubinius/rubinius/languages", + "stargazers_url": "https://api.github.com/repos/rubinius/rubinius/stargazers", + "contributors_url": "https://api.github.com/repos/rubinius/rubinius/contributors", + "subscribers_url": "https://api.github.com/repos/rubinius/rubinius/subscribers", + "subscription_url": "https://api.github.com/repos/rubinius/rubinius/subscription", + "commits_url": "https://api.github.com/repos/rubinius/rubinius/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rubinius/rubinius/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rubinius/rubinius/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rubinius/rubinius/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rubinius/rubinius/contents/{+path}", + "compare_url": "https://api.github.com/repos/rubinius/rubinius/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rubinius/rubinius/merges", + "archive_url": "https://api.github.com/repos/rubinius/rubinius/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rubinius/rubinius/downloads", + "issues_url": "https://api.github.com/repos/rubinius/rubinius/issues{/number}", + "pulls_url": "https://api.github.com/repos/rubinius/rubinius/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rubinius/rubinius/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rubinius/rubinius/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rubinius/rubinius/labels{/name}", + "releases_url": "https://api.github.com/repos/rubinius/rubinius/releases{/id}", + "deployments_url": "https://api.github.com/repos/rubinius/rubinius/deployments" + }, + { + "id": 28, + "name": "god", + "full_name": "mojombo/god", + "owner": { + "login": "mojombo", + "id": 1, + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mojombo/god", + "description": "Ruby process monitor", + "fork": false, + "url": "https://api.github.com/repos/mojombo/god", + "forks_url": "https://api.github.com/repos/mojombo/god/forks", + "keys_url": "https://api.github.com/repos/mojombo/god/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mojombo/god/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mojombo/god/teams", + "hooks_url": "https://api.github.com/repos/mojombo/god/hooks", + "issue_events_url": "https://api.github.com/repos/mojombo/god/issues/events{/number}", + "events_url": "https://api.github.com/repos/mojombo/god/events", + "assignees_url": "https://api.github.com/repos/mojombo/god/assignees{/user}", + "branches_url": "https://api.github.com/repos/mojombo/god/branches{/branch}", + "tags_url": "https://api.github.com/repos/mojombo/god/tags", + "blobs_url": "https://api.github.com/repos/mojombo/god/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mojombo/god/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mojombo/god/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mojombo/god/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mojombo/god/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mojombo/god/languages", + "stargazers_url": "https://api.github.com/repos/mojombo/god/stargazers", + "contributors_url": "https://api.github.com/repos/mojombo/god/contributors", + "subscribers_url": "https://api.github.com/repos/mojombo/god/subscribers", + "subscription_url": "https://api.github.com/repos/mojombo/god/subscription", + "commits_url": "https://api.github.com/repos/mojombo/god/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mojombo/god/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mojombo/god/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mojombo/god/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mojombo/god/contents/{+path}", + "compare_url": "https://api.github.com/repos/mojombo/god/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mojombo/god/merges", + "archive_url": "https://api.github.com/repos/mojombo/god/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mojombo/god/downloads", + "issues_url": "https://api.github.com/repos/mojombo/god/issues{/number}", + "pulls_url": "https://api.github.com/repos/mojombo/god/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mojombo/god/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mojombo/god/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mojombo/god/labels{/name}", + "releases_url": "https://api.github.com/repos/mojombo/god/releases{/id}", + "deployments_url": "https://api.github.com/repos/mojombo/god/deployments" + }, + { + "id": 29, + "name": "jsawesome", + "full_name": "vanpelt/jsawesome", + "owner": { + "login": "vanpelt", + "id": 17, + "avatar_url": "https://avatars.githubusercontent.com/u/17?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vanpelt", + "html_url": "https://github.com/vanpelt", + "followers_url": "https://api.github.com/users/vanpelt/followers", + "following_url": "https://api.github.com/users/vanpelt/following{/other_user}", + "gists_url": "https://api.github.com/users/vanpelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vanpelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vanpelt/subscriptions", + "organizations_url": "https://api.github.com/users/vanpelt/orgs", + "repos_url": "https://api.github.com/users/vanpelt/repos", + "events_url": "https://api.github.com/users/vanpelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vanpelt/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/vanpelt/jsawesome", + "description": "Awesome JSON", + "fork": false, + "url": "https://api.github.com/repos/vanpelt/jsawesome", + "forks_url": "https://api.github.com/repos/vanpelt/jsawesome/forks", + "keys_url": "https://api.github.com/repos/vanpelt/jsawesome/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vanpelt/jsawesome/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vanpelt/jsawesome/teams", + "hooks_url": "https://api.github.com/repos/vanpelt/jsawesome/hooks", + "issue_events_url": "https://api.github.com/repos/vanpelt/jsawesome/issues/events{/number}", + "events_url": "https://api.github.com/repos/vanpelt/jsawesome/events", + "assignees_url": "https://api.github.com/repos/vanpelt/jsawesome/assignees{/user}", + "branches_url": "https://api.github.com/repos/vanpelt/jsawesome/branches{/branch}", + "tags_url": "https://api.github.com/repos/vanpelt/jsawesome/tags", + "blobs_url": "https://api.github.com/repos/vanpelt/jsawesome/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vanpelt/jsawesome/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vanpelt/jsawesome/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vanpelt/jsawesome/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vanpelt/jsawesome/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vanpelt/jsawesome/languages", + "stargazers_url": "https://api.github.com/repos/vanpelt/jsawesome/stargazers", + "contributors_url": "https://api.github.com/repos/vanpelt/jsawesome/contributors", + "subscribers_url": "https://api.github.com/repos/vanpelt/jsawesome/subscribers", + "subscription_url": "https://api.github.com/repos/vanpelt/jsawesome/subscription", + "commits_url": "https://api.github.com/repos/vanpelt/jsawesome/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vanpelt/jsawesome/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vanpelt/jsawesome/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vanpelt/jsawesome/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vanpelt/jsawesome/contents/{+path}", + "compare_url": "https://api.github.com/repos/vanpelt/jsawesome/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vanpelt/jsawesome/merges", + "archive_url": "https://api.github.com/repos/vanpelt/jsawesome/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vanpelt/jsawesome/downloads", + "issues_url": "https://api.github.com/repos/vanpelt/jsawesome/issues{/number}", + "pulls_url": "https://api.github.com/repos/vanpelt/jsawesome/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vanpelt/jsawesome/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vanpelt/jsawesome/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vanpelt/jsawesome/labels{/name}", + "releases_url": "https://api.github.com/repos/vanpelt/jsawesome/releases{/id}", + "deployments_url": "https://api.github.com/repos/vanpelt/jsawesome/deployments" + }, + { + "id": 31, + "name": "jspec", + "full_name": "wycats/jspec", + "owner": { + "login": "wycats", + "id": 4, + "avatar_url": "https://avatars.githubusercontent.com/u/4?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wycats/jspec", + "description": "A JavaScript BDD Testing Library", + "fork": false, + "url": "https://api.github.com/repos/wycats/jspec", + "forks_url": "https://api.github.com/repos/wycats/jspec/forks", + "keys_url": "https://api.github.com/repos/wycats/jspec/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wycats/jspec/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wycats/jspec/teams", + "hooks_url": "https://api.github.com/repos/wycats/jspec/hooks", + "issue_events_url": "https://api.github.com/repos/wycats/jspec/issues/events{/number}", + "events_url": "https://api.github.com/repos/wycats/jspec/events", + "assignees_url": "https://api.github.com/repos/wycats/jspec/assignees{/user}", + "branches_url": "https://api.github.com/repos/wycats/jspec/branches{/branch}", + "tags_url": "https://api.github.com/repos/wycats/jspec/tags", + "blobs_url": "https://api.github.com/repos/wycats/jspec/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wycats/jspec/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wycats/jspec/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wycats/jspec/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wycats/jspec/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wycats/jspec/languages", + "stargazers_url": "https://api.github.com/repos/wycats/jspec/stargazers", + "contributors_url": "https://api.github.com/repos/wycats/jspec/contributors", + "subscribers_url": "https://api.github.com/repos/wycats/jspec/subscribers", + "subscription_url": "https://api.github.com/repos/wycats/jspec/subscription", + "commits_url": "https://api.github.com/repos/wycats/jspec/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wycats/jspec/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wycats/jspec/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wycats/jspec/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wycats/jspec/contents/{+path}", + "compare_url": "https://api.github.com/repos/wycats/jspec/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wycats/jspec/merges", + "archive_url": "https://api.github.com/repos/wycats/jspec/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wycats/jspec/downloads", + "issues_url": "https://api.github.com/repos/wycats/jspec/issues{/number}", + "pulls_url": "https://api.github.com/repos/wycats/jspec/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wycats/jspec/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wycats/jspec/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wycats/jspec/labels{/name}", + "releases_url": "https://api.github.com/repos/wycats/jspec/releases{/id}", + "deployments_url": "https://api.github.com/repos/wycats/jspec/deployments" + }, + { + "id": 35, + "name": "exception_logger", + "full_name": "defunkt/exception_logger", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/exception_logger", + "description": "Unmaintained. Sorry.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/exception_logger", + "forks_url": "https://api.github.com/repos/defunkt/exception_logger/forks", + "keys_url": "https://api.github.com/repos/defunkt/exception_logger/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/exception_logger/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/exception_logger/teams", + "hooks_url": "https://api.github.com/repos/defunkt/exception_logger/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/exception_logger/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/exception_logger/events", + "assignees_url": "https://api.github.com/repos/defunkt/exception_logger/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/exception_logger/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/exception_logger/tags", + "blobs_url": "https://api.github.com/repos/defunkt/exception_logger/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/exception_logger/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/exception_logger/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/exception_logger/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/exception_logger/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/exception_logger/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/exception_logger/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/exception_logger/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/exception_logger/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/exception_logger/subscription", + "commits_url": "https://api.github.com/repos/defunkt/exception_logger/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/exception_logger/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/exception_logger/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/exception_logger/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/exception_logger/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/exception_logger/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/exception_logger/merges", + "archive_url": "https://api.github.com/repos/defunkt/exception_logger/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/exception_logger/downloads", + "issues_url": "https://api.github.com/repos/defunkt/exception_logger/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/exception_logger/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/exception_logger/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/exception_logger/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/exception_logger/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/exception_logger/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/exception_logger/deployments" + }, + { + "id": 36, + "name": "ambition", + "full_name": "defunkt/ambition", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/ambition", + "description": "include Enumerable — Unmaintained", + "fork": false, + "url": "https://api.github.com/repos/defunkt/ambition", + "forks_url": "https://api.github.com/repos/defunkt/ambition/forks", + "keys_url": "https://api.github.com/repos/defunkt/ambition/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/ambition/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/ambition/teams", + "hooks_url": "https://api.github.com/repos/defunkt/ambition/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/ambition/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/ambition/events", + "assignees_url": "https://api.github.com/repos/defunkt/ambition/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/ambition/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/ambition/tags", + "blobs_url": "https://api.github.com/repos/defunkt/ambition/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/ambition/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/ambition/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/ambition/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/ambition/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/ambition/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/ambition/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/ambition/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/ambition/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/ambition/subscription", + "commits_url": "https://api.github.com/repos/defunkt/ambition/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/ambition/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/ambition/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/ambition/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/ambition/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/ambition/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/ambition/merges", + "archive_url": "https://api.github.com/repos/defunkt/ambition/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/ambition/downloads", + "issues_url": "https://api.github.com/repos/defunkt/ambition/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/ambition/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/ambition/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/ambition/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/ambition/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/ambition/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/ambition/deployments" + }, + { + "id": 42, + "name": "restful-authentication", + "full_name": "technoweenie/restful-authentication", + "owner": { + "login": "technoweenie", + "id": 21, + "avatar_url": "https://avatars.githubusercontent.com/u/21?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/technoweenie", + "html_url": "https://github.com/technoweenie", + "followers_url": "https://api.github.com/users/technoweenie/followers", + "following_url": "https://api.github.com/users/technoweenie/following{/other_user}", + "gists_url": "https://api.github.com/users/technoweenie/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technoweenie/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technoweenie/subscriptions", + "organizations_url": "https://api.github.com/users/technoweenie/orgs", + "repos_url": "https://api.github.com/users/technoweenie/repos", + "events_url": "https://api.github.com/users/technoweenie/events{/privacy}", + "received_events_url": "https://api.github.com/users/technoweenie/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/technoweenie/restful-authentication", + "description": "Generates common user authentication code for Rails/Merb, with a full test/unit and rspec suite and optional Acts as State Machine support built-in.", + "fork": false, + "url": "https://api.github.com/repos/technoweenie/restful-authentication", + "forks_url": "https://api.github.com/repos/technoweenie/restful-authentication/forks", + "keys_url": "https://api.github.com/repos/technoweenie/restful-authentication/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/technoweenie/restful-authentication/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/technoweenie/restful-authentication/teams", + "hooks_url": "https://api.github.com/repos/technoweenie/restful-authentication/hooks", + "issue_events_url": "https://api.github.com/repos/technoweenie/restful-authentication/issues/events{/number}", + "events_url": "https://api.github.com/repos/technoweenie/restful-authentication/events", + "assignees_url": "https://api.github.com/repos/technoweenie/restful-authentication/assignees{/user}", + "branches_url": "https://api.github.com/repos/technoweenie/restful-authentication/branches{/branch}", + "tags_url": "https://api.github.com/repos/technoweenie/restful-authentication/tags", + "blobs_url": "https://api.github.com/repos/technoweenie/restful-authentication/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/technoweenie/restful-authentication/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/technoweenie/restful-authentication/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/technoweenie/restful-authentication/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/technoweenie/restful-authentication/statuses/{sha}", + "languages_url": "https://api.github.com/repos/technoweenie/restful-authentication/languages", + "stargazers_url": "https://api.github.com/repos/technoweenie/restful-authentication/stargazers", + "contributors_url": "https://api.github.com/repos/technoweenie/restful-authentication/contributors", + "subscribers_url": "https://api.github.com/repos/technoweenie/restful-authentication/subscribers", + "subscription_url": "https://api.github.com/repos/technoweenie/restful-authentication/subscription", + "commits_url": "https://api.github.com/repos/technoweenie/restful-authentication/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/technoweenie/restful-authentication/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/technoweenie/restful-authentication/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/technoweenie/restful-authentication/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/technoweenie/restful-authentication/contents/{+path}", + "compare_url": "https://api.github.com/repos/technoweenie/restful-authentication/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/technoweenie/restful-authentication/merges", + "archive_url": "https://api.github.com/repos/technoweenie/restful-authentication/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/technoweenie/restful-authentication/downloads", + "issues_url": "https://api.github.com/repos/technoweenie/restful-authentication/issues{/number}", + "pulls_url": "https://api.github.com/repos/technoweenie/restful-authentication/pulls{/number}", + "milestones_url": "https://api.github.com/repos/technoweenie/restful-authentication/milestones{/number}", + "notifications_url": "https://api.github.com/repos/technoweenie/restful-authentication/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/technoweenie/restful-authentication/labels{/name}", + "releases_url": "https://api.github.com/repos/technoweenie/restful-authentication/releases{/id}", + "deployments_url": "https://api.github.com/repos/technoweenie/restful-authentication/deployments" + }, + { + "id": 43, + "name": "attachment_fu", + "full_name": "technoweenie/attachment_fu", + "owner": { + "login": "technoweenie", + "id": 21, + "avatar_url": "https://avatars.githubusercontent.com/u/21?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/technoweenie", + "html_url": "https://github.com/technoweenie", + "followers_url": "https://api.github.com/users/technoweenie/followers", + "following_url": "https://api.github.com/users/technoweenie/following{/other_user}", + "gists_url": "https://api.github.com/users/technoweenie/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technoweenie/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technoweenie/subscriptions", + "organizations_url": "https://api.github.com/users/technoweenie/orgs", + "repos_url": "https://api.github.com/users/technoweenie/repos", + "events_url": "https://api.github.com/users/technoweenie/events{/privacy}", + "received_events_url": "https://api.github.com/users/technoweenie/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/technoweenie/attachment_fu", + "description": "Treat an ActiveRecord model as a file attachment, storing its patch, size, content type, etc.", + "fork": false, + "url": "https://api.github.com/repos/technoweenie/attachment_fu", + "forks_url": "https://api.github.com/repos/technoweenie/attachment_fu/forks", + "keys_url": "https://api.github.com/repos/technoweenie/attachment_fu/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/technoweenie/attachment_fu/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/technoweenie/attachment_fu/teams", + "hooks_url": "https://api.github.com/repos/technoweenie/attachment_fu/hooks", + "issue_events_url": "https://api.github.com/repos/technoweenie/attachment_fu/issues/events{/number}", + "events_url": "https://api.github.com/repos/technoweenie/attachment_fu/events", + "assignees_url": "https://api.github.com/repos/technoweenie/attachment_fu/assignees{/user}", + "branches_url": "https://api.github.com/repos/technoweenie/attachment_fu/branches{/branch}", + "tags_url": "https://api.github.com/repos/technoweenie/attachment_fu/tags", + "blobs_url": "https://api.github.com/repos/technoweenie/attachment_fu/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/technoweenie/attachment_fu/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/technoweenie/attachment_fu/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/technoweenie/attachment_fu/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/technoweenie/attachment_fu/statuses/{sha}", + "languages_url": "https://api.github.com/repos/technoweenie/attachment_fu/languages", + "stargazers_url": "https://api.github.com/repos/technoweenie/attachment_fu/stargazers", + "contributors_url": "https://api.github.com/repos/technoweenie/attachment_fu/contributors", + "subscribers_url": "https://api.github.com/repos/technoweenie/attachment_fu/subscribers", + "subscription_url": "https://api.github.com/repos/technoweenie/attachment_fu/subscription", + "commits_url": "https://api.github.com/repos/technoweenie/attachment_fu/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/technoweenie/attachment_fu/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/technoweenie/attachment_fu/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/technoweenie/attachment_fu/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/technoweenie/attachment_fu/contents/{+path}", + "compare_url": "https://api.github.com/repos/technoweenie/attachment_fu/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/technoweenie/attachment_fu/merges", + "archive_url": "https://api.github.com/repos/technoweenie/attachment_fu/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/technoweenie/attachment_fu/downloads", + "issues_url": "https://api.github.com/repos/technoweenie/attachment_fu/issues{/number}", + "pulls_url": "https://api.github.com/repos/technoweenie/attachment_fu/pulls{/number}", + "milestones_url": "https://api.github.com/repos/technoweenie/attachment_fu/milestones{/number}", + "notifications_url": "https://api.github.com/repos/technoweenie/attachment_fu/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/technoweenie/attachment_fu/labels{/name}", + "releases_url": "https://api.github.com/repos/technoweenie/attachment_fu/releases{/id}", + "deployments_url": "https://api.github.com/repos/technoweenie/attachment_fu/deployments" + }, + { + "id": 47, + "name": "bong", + "full_name": "topfunky/bong", + "owner": { + "login": "topfunky", + "id": 26, + "avatar_url": "https://avatars.githubusercontent.com/u/26?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/topfunky", + "html_url": "https://github.com/topfunky", + "followers_url": "https://api.github.com/users/topfunky/followers", + "following_url": "https://api.github.com/users/topfunky/following{/other_user}", + "gists_url": "https://api.github.com/users/topfunky/gists{/gist_id}", + "starred_url": "https://api.github.com/users/topfunky/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/topfunky/subscriptions", + "organizations_url": "https://api.github.com/users/topfunky/orgs", + "repos_url": "https://api.github.com/users/topfunky/repos", + "events_url": "https://api.github.com/users/topfunky/events{/privacy}", + "received_events_url": "https://api.github.com/users/topfunky/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/topfunky/bong", + "description": "A benchmarking helper for httperf.", + "fork": false, + "url": "https://api.github.com/repos/topfunky/bong", + "forks_url": "https://api.github.com/repos/topfunky/bong/forks", + "keys_url": "https://api.github.com/repos/topfunky/bong/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/topfunky/bong/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/topfunky/bong/teams", + "hooks_url": "https://api.github.com/repos/topfunky/bong/hooks", + "issue_events_url": "https://api.github.com/repos/topfunky/bong/issues/events{/number}", + "events_url": "https://api.github.com/repos/topfunky/bong/events", + "assignees_url": "https://api.github.com/repos/topfunky/bong/assignees{/user}", + "branches_url": "https://api.github.com/repos/topfunky/bong/branches{/branch}", + "tags_url": "https://api.github.com/repos/topfunky/bong/tags", + "blobs_url": "https://api.github.com/repos/topfunky/bong/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/topfunky/bong/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/topfunky/bong/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/topfunky/bong/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/topfunky/bong/statuses/{sha}", + "languages_url": "https://api.github.com/repos/topfunky/bong/languages", + "stargazers_url": "https://api.github.com/repos/topfunky/bong/stargazers", + "contributors_url": "https://api.github.com/repos/topfunky/bong/contributors", + "subscribers_url": "https://api.github.com/repos/topfunky/bong/subscribers", + "subscription_url": "https://api.github.com/repos/topfunky/bong/subscription", + "commits_url": "https://api.github.com/repos/topfunky/bong/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/topfunky/bong/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/topfunky/bong/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/topfunky/bong/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/topfunky/bong/contents/{+path}", + "compare_url": "https://api.github.com/repos/topfunky/bong/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/topfunky/bong/merges", + "archive_url": "https://api.github.com/repos/topfunky/bong/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/topfunky/bong/downloads", + "issues_url": "https://api.github.com/repos/topfunky/bong/issues{/number}", + "pulls_url": "https://api.github.com/repos/topfunky/bong/pulls{/number}", + "milestones_url": "https://api.github.com/repos/topfunky/bong/milestones{/number}", + "notifications_url": "https://api.github.com/repos/topfunky/bong/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/topfunky/bong/labels{/name}", + "releases_url": "https://api.github.com/repos/topfunky/bong/releases{/id}", + "deployments_url": "https://api.github.com/repos/topfunky/bong/deployments" + }, + { + "id": 48, + "name": "microsis", + "full_name": "Caged/microsis", + "owner": { + "login": "Caged", + "id": 25, + "avatar_url": "https://avatars.githubusercontent.com/u/25?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Caged", + "html_url": "https://github.com/Caged", + "followers_url": "https://api.github.com/users/Caged/followers", + "following_url": "https://api.github.com/users/Caged/following{/other_user}", + "gists_url": "https://api.github.com/users/Caged/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Caged/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Caged/subscriptions", + "organizations_url": "https://api.github.com/users/Caged/orgs", + "repos_url": "https://api.github.com/users/Caged/repos", + "events_url": "https://api.github.com/users/Caged/events{/privacy}", + "received_events_url": "https://api.github.com/users/Caged/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/Caged/microsis", + "description": "SUPER OLD STUFF", + "fork": false, + "url": "https://api.github.com/repos/Caged/microsis", + "forks_url": "https://api.github.com/repos/Caged/microsis/forks", + "keys_url": "https://api.github.com/repos/Caged/microsis/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Caged/microsis/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Caged/microsis/teams", + "hooks_url": "https://api.github.com/repos/Caged/microsis/hooks", + "issue_events_url": "https://api.github.com/repos/Caged/microsis/issues/events{/number}", + "events_url": "https://api.github.com/repos/Caged/microsis/events", + "assignees_url": "https://api.github.com/repos/Caged/microsis/assignees{/user}", + "branches_url": "https://api.github.com/repos/Caged/microsis/branches{/branch}", + "tags_url": "https://api.github.com/repos/Caged/microsis/tags", + "blobs_url": "https://api.github.com/repos/Caged/microsis/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Caged/microsis/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Caged/microsis/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Caged/microsis/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Caged/microsis/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Caged/microsis/languages", + "stargazers_url": "https://api.github.com/repos/Caged/microsis/stargazers", + "contributors_url": "https://api.github.com/repos/Caged/microsis/contributors", + "subscribers_url": "https://api.github.com/repos/Caged/microsis/subscribers", + "subscription_url": "https://api.github.com/repos/Caged/microsis/subscription", + "commits_url": "https://api.github.com/repos/Caged/microsis/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Caged/microsis/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Caged/microsis/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Caged/microsis/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Caged/microsis/contents/{+path}", + "compare_url": "https://api.github.com/repos/Caged/microsis/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Caged/microsis/merges", + "archive_url": "https://api.github.com/repos/Caged/microsis/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Caged/microsis/downloads", + "issues_url": "https://api.github.com/repos/Caged/microsis/issues{/number}", + "pulls_url": "https://api.github.com/repos/Caged/microsis/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Caged/microsis/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Caged/microsis/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Caged/microsis/labels{/name}", + "releases_url": "https://api.github.com/repos/Caged/microsis/releases{/id}", + "deployments_url": "https://api.github.com/repos/Caged/microsis/deployments" + }, + { + "id": 52, + "name": "s3", + "full_name": "anotherjesse/s3", + "owner": { + "login": "anotherjesse", + "id": 27, + "avatar_url": "https://avatars.githubusercontent.com/u/27?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/anotherjesse/s3", + "description": "psuedo s3 protocol for mozilla browsers", + "fork": false, + "url": "https://api.github.com/repos/anotherjesse/s3", + "forks_url": "https://api.github.com/repos/anotherjesse/s3/forks", + "keys_url": "https://api.github.com/repos/anotherjesse/s3/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/anotherjesse/s3/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/anotherjesse/s3/teams", + "hooks_url": "https://api.github.com/repos/anotherjesse/s3/hooks", + "issue_events_url": "https://api.github.com/repos/anotherjesse/s3/issues/events{/number}", + "events_url": "https://api.github.com/repos/anotherjesse/s3/events", + "assignees_url": "https://api.github.com/repos/anotherjesse/s3/assignees{/user}", + "branches_url": "https://api.github.com/repos/anotherjesse/s3/branches{/branch}", + "tags_url": "https://api.github.com/repos/anotherjesse/s3/tags", + "blobs_url": "https://api.github.com/repos/anotherjesse/s3/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/anotherjesse/s3/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/anotherjesse/s3/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/anotherjesse/s3/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/anotherjesse/s3/statuses/{sha}", + "languages_url": "https://api.github.com/repos/anotherjesse/s3/languages", + "stargazers_url": "https://api.github.com/repos/anotherjesse/s3/stargazers", + "contributors_url": "https://api.github.com/repos/anotherjesse/s3/contributors", + "subscribers_url": "https://api.github.com/repos/anotherjesse/s3/subscribers", + "subscription_url": "https://api.github.com/repos/anotherjesse/s3/subscription", + "commits_url": "https://api.github.com/repos/anotherjesse/s3/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/anotherjesse/s3/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/anotherjesse/s3/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/anotherjesse/s3/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/anotherjesse/s3/contents/{+path}", + "compare_url": "https://api.github.com/repos/anotherjesse/s3/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/anotherjesse/s3/merges", + "archive_url": "https://api.github.com/repos/anotherjesse/s3/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/anotherjesse/s3/downloads", + "issues_url": "https://api.github.com/repos/anotherjesse/s3/issues{/number}", + "pulls_url": "https://api.github.com/repos/anotherjesse/s3/pulls{/number}", + "milestones_url": "https://api.github.com/repos/anotherjesse/s3/milestones{/number}", + "notifications_url": "https://api.github.com/repos/anotherjesse/s3/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/anotherjesse/s3/labels{/name}", + "releases_url": "https://api.github.com/repos/anotherjesse/s3/releases{/id}", + "deployments_url": "https://api.github.com/repos/anotherjesse/s3/deployments" + }, + { + "id": 53, + "name": "taboo", + "full_name": "anotherjesse/taboo", + "owner": { + "login": "anotherjesse", + "id": 27, + "avatar_url": "https://avatars.githubusercontent.com/u/27?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/anotherjesse/taboo", + "description": "The solution for tabitus of the browser ", + "fork": false, + "url": "https://api.github.com/repos/anotherjesse/taboo", + "forks_url": "https://api.github.com/repos/anotherjesse/taboo/forks", + "keys_url": "https://api.github.com/repos/anotherjesse/taboo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/anotherjesse/taboo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/anotherjesse/taboo/teams", + "hooks_url": "https://api.github.com/repos/anotherjesse/taboo/hooks", + "issue_events_url": "https://api.github.com/repos/anotherjesse/taboo/issues/events{/number}", + "events_url": "https://api.github.com/repos/anotherjesse/taboo/events", + "assignees_url": "https://api.github.com/repos/anotherjesse/taboo/assignees{/user}", + "branches_url": "https://api.github.com/repos/anotherjesse/taboo/branches{/branch}", + "tags_url": "https://api.github.com/repos/anotherjesse/taboo/tags", + "blobs_url": "https://api.github.com/repos/anotherjesse/taboo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/anotherjesse/taboo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/anotherjesse/taboo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/anotherjesse/taboo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/anotherjesse/taboo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/anotherjesse/taboo/languages", + "stargazers_url": "https://api.github.com/repos/anotherjesse/taboo/stargazers", + "contributors_url": "https://api.github.com/repos/anotherjesse/taboo/contributors", + "subscribers_url": "https://api.github.com/repos/anotherjesse/taboo/subscribers", + "subscription_url": "https://api.github.com/repos/anotherjesse/taboo/subscription", + "commits_url": "https://api.github.com/repos/anotherjesse/taboo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/anotherjesse/taboo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/anotherjesse/taboo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/anotherjesse/taboo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/anotherjesse/taboo/contents/{+path}", + "compare_url": "https://api.github.com/repos/anotherjesse/taboo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/anotherjesse/taboo/merges", + "archive_url": "https://api.github.com/repos/anotherjesse/taboo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/anotherjesse/taboo/downloads", + "issues_url": "https://api.github.com/repos/anotherjesse/taboo/issues{/number}", + "pulls_url": "https://api.github.com/repos/anotherjesse/taboo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/anotherjesse/taboo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/anotherjesse/taboo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/anotherjesse/taboo/labels{/name}", + "releases_url": "https://api.github.com/repos/anotherjesse/taboo/releases{/id}", + "deployments_url": "https://api.github.com/repos/anotherjesse/taboo/deployments" + }, + { + "id": 54, + "name": "foxtracs", + "full_name": "anotherjesse/foxtracs", + "owner": { + "login": "anotherjesse", + "id": 27, + "avatar_url": "https://avatars.githubusercontent.com/u/27?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/anotherjesse/foxtracs", + "description": "firefox trac integration", + "fork": false, + "url": "https://api.github.com/repos/anotherjesse/foxtracs", + "forks_url": "https://api.github.com/repos/anotherjesse/foxtracs/forks", + "keys_url": "https://api.github.com/repos/anotherjesse/foxtracs/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/anotherjesse/foxtracs/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/anotherjesse/foxtracs/teams", + "hooks_url": "https://api.github.com/repos/anotherjesse/foxtracs/hooks", + "issue_events_url": "https://api.github.com/repos/anotherjesse/foxtracs/issues/events{/number}", + "events_url": "https://api.github.com/repos/anotherjesse/foxtracs/events", + "assignees_url": "https://api.github.com/repos/anotherjesse/foxtracs/assignees{/user}", + "branches_url": "https://api.github.com/repos/anotherjesse/foxtracs/branches{/branch}", + "tags_url": "https://api.github.com/repos/anotherjesse/foxtracs/tags", + "blobs_url": "https://api.github.com/repos/anotherjesse/foxtracs/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/anotherjesse/foxtracs/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/anotherjesse/foxtracs/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/anotherjesse/foxtracs/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/anotherjesse/foxtracs/statuses/{sha}", + "languages_url": "https://api.github.com/repos/anotherjesse/foxtracs/languages", + "stargazers_url": "https://api.github.com/repos/anotherjesse/foxtracs/stargazers", + "contributors_url": "https://api.github.com/repos/anotherjesse/foxtracs/contributors", + "subscribers_url": "https://api.github.com/repos/anotherjesse/foxtracs/subscribers", + "subscription_url": "https://api.github.com/repos/anotherjesse/foxtracs/subscription", + "commits_url": "https://api.github.com/repos/anotherjesse/foxtracs/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/anotherjesse/foxtracs/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/anotherjesse/foxtracs/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/anotherjesse/foxtracs/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/anotherjesse/foxtracs/contents/{+path}", + "compare_url": "https://api.github.com/repos/anotherjesse/foxtracs/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/anotherjesse/foxtracs/merges", + "archive_url": "https://api.github.com/repos/anotherjesse/foxtracs/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/anotherjesse/foxtracs/downloads", + "issues_url": "https://api.github.com/repos/anotherjesse/foxtracs/issues{/number}", + "pulls_url": "https://api.github.com/repos/anotherjesse/foxtracs/pulls{/number}", + "milestones_url": "https://api.github.com/repos/anotherjesse/foxtracs/milestones{/number}", + "notifications_url": "https://api.github.com/repos/anotherjesse/foxtracs/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/anotherjesse/foxtracs/labels{/name}", + "releases_url": "https://api.github.com/repos/anotherjesse/foxtracs/releases{/id}", + "deployments_url": "https://api.github.com/repos/anotherjesse/foxtracs/deployments" + }, + { + "id": 56, + "name": "fotomatic", + "full_name": "anotherjesse/fotomatic", + "owner": { + "login": "anotherjesse", + "id": 27, + "avatar_url": "https://avatars.githubusercontent.com/u/27?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/anotherjesse/fotomatic", + "description": "Flash photo widget prototype - hacked at last SHDH of 2007", + "fork": false, + "url": "https://api.github.com/repos/anotherjesse/fotomatic", + "forks_url": "https://api.github.com/repos/anotherjesse/fotomatic/forks", + "keys_url": "https://api.github.com/repos/anotherjesse/fotomatic/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/anotherjesse/fotomatic/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/anotherjesse/fotomatic/teams", + "hooks_url": "https://api.github.com/repos/anotherjesse/fotomatic/hooks", + "issue_events_url": "https://api.github.com/repos/anotherjesse/fotomatic/issues/events{/number}", + "events_url": "https://api.github.com/repos/anotherjesse/fotomatic/events", + "assignees_url": "https://api.github.com/repos/anotherjesse/fotomatic/assignees{/user}", + "branches_url": "https://api.github.com/repos/anotherjesse/fotomatic/branches{/branch}", + "tags_url": "https://api.github.com/repos/anotherjesse/fotomatic/tags", + "blobs_url": "https://api.github.com/repos/anotherjesse/fotomatic/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/anotherjesse/fotomatic/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/anotherjesse/fotomatic/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/anotherjesse/fotomatic/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/anotherjesse/fotomatic/statuses/{sha}", + "languages_url": "https://api.github.com/repos/anotherjesse/fotomatic/languages", + "stargazers_url": "https://api.github.com/repos/anotherjesse/fotomatic/stargazers", + "contributors_url": "https://api.github.com/repos/anotherjesse/fotomatic/contributors", + "subscribers_url": "https://api.github.com/repos/anotherjesse/fotomatic/subscribers", + "subscription_url": "https://api.github.com/repos/anotherjesse/fotomatic/subscription", + "commits_url": "https://api.github.com/repos/anotherjesse/fotomatic/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/anotherjesse/fotomatic/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/anotherjesse/fotomatic/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/anotherjesse/fotomatic/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/anotherjesse/fotomatic/contents/{+path}", + "compare_url": "https://api.github.com/repos/anotherjesse/fotomatic/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/anotherjesse/fotomatic/merges", + "archive_url": "https://api.github.com/repos/anotherjesse/fotomatic/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/anotherjesse/fotomatic/downloads", + "issues_url": "https://api.github.com/repos/anotherjesse/fotomatic/issues{/number}", + "pulls_url": "https://api.github.com/repos/anotherjesse/fotomatic/pulls{/number}", + "milestones_url": "https://api.github.com/repos/anotherjesse/fotomatic/milestones{/number}", + "notifications_url": "https://api.github.com/repos/anotherjesse/fotomatic/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/anotherjesse/fotomatic/labels{/name}", + "releases_url": "https://api.github.com/repos/anotherjesse/fotomatic/releases{/id}", + "deployments_url": "https://api.github.com/repos/anotherjesse/fotomatic/deployments" + }, + { + "id": 61, + "name": "glowstick", + "full_name": "mojombo/glowstick", + "owner": { + "login": "mojombo", + "id": 1, + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mojombo/glowstick", + "description": "A realtime, OpenGL graphing library for Ruby", + "fork": false, + "url": "https://api.github.com/repos/mojombo/glowstick", + "forks_url": "https://api.github.com/repos/mojombo/glowstick/forks", + "keys_url": "https://api.github.com/repos/mojombo/glowstick/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mojombo/glowstick/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mojombo/glowstick/teams", + "hooks_url": "https://api.github.com/repos/mojombo/glowstick/hooks", + "issue_events_url": "https://api.github.com/repos/mojombo/glowstick/issues/events{/number}", + "events_url": "https://api.github.com/repos/mojombo/glowstick/events", + "assignees_url": "https://api.github.com/repos/mojombo/glowstick/assignees{/user}", + "branches_url": "https://api.github.com/repos/mojombo/glowstick/branches{/branch}", + "tags_url": "https://api.github.com/repos/mojombo/glowstick/tags", + "blobs_url": "https://api.github.com/repos/mojombo/glowstick/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mojombo/glowstick/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mojombo/glowstick/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mojombo/glowstick/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mojombo/glowstick/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mojombo/glowstick/languages", + "stargazers_url": "https://api.github.com/repos/mojombo/glowstick/stargazers", + "contributors_url": "https://api.github.com/repos/mojombo/glowstick/contributors", + "subscribers_url": "https://api.github.com/repos/mojombo/glowstick/subscribers", + "subscription_url": "https://api.github.com/repos/mojombo/glowstick/subscription", + "commits_url": "https://api.github.com/repos/mojombo/glowstick/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mojombo/glowstick/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mojombo/glowstick/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mojombo/glowstick/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mojombo/glowstick/contents/{+path}", + "compare_url": "https://api.github.com/repos/mojombo/glowstick/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mojombo/glowstick/merges", + "archive_url": "https://api.github.com/repos/mojombo/glowstick/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mojombo/glowstick/downloads", + "issues_url": "https://api.github.com/repos/mojombo/glowstick/issues{/number}", + "pulls_url": "https://api.github.com/repos/mojombo/glowstick/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mojombo/glowstick/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mojombo/glowstick/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mojombo/glowstick/labels{/name}", + "releases_url": "https://api.github.com/repos/mojombo/glowstick/releases{/id}", + "deployments_url": "https://api.github.com/repos/mojombo/glowstick/deployments" + }, + { + "id": 63, + "name": "starling", + "full_name": "defunkt/starling", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/starling", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/defunkt/starling", + "forks_url": "https://api.github.com/repos/defunkt/starling/forks", + "keys_url": "https://api.github.com/repos/defunkt/starling/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/starling/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/starling/teams", + "hooks_url": "https://api.github.com/repos/defunkt/starling/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/starling/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/starling/events", + "assignees_url": "https://api.github.com/repos/defunkt/starling/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/starling/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/starling/tags", + "blobs_url": "https://api.github.com/repos/defunkt/starling/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/starling/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/starling/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/starling/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/starling/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/starling/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/starling/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/starling/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/starling/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/starling/subscription", + "commits_url": "https://api.github.com/repos/defunkt/starling/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/starling/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/starling/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/starling/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/starling/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/starling/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/starling/merges", + "archive_url": "https://api.github.com/repos/defunkt/starling/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/starling/downloads", + "issues_url": "https://api.github.com/repos/defunkt/starling/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/starling/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/starling/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/starling/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/starling/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/starling/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/starling/deployments" + }, + { + "id": 65, + "name": "merb-more", + "full_name": "wycats/merb-more", + "owner": { + "login": "wycats", + "id": 4, + "avatar_url": "https://avatars.githubusercontent.com/u/4?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wycats/merb-more", + "description": "Merb More: The Full Stack. Take what you need; leave what you don't.", + "fork": false, + "url": "https://api.github.com/repos/wycats/merb-more", + "forks_url": "https://api.github.com/repos/wycats/merb-more/forks", + "keys_url": "https://api.github.com/repos/wycats/merb-more/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wycats/merb-more/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wycats/merb-more/teams", + "hooks_url": "https://api.github.com/repos/wycats/merb-more/hooks", + "issue_events_url": "https://api.github.com/repos/wycats/merb-more/issues/events{/number}", + "events_url": "https://api.github.com/repos/wycats/merb-more/events", + "assignees_url": "https://api.github.com/repos/wycats/merb-more/assignees{/user}", + "branches_url": "https://api.github.com/repos/wycats/merb-more/branches{/branch}", + "tags_url": "https://api.github.com/repos/wycats/merb-more/tags", + "blobs_url": "https://api.github.com/repos/wycats/merb-more/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wycats/merb-more/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wycats/merb-more/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wycats/merb-more/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wycats/merb-more/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wycats/merb-more/languages", + "stargazers_url": "https://api.github.com/repos/wycats/merb-more/stargazers", + "contributors_url": "https://api.github.com/repos/wycats/merb-more/contributors", + "subscribers_url": "https://api.github.com/repos/wycats/merb-more/subscribers", + "subscription_url": "https://api.github.com/repos/wycats/merb-more/subscription", + "commits_url": "https://api.github.com/repos/wycats/merb-more/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wycats/merb-more/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wycats/merb-more/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wycats/merb-more/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wycats/merb-more/contents/{+path}", + "compare_url": "https://api.github.com/repos/wycats/merb-more/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wycats/merb-more/merges", + "archive_url": "https://api.github.com/repos/wycats/merb-more/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wycats/merb-more/downloads", + "issues_url": "https://api.github.com/repos/wycats/merb-more/issues{/number}", + "pulls_url": "https://api.github.com/repos/wycats/merb-more/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wycats/merb-more/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wycats/merb-more/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wycats/merb-more/labels{/name}", + "releases_url": "https://api.github.com/repos/wycats/merb-more/releases{/id}", + "deployments_url": "https://api.github.com/repos/wycats/merb-more/deployments" + }, + { + "id": 68, + "name": "thin", + "full_name": "macournoyer/thin", + "owner": { + "login": "macournoyer", + "id": 22, + "avatar_url": "https://avatars.githubusercontent.com/u/22?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/macournoyer", + "html_url": "https://github.com/macournoyer", + "followers_url": "https://api.github.com/users/macournoyer/followers", + "following_url": "https://api.github.com/users/macournoyer/following{/other_user}", + "gists_url": "https://api.github.com/users/macournoyer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/macournoyer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/macournoyer/subscriptions", + "organizations_url": "https://api.github.com/users/macournoyer/orgs", + "repos_url": "https://api.github.com/users/macournoyer/repos", + "events_url": "https://api.github.com/users/macournoyer/events{/privacy}", + "received_events_url": "https://api.github.com/users/macournoyer/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/macournoyer/thin", + "description": "A very fast & simple Ruby web server", + "fork": false, + "url": "https://api.github.com/repos/macournoyer/thin", + "forks_url": "https://api.github.com/repos/macournoyer/thin/forks", + "keys_url": "https://api.github.com/repos/macournoyer/thin/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/macournoyer/thin/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/macournoyer/thin/teams", + "hooks_url": "https://api.github.com/repos/macournoyer/thin/hooks", + "issue_events_url": "https://api.github.com/repos/macournoyer/thin/issues/events{/number}", + "events_url": "https://api.github.com/repos/macournoyer/thin/events", + "assignees_url": "https://api.github.com/repos/macournoyer/thin/assignees{/user}", + "branches_url": "https://api.github.com/repos/macournoyer/thin/branches{/branch}", + "tags_url": "https://api.github.com/repos/macournoyer/thin/tags", + "blobs_url": "https://api.github.com/repos/macournoyer/thin/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/macournoyer/thin/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/macournoyer/thin/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/macournoyer/thin/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/macournoyer/thin/statuses/{sha}", + "languages_url": "https://api.github.com/repos/macournoyer/thin/languages", + "stargazers_url": "https://api.github.com/repos/macournoyer/thin/stargazers", + "contributors_url": "https://api.github.com/repos/macournoyer/thin/contributors", + "subscribers_url": "https://api.github.com/repos/macournoyer/thin/subscribers", + "subscription_url": "https://api.github.com/repos/macournoyer/thin/subscription", + "commits_url": "https://api.github.com/repos/macournoyer/thin/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/macournoyer/thin/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/macournoyer/thin/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/macournoyer/thin/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/macournoyer/thin/contents/{+path}", + "compare_url": "https://api.github.com/repos/macournoyer/thin/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/macournoyer/thin/merges", + "archive_url": "https://api.github.com/repos/macournoyer/thin/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/macournoyer/thin/downloads", + "issues_url": "https://api.github.com/repos/macournoyer/thin/issues{/number}", + "pulls_url": "https://api.github.com/repos/macournoyer/thin/pulls{/number}", + "milestones_url": "https://api.github.com/repos/macournoyer/thin/milestones{/number}", + "notifications_url": "https://api.github.com/repos/macournoyer/thin/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/macournoyer/thin/labels{/name}", + "releases_url": "https://api.github.com/repos/macournoyer/thin/releases{/id}", + "deployments_url": "https://api.github.com/repos/macournoyer/thin/deployments" + }, + { + "id": 71, + "name": "resource_controller", + "full_name": "jamesgolick/resource_controller", + "owner": { + "login": "jamesgolick", + "id": 37, + "avatar_url": "https://avatars.githubusercontent.com/u/37?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesgolick", + "html_url": "https://github.com/jamesgolick", + "followers_url": "https://api.github.com/users/jamesgolick/followers", + "following_url": "https://api.github.com/users/jamesgolick/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesgolick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesgolick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesgolick/subscriptions", + "organizations_url": "https://api.github.com/users/jamesgolick/orgs", + "repos_url": "https://api.github.com/users/jamesgolick/repos", + "events_url": "https://api.github.com/users/jamesgolick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesgolick/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jamesgolick/resource_controller", + "description": "Rails RESTful controller abstraction plugin.", + "fork": false, + "url": "https://api.github.com/repos/jamesgolick/resource_controller", + "forks_url": "https://api.github.com/repos/jamesgolick/resource_controller/forks", + "keys_url": "https://api.github.com/repos/jamesgolick/resource_controller/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jamesgolick/resource_controller/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jamesgolick/resource_controller/teams", + "hooks_url": "https://api.github.com/repos/jamesgolick/resource_controller/hooks", + "issue_events_url": "https://api.github.com/repos/jamesgolick/resource_controller/issues/events{/number}", + "events_url": "https://api.github.com/repos/jamesgolick/resource_controller/events", + "assignees_url": "https://api.github.com/repos/jamesgolick/resource_controller/assignees{/user}", + "branches_url": "https://api.github.com/repos/jamesgolick/resource_controller/branches{/branch}", + "tags_url": "https://api.github.com/repos/jamesgolick/resource_controller/tags", + "blobs_url": "https://api.github.com/repos/jamesgolick/resource_controller/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jamesgolick/resource_controller/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jamesgolick/resource_controller/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jamesgolick/resource_controller/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jamesgolick/resource_controller/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jamesgolick/resource_controller/languages", + "stargazers_url": "https://api.github.com/repos/jamesgolick/resource_controller/stargazers", + "contributors_url": "https://api.github.com/repos/jamesgolick/resource_controller/contributors", + "subscribers_url": "https://api.github.com/repos/jamesgolick/resource_controller/subscribers", + "subscription_url": "https://api.github.com/repos/jamesgolick/resource_controller/subscription", + "commits_url": "https://api.github.com/repos/jamesgolick/resource_controller/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jamesgolick/resource_controller/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jamesgolick/resource_controller/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jamesgolick/resource_controller/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jamesgolick/resource_controller/contents/{+path}", + "compare_url": "https://api.github.com/repos/jamesgolick/resource_controller/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jamesgolick/resource_controller/merges", + "archive_url": "https://api.github.com/repos/jamesgolick/resource_controller/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jamesgolick/resource_controller/downloads", + "issues_url": "https://api.github.com/repos/jamesgolick/resource_controller/issues{/number}", + "pulls_url": "https://api.github.com/repos/jamesgolick/resource_controller/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jamesgolick/resource_controller/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jamesgolick/resource_controller/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jamesgolick/resource_controller/labels{/name}", + "releases_url": "https://api.github.com/repos/jamesgolick/resource_controller/releases{/id}", + "deployments_url": "https://api.github.com/repos/jamesgolick/resource_controller/deployments" + }, + { + "id": 73, + "name": "markaby", + "full_name": "jamesgolick/markaby", + "owner": { + "login": "jamesgolick", + "id": 37, + "avatar_url": "https://avatars.githubusercontent.com/u/37?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesgolick", + "html_url": "https://github.com/jamesgolick", + "followers_url": "https://api.github.com/users/jamesgolick/followers", + "following_url": "https://api.github.com/users/jamesgolick/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesgolick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesgolick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesgolick/subscriptions", + "organizations_url": "https://api.github.com/users/jamesgolick/orgs", + "repos_url": "https://api.github.com/users/jamesgolick/repos", + "events_url": "https://api.github.com/users/jamesgolick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesgolick/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jamesgolick/markaby", + "description": "Markaby patched to run on rails 2.0.2", + "fork": false, + "url": "https://api.github.com/repos/jamesgolick/markaby", + "forks_url": "https://api.github.com/repos/jamesgolick/markaby/forks", + "keys_url": "https://api.github.com/repos/jamesgolick/markaby/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jamesgolick/markaby/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jamesgolick/markaby/teams", + "hooks_url": "https://api.github.com/repos/jamesgolick/markaby/hooks", + "issue_events_url": "https://api.github.com/repos/jamesgolick/markaby/issues/events{/number}", + "events_url": "https://api.github.com/repos/jamesgolick/markaby/events", + "assignees_url": "https://api.github.com/repos/jamesgolick/markaby/assignees{/user}", + "branches_url": "https://api.github.com/repos/jamesgolick/markaby/branches{/branch}", + "tags_url": "https://api.github.com/repos/jamesgolick/markaby/tags", + "blobs_url": "https://api.github.com/repos/jamesgolick/markaby/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jamesgolick/markaby/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jamesgolick/markaby/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jamesgolick/markaby/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jamesgolick/markaby/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jamesgolick/markaby/languages", + "stargazers_url": "https://api.github.com/repos/jamesgolick/markaby/stargazers", + "contributors_url": "https://api.github.com/repos/jamesgolick/markaby/contributors", + "subscribers_url": "https://api.github.com/repos/jamesgolick/markaby/subscribers", + "subscription_url": "https://api.github.com/repos/jamesgolick/markaby/subscription", + "commits_url": "https://api.github.com/repos/jamesgolick/markaby/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jamesgolick/markaby/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jamesgolick/markaby/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jamesgolick/markaby/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jamesgolick/markaby/contents/{+path}", + "compare_url": "https://api.github.com/repos/jamesgolick/markaby/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jamesgolick/markaby/merges", + "archive_url": "https://api.github.com/repos/jamesgolick/markaby/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jamesgolick/markaby/downloads", + "issues_url": "https://api.github.com/repos/jamesgolick/markaby/issues{/number}", + "pulls_url": "https://api.github.com/repos/jamesgolick/markaby/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jamesgolick/markaby/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jamesgolick/markaby/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jamesgolick/markaby/labels{/name}", + "releases_url": "https://api.github.com/repos/jamesgolick/markaby/releases{/id}", + "deployments_url": "https://api.github.com/repos/jamesgolick/markaby/deployments" + }, + { + "id": 74, + "name": "enum_field", + "full_name": "jamesgolick/enum_field", + "owner": { + "login": "jamesgolick", + "id": 37, + "avatar_url": "https://avatars.githubusercontent.com/u/37?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesgolick", + "html_url": "https://github.com/jamesgolick", + "followers_url": "https://api.github.com/users/jamesgolick/followers", + "following_url": "https://api.github.com/users/jamesgolick/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesgolick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesgolick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesgolick/subscriptions", + "organizations_url": "https://api.github.com/users/jamesgolick/orgs", + "repos_url": "https://api.github.com/users/jamesgolick/repos", + "events_url": "https://api.github.com/users/jamesgolick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesgolick/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jamesgolick/enum_field", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/jamesgolick/enum_field", + "forks_url": "https://api.github.com/repos/jamesgolick/enum_field/forks", + "keys_url": "https://api.github.com/repos/jamesgolick/enum_field/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jamesgolick/enum_field/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jamesgolick/enum_field/teams", + "hooks_url": "https://api.github.com/repos/jamesgolick/enum_field/hooks", + "issue_events_url": "https://api.github.com/repos/jamesgolick/enum_field/issues/events{/number}", + "events_url": "https://api.github.com/repos/jamesgolick/enum_field/events", + "assignees_url": "https://api.github.com/repos/jamesgolick/enum_field/assignees{/user}", + "branches_url": "https://api.github.com/repos/jamesgolick/enum_field/branches{/branch}", + "tags_url": "https://api.github.com/repos/jamesgolick/enum_field/tags", + "blobs_url": "https://api.github.com/repos/jamesgolick/enum_field/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jamesgolick/enum_field/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jamesgolick/enum_field/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jamesgolick/enum_field/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jamesgolick/enum_field/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jamesgolick/enum_field/languages", + "stargazers_url": "https://api.github.com/repos/jamesgolick/enum_field/stargazers", + "contributors_url": "https://api.github.com/repos/jamesgolick/enum_field/contributors", + "subscribers_url": "https://api.github.com/repos/jamesgolick/enum_field/subscribers", + "subscription_url": "https://api.github.com/repos/jamesgolick/enum_field/subscription", + "commits_url": "https://api.github.com/repos/jamesgolick/enum_field/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jamesgolick/enum_field/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jamesgolick/enum_field/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jamesgolick/enum_field/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jamesgolick/enum_field/contents/{+path}", + "compare_url": "https://api.github.com/repos/jamesgolick/enum_field/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jamesgolick/enum_field/merges", + "archive_url": "https://api.github.com/repos/jamesgolick/enum_field/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jamesgolick/enum_field/downloads", + "issues_url": "https://api.github.com/repos/jamesgolick/enum_field/issues{/number}", + "pulls_url": "https://api.github.com/repos/jamesgolick/enum_field/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jamesgolick/enum_field/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jamesgolick/enum_field/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jamesgolick/enum_field/labels{/name}", + "releases_url": "https://api.github.com/repos/jamesgolick/enum_field/releases{/id}", + "deployments_url": "https://api.github.com/repos/jamesgolick/enum_field/deployments" + }, + { + "id": 75, + "name": "subtlety", + "full_name": "defunkt/subtlety", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/subtlety", + "description": "Subtlety: SVN => RSS, hAtom => Atom", + "fork": false, + "url": "https://api.github.com/repos/defunkt/subtlety", + "forks_url": "https://api.github.com/repos/defunkt/subtlety/forks", + "keys_url": "https://api.github.com/repos/defunkt/subtlety/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/subtlety/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/subtlety/teams", + "hooks_url": "https://api.github.com/repos/defunkt/subtlety/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/subtlety/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/subtlety/events", + "assignees_url": "https://api.github.com/repos/defunkt/subtlety/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/subtlety/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/subtlety/tags", + "blobs_url": "https://api.github.com/repos/defunkt/subtlety/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/subtlety/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/subtlety/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/subtlety/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/subtlety/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/subtlety/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/subtlety/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/subtlety/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/subtlety/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/subtlety/subscription", + "commits_url": "https://api.github.com/repos/defunkt/subtlety/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/subtlety/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/subtlety/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/subtlety/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/subtlety/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/subtlety/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/subtlety/merges", + "archive_url": "https://api.github.com/repos/defunkt/subtlety/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/subtlety/downloads", + "issues_url": "https://api.github.com/repos/defunkt/subtlety/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/subtlety/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/subtlety/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/subtlety/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/subtlety/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/subtlety/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/subtlety/deployments" + }, + { + "id": 92, + "name": "zippy", + "full_name": "defunkt/zippy", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/zippy", + "description": "Zippy lil’ zipcode lib.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/zippy", + "forks_url": "https://api.github.com/repos/defunkt/zippy/forks", + "keys_url": "https://api.github.com/repos/defunkt/zippy/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/zippy/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/zippy/teams", + "hooks_url": "https://api.github.com/repos/defunkt/zippy/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/zippy/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/zippy/events", + "assignees_url": "https://api.github.com/repos/defunkt/zippy/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/zippy/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/zippy/tags", + "blobs_url": "https://api.github.com/repos/defunkt/zippy/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/zippy/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/zippy/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/zippy/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/zippy/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/zippy/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/zippy/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/zippy/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/zippy/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/zippy/subscription", + "commits_url": "https://api.github.com/repos/defunkt/zippy/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/zippy/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/zippy/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/zippy/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/zippy/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/zippy/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/zippy/merges", + "archive_url": "https://api.github.com/repos/defunkt/zippy/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/zippy/downloads", + "issues_url": "https://api.github.com/repos/defunkt/zippy/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/zippy/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/zippy/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/zippy/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/zippy/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/zippy/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/zippy/deployments" + }, + { + "id": 93, + "name": "cache_fu", + "full_name": "defunkt/cache_fu", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/cache_fu", + "description": "Ghost from Christmas past. Unmaintained.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/cache_fu", + "forks_url": "https://api.github.com/repos/defunkt/cache_fu/forks", + "keys_url": "https://api.github.com/repos/defunkt/cache_fu/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/cache_fu/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/cache_fu/teams", + "hooks_url": "https://api.github.com/repos/defunkt/cache_fu/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/cache_fu/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/cache_fu/events", + "assignees_url": "https://api.github.com/repos/defunkt/cache_fu/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/cache_fu/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/cache_fu/tags", + "blobs_url": "https://api.github.com/repos/defunkt/cache_fu/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/cache_fu/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/cache_fu/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/cache_fu/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/cache_fu/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/cache_fu/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/cache_fu/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/cache_fu/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/cache_fu/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/cache_fu/subscription", + "commits_url": "https://api.github.com/repos/defunkt/cache_fu/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/cache_fu/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/cache_fu/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/cache_fu/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/cache_fu/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/cache_fu/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/cache_fu/merges", + "archive_url": "https://api.github.com/repos/defunkt/cache_fu/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/cache_fu/downloads", + "issues_url": "https://api.github.com/repos/defunkt/cache_fu/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/cache_fu/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/cache_fu/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/cache_fu/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/cache_fu/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/cache_fu/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/cache_fu/deployments" + }, + { + "id": 95, + "name": "phosphor", + "full_name": "KirinDave/phosphor", + "owner": { + "login": "KirinDave", + "id": 36, + "avatar_url": "https://avatars.githubusercontent.com/u/36?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/KirinDave", + "html_url": "https://github.com/KirinDave", + "followers_url": "https://api.github.com/users/KirinDave/followers", + "following_url": "https://api.github.com/users/KirinDave/following{/other_user}", + "gists_url": "https://api.github.com/users/KirinDave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KirinDave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KirinDave/subscriptions", + "organizations_url": "https://api.github.com/users/KirinDave/orgs", + "repos_url": "https://api.github.com/users/KirinDave/repos", + "events_url": "https://api.github.com/users/KirinDave/events{/privacy}", + "received_events_url": "https://api.github.com/users/KirinDave/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/KirinDave/phosphor", + "description": " A ruby library to inexpensively emit runtime events via Dtrace", + "fork": false, + "url": "https://api.github.com/repos/KirinDave/phosphor", + "forks_url": "https://api.github.com/repos/KirinDave/phosphor/forks", + "keys_url": "https://api.github.com/repos/KirinDave/phosphor/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/KirinDave/phosphor/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/KirinDave/phosphor/teams", + "hooks_url": "https://api.github.com/repos/KirinDave/phosphor/hooks", + "issue_events_url": "https://api.github.com/repos/KirinDave/phosphor/issues/events{/number}", + "events_url": "https://api.github.com/repos/KirinDave/phosphor/events", + "assignees_url": "https://api.github.com/repos/KirinDave/phosphor/assignees{/user}", + "branches_url": "https://api.github.com/repos/KirinDave/phosphor/branches{/branch}", + "tags_url": "https://api.github.com/repos/KirinDave/phosphor/tags", + "blobs_url": "https://api.github.com/repos/KirinDave/phosphor/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/KirinDave/phosphor/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/KirinDave/phosphor/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/KirinDave/phosphor/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/KirinDave/phosphor/statuses/{sha}", + "languages_url": "https://api.github.com/repos/KirinDave/phosphor/languages", + "stargazers_url": "https://api.github.com/repos/KirinDave/phosphor/stargazers", + "contributors_url": "https://api.github.com/repos/KirinDave/phosphor/contributors", + "subscribers_url": "https://api.github.com/repos/KirinDave/phosphor/subscribers", + "subscription_url": "https://api.github.com/repos/KirinDave/phosphor/subscription", + "commits_url": "https://api.github.com/repos/KirinDave/phosphor/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/KirinDave/phosphor/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/KirinDave/phosphor/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/KirinDave/phosphor/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/KirinDave/phosphor/contents/{+path}", + "compare_url": "https://api.github.com/repos/KirinDave/phosphor/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/KirinDave/phosphor/merges", + "archive_url": "https://api.github.com/repos/KirinDave/phosphor/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/KirinDave/phosphor/downloads", + "issues_url": "https://api.github.com/repos/KirinDave/phosphor/issues{/number}", + "pulls_url": "https://api.github.com/repos/KirinDave/phosphor/pulls{/number}", + "milestones_url": "https://api.github.com/repos/KirinDave/phosphor/milestones{/number}", + "notifications_url": "https://api.github.com/repos/KirinDave/phosphor/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/KirinDave/phosphor/labels{/name}", + "releases_url": "https://api.github.com/repos/KirinDave/phosphor/releases{/id}", + "deployments_url": "https://api.github.com/repos/KirinDave/phosphor/deployments" + }, + { + "id": 98, + "name": "sinatra", + "full_name": "bmizerany/sinatra", + "owner": { + "login": "bmizerany", + "id": 46, + "avatar_url": "https://avatars.githubusercontent.com/u/46?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bmizerany", + "html_url": "https://github.com/bmizerany", + "followers_url": "https://api.github.com/users/bmizerany/followers", + "following_url": "https://api.github.com/users/bmizerany/following{/other_user}", + "gists_url": "https://api.github.com/users/bmizerany/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bmizerany/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bmizerany/subscriptions", + "organizations_url": "https://api.github.com/users/bmizerany/orgs", + "repos_url": "https://api.github.com/users/bmizerany/repos", + "events_url": "https://api.github.com/users/bmizerany/events{/privacy}", + "received_events_url": "https://api.github.com/users/bmizerany/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bmizerany/sinatra", + "description": "(offically at github.com/sinatra/sinatra) Classy web-development dressed in a DSL", + "fork": true, + "url": "https://api.github.com/repos/bmizerany/sinatra", + "forks_url": "https://api.github.com/repos/bmizerany/sinatra/forks", + "keys_url": "https://api.github.com/repos/bmizerany/sinatra/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bmizerany/sinatra/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bmizerany/sinatra/teams", + "hooks_url": "https://api.github.com/repos/bmizerany/sinatra/hooks", + "issue_events_url": "https://api.github.com/repos/bmizerany/sinatra/issues/events{/number}", + "events_url": "https://api.github.com/repos/bmizerany/sinatra/events", + "assignees_url": "https://api.github.com/repos/bmizerany/sinatra/assignees{/user}", + "branches_url": "https://api.github.com/repos/bmizerany/sinatra/branches{/branch}", + "tags_url": "https://api.github.com/repos/bmizerany/sinatra/tags", + "blobs_url": "https://api.github.com/repos/bmizerany/sinatra/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bmizerany/sinatra/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bmizerany/sinatra/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bmizerany/sinatra/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bmizerany/sinatra/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bmizerany/sinatra/languages", + "stargazers_url": "https://api.github.com/repos/bmizerany/sinatra/stargazers", + "contributors_url": "https://api.github.com/repos/bmizerany/sinatra/contributors", + "subscribers_url": "https://api.github.com/repos/bmizerany/sinatra/subscribers", + "subscription_url": "https://api.github.com/repos/bmizerany/sinatra/subscription", + "commits_url": "https://api.github.com/repos/bmizerany/sinatra/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bmizerany/sinatra/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bmizerany/sinatra/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bmizerany/sinatra/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bmizerany/sinatra/contents/{+path}", + "compare_url": "https://api.github.com/repos/bmizerany/sinatra/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bmizerany/sinatra/merges", + "archive_url": "https://api.github.com/repos/bmizerany/sinatra/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bmizerany/sinatra/downloads", + "issues_url": "https://api.github.com/repos/bmizerany/sinatra/issues{/number}", + "pulls_url": "https://api.github.com/repos/bmizerany/sinatra/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bmizerany/sinatra/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bmizerany/sinatra/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bmizerany/sinatra/labels{/name}", + "releases_url": "https://api.github.com/repos/bmizerany/sinatra/releases{/id}", + "deployments_url": "https://api.github.com/repos/bmizerany/sinatra/deployments" + }, + { + "id": 102, + "name": "gsa-prototype", + "full_name": "jnewland/gsa-prototype", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/gsa-prototype", + "description": "Prototype/Javascript wrapper for the Google Search Appliance Search Protocol. Fancy cross-domain JSON support included.", + "fork": false, + "url": "https://api.github.com/repos/jnewland/gsa-prototype", + "forks_url": "https://api.github.com/repos/jnewland/gsa-prototype/forks", + "keys_url": "https://api.github.com/repos/jnewland/gsa-prototype/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/gsa-prototype/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/gsa-prototype/teams", + "hooks_url": "https://api.github.com/repos/jnewland/gsa-prototype/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/gsa-prototype/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/gsa-prototype/events", + "assignees_url": "https://api.github.com/repos/jnewland/gsa-prototype/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/gsa-prototype/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/gsa-prototype/tags", + "blobs_url": "https://api.github.com/repos/jnewland/gsa-prototype/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/gsa-prototype/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/gsa-prototype/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/gsa-prototype/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/gsa-prototype/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/gsa-prototype/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/gsa-prototype/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/gsa-prototype/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/gsa-prototype/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/gsa-prototype/subscription", + "commits_url": "https://api.github.com/repos/jnewland/gsa-prototype/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/gsa-prototype/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/gsa-prototype/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/gsa-prototype/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/gsa-prototype/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/gsa-prototype/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/gsa-prototype/merges", + "archive_url": "https://api.github.com/repos/jnewland/gsa-prototype/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/gsa-prototype/downloads", + "issues_url": "https://api.github.com/repos/jnewland/gsa-prototype/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/gsa-prototype/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/gsa-prototype/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/gsa-prototype/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/gsa-prototype/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/gsa-prototype/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/gsa-prototype/deployments" + }, + { + "id": 105, + "name": "duplikate", + "full_name": "technoweenie/duplikate", + "owner": { + "login": "technoweenie", + "id": 21, + "avatar_url": "https://avatars.githubusercontent.com/u/21?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/technoweenie", + "html_url": "https://github.com/technoweenie", + "followers_url": "https://api.github.com/users/technoweenie/followers", + "following_url": "https://api.github.com/users/technoweenie/following{/other_user}", + "gists_url": "https://api.github.com/users/technoweenie/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technoweenie/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technoweenie/subscriptions", + "organizations_url": "https://api.github.com/users/technoweenie/orgs", + "repos_url": "https://api.github.com/users/technoweenie/repos", + "events_url": "https://api.github.com/users/technoweenie/events{/privacy}", + "received_events_url": "https://api.github.com/users/technoweenie/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/technoweenie/duplikate", + "description": "Syncs one directory to another (example: a git project to an svn repo)", + "fork": false, + "url": "https://api.github.com/repos/technoweenie/duplikate", + "forks_url": "https://api.github.com/repos/technoweenie/duplikate/forks", + "keys_url": "https://api.github.com/repos/technoweenie/duplikate/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/technoweenie/duplikate/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/technoweenie/duplikate/teams", + "hooks_url": "https://api.github.com/repos/technoweenie/duplikate/hooks", + "issue_events_url": "https://api.github.com/repos/technoweenie/duplikate/issues/events{/number}", + "events_url": "https://api.github.com/repos/technoweenie/duplikate/events", + "assignees_url": "https://api.github.com/repos/technoweenie/duplikate/assignees{/user}", + "branches_url": "https://api.github.com/repos/technoweenie/duplikate/branches{/branch}", + "tags_url": "https://api.github.com/repos/technoweenie/duplikate/tags", + "blobs_url": "https://api.github.com/repos/technoweenie/duplikate/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/technoweenie/duplikate/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/technoweenie/duplikate/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/technoweenie/duplikate/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/technoweenie/duplikate/statuses/{sha}", + "languages_url": "https://api.github.com/repos/technoweenie/duplikate/languages", + "stargazers_url": "https://api.github.com/repos/technoweenie/duplikate/stargazers", + "contributors_url": "https://api.github.com/repos/technoweenie/duplikate/contributors", + "subscribers_url": "https://api.github.com/repos/technoweenie/duplikate/subscribers", + "subscription_url": "https://api.github.com/repos/technoweenie/duplikate/subscription", + "commits_url": "https://api.github.com/repos/technoweenie/duplikate/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/technoweenie/duplikate/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/technoweenie/duplikate/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/technoweenie/duplikate/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/technoweenie/duplikate/contents/{+path}", + "compare_url": "https://api.github.com/repos/technoweenie/duplikate/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/technoweenie/duplikate/merges", + "archive_url": "https://api.github.com/repos/technoweenie/duplikate/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/technoweenie/duplikate/downloads", + "issues_url": "https://api.github.com/repos/technoweenie/duplikate/issues{/number}", + "pulls_url": "https://api.github.com/repos/technoweenie/duplikate/pulls{/number}", + "milestones_url": "https://api.github.com/repos/technoweenie/duplikate/milestones{/number}", + "notifications_url": "https://api.github.com/repos/technoweenie/duplikate/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/technoweenie/duplikate/labels{/name}", + "releases_url": "https://api.github.com/repos/technoweenie/duplikate/releases{/id}", + "deployments_url": "https://api.github.com/repos/technoweenie/duplikate/deployments" + }, + { + "id": 118, + "name": "lazy_record", + "full_name": "jnewland/lazy_record", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/lazy_record", + "description": "Proof of concept Lazy-Loading for ActiveRecord. Inspired by the 'kickers' of Ambition.", + "fork": false, + "url": "https://api.github.com/repos/jnewland/lazy_record", + "forks_url": "https://api.github.com/repos/jnewland/lazy_record/forks", + "keys_url": "https://api.github.com/repos/jnewland/lazy_record/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/lazy_record/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/lazy_record/teams", + "hooks_url": "https://api.github.com/repos/jnewland/lazy_record/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/lazy_record/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/lazy_record/events", + "assignees_url": "https://api.github.com/repos/jnewland/lazy_record/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/lazy_record/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/lazy_record/tags", + "blobs_url": "https://api.github.com/repos/jnewland/lazy_record/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/lazy_record/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/lazy_record/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/lazy_record/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/lazy_record/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/lazy_record/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/lazy_record/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/lazy_record/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/lazy_record/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/lazy_record/subscription", + "commits_url": "https://api.github.com/repos/jnewland/lazy_record/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/lazy_record/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/lazy_record/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/lazy_record/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/lazy_record/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/lazy_record/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/lazy_record/merges", + "archive_url": "https://api.github.com/repos/jnewland/lazy_record/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/lazy_record/downloads", + "issues_url": "https://api.github.com/repos/jnewland/lazy_record/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/lazy_record/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/lazy_record/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/lazy_record/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/lazy_record/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/lazy_record/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/lazy_record/deployments" + }, + { + "id": 119, + "name": "gsa-feeds", + "full_name": "jnewland/gsa-feeds", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/gsa-feeds", + "description": "A Ruby wrapper for the Google Search Appliance Feeds Protocol", + "fork": false, + "url": "https://api.github.com/repos/jnewland/gsa-feeds", + "forks_url": "https://api.github.com/repos/jnewland/gsa-feeds/forks", + "keys_url": "https://api.github.com/repos/jnewland/gsa-feeds/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/gsa-feeds/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/gsa-feeds/teams", + "hooks_url": "https://api.github.com/repos/jnewland/gsa-feeds/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/gsa-feeds/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/gsa-feeds/events", + "assignees_url": "https://api.github.com/repos/jnewland/gsa-feeds/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/gsa-feeds/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/gsa-feeds/tags", + "blobs_url": "https://api.github.com/repos/jnewland/gsa-feeds/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/gsa-feeds/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/gsa-feeds/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/gsa-feeds/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/gsa-feeds/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/gsa-feeds/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/gsa-feeds/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/gsa-feeds/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/gsa-feeds/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/gsa-feeds/subscription", + "commits_url": "https://api.github.com/repos/jnewland/gsa-feeds/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/gsa-feeds/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/gsa-feeds/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/gsa-feeds/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/gsa-feeds/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/gsa-feeds/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/gsa-feeds/merges", + "archive_url": "https://api.github.com/repos/jnewland/gsa-feeds/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/gsa-feeds/downloads", + "issues_url": "https://api.github.com/repos/jnewland/gsa-feeds/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/gsa-feeds/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/gsa-feeds/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/gsa-feeds/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/gsa-feeds/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/gsa-feeds/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/gsa-feeds/deployments" + }, + { + "id": 120, + "name": "votigoto", + "full_name": "jnewland/votigoto", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/votigoto", + "description": "Ruby API wrapper for the TiVoToGo protocol. Use it to access a list of recorded shows and programs on your Tivo.", + "fork": false, + "url": "https://api.github.com/repos/jnewland/votigoto", + "forks_url": "https://api.github.com/repos/jnewland/votigoto/forks", + "keys_url": "https://api.github.com/repos/jnewland/votigoto/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/votigoto/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/votigoto/teams", + "hooks_url": "https://api.github.com/repos/jnewland/votigoto/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/votigoto/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/votigoto/events", + "assignees_url": "https://api.github.com/repos/jnewland/votigoto/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/votigoto/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/votigoto/tags", + "blobs_url": "https://api.github.com/repos/jnewland/votigoto/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/votigoto/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/votigoto/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/votigoto/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/votigoto/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/votigoto/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/votigoto/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/votigoto/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/votigoto/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/votigoto/subscription", + "commits_url": "https://api.github.com/repos/jnewland/votigoto/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/votigoto/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/votigoto/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/votigoto/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/votigoto/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/votigoto/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/votigoto/merges", + "archive_url": "https://api.github.com/repos/jnewland/votigoto/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/votigoto/downloads", + "issues_url": "https://api.github.com/repos/jnewland/votigoto/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/votigoto/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/votigoto/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/votigoto/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/votigoto/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/votigoto/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/votigoto/deployments" + }, + { + "id": 127, + "name": "mofo", + "full_name": "defunkt/mofo", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/mofo", + "description": "Mofo was a fast and simple microformat parser, based on a concise DSL and Hpricot. No longer maintained.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/mofo", + "forks_url": "https://api.github.com/repos/defunkt/mofo/forks", + "keys_url": "https://api.github.com/repos/defunkt/mofo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/mofo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/mofo/teams", + "hooks_url": "https://api.github.com/repos/defunkt/mofo/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/mofo/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/mofo/events", + "assignees_url": "https://api.github.com/repos/defunkt/mofo/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/mofo/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/mofo/tags", + "blobs_url": "https://api.github.com/repos/defunkt/mofo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/mofo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/mofo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/mofo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/mofo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/mofo/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/mofo/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/mofo/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/mofo/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/mofo/subscription", + "commits_url": "https://api.github.com/repos/defunkt/mofo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/mofo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/mofo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/mofo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/mofo/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/mofo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/mofo/merges", + "archive_url": "https://api.github.com/repos/defunkt/mofo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/mofo/downloads", + "issues_url": "https://api.github.com/repos/defunkt/mofo/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/mofo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/mofo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/mofo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/mofo/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/mofo/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/mofo/deployments" + }, + { + "id": 129, + "name": "xhtmlize", + "full_name": "jnewland/xhtmlize", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/xhtmlize", + "description": "Rails helper to XHTML-ize chunks of user submitted HTML. For the standardista in all of us", + "fork": false, + "url": "https://api.github.com/repos/jnewland/xhtmlize", + "forks_url": "https://api.github.com/repos/jnewland/xhtmlize/forks", + "keys_url": "https://api.github.com/repos/jnewland/xhtmlize/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/xhtmlize/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/xhtmlize/teams", + "hooks_url": "https://api.github.com/repos/jnewland/xhtmlize/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/xhtmlize/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/xhtmlize/events", + "assignees_url": "https://api.github.com/repos/jnewland/xhtmlize/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/xhtmlize/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/xhtmlize/tags", + "blobs_url": "https://api.github.com/repos/jnewland/xhtmlize/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/xhtmlize/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/xhtmlize/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/xhtmlize/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/xhtmlize/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/xhtmlize/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/xhtmlize/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/xhtmlize/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/xhtmlize/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/xhtmlize/subscription", + "commits_url": "https://api.github.com/repos/jnewland/xhtmlize/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/xhtmlize/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/xhtmlize/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/xhtmlize/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/xhtmlize/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/xhtmlize/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/xhtmlize/merges", + "archive_url": "https://api.github.com/repos/jnewland/xhtmlize/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/xhtmlize/downloads", + "issues_url": "https://api.github.com/repos/jnewland/xhtmlize/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/xhtmlize/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/xhtmlize/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/xhtmlize/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/xhtmlize/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/xhtmlize/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/xhtmlize/deployments" + }, + { + "id": 130, + "name": "ruby-git", + "full_name": "schacon/ruby-git", + "owner": { + "login": "schacon", + "id": 70, + "avatar_url": "https://avatars.githubusercontent.com/u/70?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/schacon", + "html_url": "https://github.com/schacon", + "followers_url": "https://api.github.com/users/schacon/followers", + "following_url": "https://api.github.com/users/schacon/following{/other_user}", + "gists_url": "https://api.github.com/users/schacon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schacon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schacon/subscriptions", + "organizations_url": "https://api.github.com/users/schacon/orgs", + "repos_url": "https://api.github.com/users/schacon/repos", + "events_url": "https://api.github.com/users/schacon/events{/privacy}", + "received_events_url": "https://api.github.com/users/schacon/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/schacon/ruby-git", + "description": "Ruby/Git is a Ruby library that can be used to create, read and manipulate Git repositories by wrapping system calls to the git binary.", + "fork": false, + "url": "https://api.github.com/repos/schacon/ruby-git", + "forks_url": "https://api.github.com/repos/schacon/ruby-git/forks", + "keys_url": "https://api.github.com/repos/schacon/ruby-git/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/schacon/ruby-git/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/schacon/ruby-git/teams", + "hooks_url": "https://api.github.com/repos/schacon/ruby-git/hooks", + "issue_events_url": "https://api.github.com/repos/schacon/ruby-git/issues/events{/number}", + "events_url": "https://api.github.com/repos/schacon/ruby-git/events", + "assignees_url": "https://api.github.com/repos/schacon/ruby-git/assignees{/user}", + "branches_url": "https://api.github.com/repos/schacon/ruby-git/branches{/branch}", + "tags_url": "https://api.github.com/repos/schacon/ruby-git/tags", + "blobs_url": "https://api.github.com/repos/schacon/ruby-git/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/schacon/ruby-git/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/schacon/ruby-git/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/schacon/ruby-git/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/schacon/ruby-git/statuses/{sha}", + "languages_url": "https://api.github.com/repos/schacon/ruby-git/languages", + "stargazers_url": "https://api.github.com/repos/schacon/ruby-git/stargazers", + "contributors_url": "https://api.github.com/repos/schacon/ruby-git/contributors", + "subscribers_url": "https://api.github.com/repos/schacon/ruby-git/subscribers", + "subscription_url": "https://api.github.com/repos/schacon/ruby-git/subscription", + "commits_url": "https://api.github.com/repos/schacon/ruby-git/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/schacon/ruby-git/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/schacon/ruby-git/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/schacon/ruby-git/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/schacon/ruby-git/contents/{+path}", + "compare_url": "https://api.github.com/repos/schacon/ruby-git/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/schacon/ruby-git/merges", + "archive_url": "https://api.github.com/repos/schacon/ruby-git/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/schacon/ruby-git/downloads", + "issues_url": "https://api.github.com/repos/schacon/ruby-git/issues{/number}", + "pulls_url": "https://api.github.com/repos/schacon/ruby-git/pulls{/number}", + "milestones_url": "https://api.github.com/repos/schacon/ruby-git/milestones{/number}", + "notifications_url": "https://api.github.com/repos/schacon/ruby-git/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/schacon/ruby-git/labels{/name}", + "releases_url": "https://api.github.com/repos/schacon/ruby-git/releases{/id}", + "deployments_url": "https://api.github.com/repos/schacon/ruby-git/deployments" + }, + { + "id": 131, + "name": "bmhsearch", + "full_name": "ezmobius/bmhsearch", + "owner": { + "login": "ezmobius", + "id": 5, + "avatar_url": "https://avatars.githubusercontent.com/u/5?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ezmobius", + "html_url": "https://github.com/ezmobius", + "followers_url": "https://api.github.com/users/ezmobius/followers", + "following_url": "https://api.github.com/users/ezmobius/following{/other_user}", + "gists_url": "https://api.github.com/users/ezmobius/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezmobius/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezmobius/subscriptions", + "organizations_url": "https://api.github.com/users/ezmobius/orgs", + "repos_url": "https://api.github.com/users/ezmobius/repos", + "events_url": "https://api.github.com/users/ezmobius/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezmobius/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ezmobius/bmhsearch", + "description": "Fast string searcher, useful for multi-part post parsing", + "fork": false, + "url": "https://api.github.com/repos/ezmobius/bmhsearch", + "forks_url": "https://api.github.com/repos/ezmobius/bmhsearch/forks", + "keys_url": "https://api.github.com/repos/ezmobius/bmhsearch/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ezmobius/bmhsearch/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ezmobius/bmhsearch/teams", + "hooks_url": "https://api.github.com/repos/ezmobius/bmhsearch/hooks", + "issue_events_url": "https://api.github.com/repos/ezmobius/bmhsearch/issues/events{/number}", + "events_url": "https://api.github.com/repos/ezmobius/bmhsearch/events", + "assignees_url": "https://api.github.com/repos/ezmobius/bmhsearch/assignees{/user}", + "branches_url": "https://api.github.com/repos/ezmobius/bmhsearch/branches{/branch}", + "tags_url": "https://api.github.com/repos/ezmobius/bmhsearch/tags", + "blobs_url": "https://api.github.com/repos/ezmobius/bmhsearch/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ezmobius/bmhsearch/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ezmobius/bmhsearch/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ezmobius/bmhsearch/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ezmobius/bmhsearch/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ezmobius/bmhsearch/languages", + "stargazers_url": "https://api.github.com/repos/ezmobius/bmhsearch/stargazers", + "contributors_url": "https://api.github.com/repos/ezmobius/bmhsearch/contributors", + "subscribers_url": "https://api.github.com/repos/ezmobius/bmhsearch/subscribers", + "subscription_url": "https://api.github.com/repos/ezmobius/bmhsearch/subscription", + "commits_url": "https://api.github.com/repos/ezmobius/bmhsearch/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ezmobius/bmhsearch/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ezmobius/bmhsearch/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ezmobius/bmhsearch/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ezmobius/bmhsearch/contents/{+path}", + "compare_url": "https://api.github.com/repos/ezmobius/bmhsearch/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ezmobius/bmhsearch/merges", + "archive_url": "https://api.github.com/repos/ezmobius/bmhsearch/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ezmobius/bmhsearch/downloads", + "issues_url": "https://api.github.com/repos/ezmobius/bmhsearch/issues{/number}", + "pulls_url": "https://api.github.com/repos/ezmobius/bmhsearch/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ezmobius/bmhsearch/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ezmobius/bmhsearch/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ezmobius/bmhsearch/labels{/name}", + "releases_url": "https://api.github.com/repos/ezmobius/bmhsearch/releases{/id}", + "deployments_url": "https://api.github.com/repos/ezmobius/bmhsearch/deployments" + }, + { + "id": 137, + "name": "mofo", + "full_name": "uggedal/mofo", + "owner": { + "login": "uggedal", + "id": 71, + "avatar_url": "https://avatars.githubusercontent.com/u/71?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/uggedal", + "html_url": "https://github.com/uggedal", + "followers_url": "https://api.github.com/users/uggedal/followers", + "following_url": "https://api.github.com/users/uggedal/following{/other_user}", + "gists_url": "https://api.github.com/users/uggedal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/uggedal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/uggedal/subscriptions", + "organizations_url": "https://api.github.com/users/uggedal/orgs", + "repos_url": "https://api.github.com/users/uggedal/repos", + "events_url": "https://api.github.com/users/uggedal/events{/privacy}", + "received_events_url": "https://api.github.com/users/uggedal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/uggedal/mofo", + "description": "Mofo is a fast and simple microformat parser, based on a concise DSL and Hpricot.", + "fork": true, + "url": "https://api.github.com/repos/uggedal/mofo", + "forks_url": "https://api.github.com/repos/uggedal/mofo/forks", + "keys_url": "https://api.github.com/repos/uggedal/mofo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/uggedal/mofo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/uggedal/mofo/teams", + "hooks_url": "https://api.github.com/repos/uggedal/mofo/hooks", + "issue_events_url": "https://api.github.com/repos/uggedal/mofo/issues/events{/number}", + "events_url": "https://api.github.com/repos/uggedal/mofo/events", + "assignees_url": "https://api.github.com/repos/uggedal/mofo/assignees{/user}", + "branches_url": "https://api.github.com/repos/uggedal/mofo/branches{/branch}", + "tags_url": "https://api.github.com/repos/uggedal/mofo/tags", + "blobs_url": "https://api.github.com/repos/uggedal/mofo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/uggedal/mofo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/uggedal/mofo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/uggedal/mofo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/uggedal/mofo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/uggedal/mofo/languages", + "stargazers_url": "https://api.github.com/repos/uggedal/mofo/stargazers", + "contributors_url": "https://api.github.com/repos/uggedal/mofo/contributors", + "subscribers_url": "https://api.github.com/repos/uggedal/mofo/subscribers", + "subscription_url": "https://api.github.com/repos/uggedal/mofo/subscription", + "commits_url": "https://api.github.com/repos/uggedal/mofo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/uggedal/mofo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/uggedal/mofo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/uggedal/mofo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/uggedal/mofo/contents/{+path}", + "compare_url": "https://api.github.com/repos/uggedal/mofo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/uggedal/mofo/merges", + "archive_url": "https://api.github.com/repos/uggedal/mofo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/uggedal/mofo/downloads", + "issues_url": "https://api.github.com/repos/uggedal/mofo/issues{/number}", + "pulls_url": "https://api.github.com/repos/uggedal/mofo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/uggedal/mofo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/uggedal/mofo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/uggedal/mofo/labels{/name}", + "releases_url": "https://api.github.com/repos/uggedal/mofo/releases{/id}", + "deployments_url": "https://api.github.com/repos/uggedal/mofo/deployments" + }, + { + "id": 139, + "name": "simply_versioned", + "full_name": "mmower/simply_versioned", + "owner": { + "login": "mmower", + "id": 74, + "avatar_url": "https://avatars.githubusercontent.com/u/74?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mmower", + "html_url": "https://github.com/mmower", + "followers_url": "https://api.github.com/users/mmower/followers", + "following_url": "https://api.github.com/users/mmower/following{/other_user}", + "gists_url": "https://api.github.com/users/mmower/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mmower/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mmower/subscriptions", + "organizations_url": "https://api.github.com/users/mmower/orgs", + "repos_url": "https://api.github.com/users/mmower/repos", + "events_url": "https://api.github.com/users/mmower/events{/privacy}", + "received_events_url": "https://api.github.com/users/mmower/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mmower/simply_versioned", + "description": "A simple, non-invasive, approach to versioning ActiveRecord models", + "fork": false, + "url": "https://api.github.com/repos/mmower/simply_versioned", + "forks_url": "https://api.github.com/repos/mmower/simply_versioned/forks", + "keys_url": "https://api.github.com/repos/mmower/simply_versioned/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mmower/simply_versioned/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mmower/simply_versioned/teams", + "hooks_url": "https://api.github.com/repos/mmower/simply_versioned/hooks", + "issue_events_url": "https://api.github.com/repos/mmower/simply_versioned/issues/events{/number}", + "events_url": "https://api.github.com/repos/mmower/simply_versioned/events", + "assignees_url": "https://api.github.com/repos/mmower/simply_versioned/assignees{/user}", + "branches_url": "https://api.github.com/repos/mmower/simply_versioned/branches{/branch}", + "tags_url": "https://api.github.com/repos/mmower/simply_versioned/tags", + "blobs_url": "https://api.github.com/repos/mmower/simply_versioned/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mmower/simply_versioned/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mmower/simply_versioned/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mmower/simply_versioned/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mmower/simply_versioned/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mmower/simply_versioned/languages", + "stargazers_url": "https://api.github.com/repos/mmower/simply_versioned/stargazers", + "contributors_url": "https://api.github.com/repos/mmower/simply_versioned/contributors", + "subscribers_url": "https://api.github.com/repos/mmower/simply_versioned/subscribers", + "subscription_url": "https://api.github.com/repos/mmower/simply_versioned/subscription", + "commits_url": "https://api.github.com/repos/mmower/simply_versioned/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mmower/simply_versioned/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mmower/simply_versioned/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mmower/simply_versioned/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mmower/simply_versioned/contents/{+path}", + "compare_url": "https://api.github.com/repos/mmower/simply_versioned/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mmower/simply_versioned/merges", + "archive_url": "https://api.github.com/repos/mmower/simply_versioned/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mmower/simply_versioned/downloads", + "issues_url": "https://api.github.com/repos/mmower/simply_versioned/issues{/number}", + "pulls_url": "https://api.github.com/repos/mmower/simply_versioned/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mmower/simply_versioned/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mmower/simply_versioned/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mmower/simply_versioned/labels{/name}", + "releases_url": "https://api.github.com/repos/mmower/simply_versioned/releases{/id}", + "deployments_url": "https://api.github.com/repos/mmower/simply_versioned/deployments" + }, + { + "id": 140, + "name": "gchart", + "full_name": "abhay/gchart", + "owner": { + "login": "abhay", + "id": 75, + "avatar_url": "https://avatars.githubusercontent.com/u/75?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/abhay", + "html_url": "https://github.com/abhay", + "followers_url": "https://api.github.com/users/abhay/followers", + "following_url": "https://api.github.com/users/abhay/following{/other_user}", + "gists_url": "https://api.github.com/users/abhay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/abhay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/abhay/subscriptions", + "organizations_url": "https://api.github.com/users/abhay/orgs", + "repos_url": "https://api.github.com/users/abhay/repos", + "events_url": "https://api.github.com/users/abhay/events{/privacy}", + "received_events_url": "https://api.github.com/users/abhay/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/abhay/gchart", + "description": "GChart exposes the Google Chart API (http://code.google.com/apis/chart) via a friendly Ruby interface. It can generate the URL for a given chart (for webpage use), or download the generated PNG (for offline use).", + "fork": false, + "url": "https://api.github.com/repos/abhay/gchart", + "forks_url": "https://api.github.com/repos/abhay/gchart/forks", + "keys_url": "https://api.github.com/repos/abhay/gchart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/abhay/gchart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/abhay/gchart/teams", + "hooks_url": "https://api.github.com/repos/abhay/gchart/hooks", + "issue_events_url": "https://api.github.com/repos/abhay/gchart/issues/events{/number}", + "events_url": "https://api.github.com/repos/abhay/gchart/events", + "assignees_url": "https://api.github.com/repos/abhay/gchart/assignees{/user}", + "branches_url": "https://api.github.com/repos/abhay/gchart/branches{/branch}", + "tags_url": "https://api.github.com/repos/abhay/gchart/tags", + "blobs_url": "https://api.github.com/repos/abhay/gchart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/abhay/gchart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/abhay/gchart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/abhay/gchart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/abhay/gchart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/abhay/gchart/languages", + "stargazers_url": "https://api.github.com/repos/abhay/gchart/stargazers", + "contributors_url": "https://api.github.com/repos/abhay/gchart/contributors", + "subscribers_url": "https://api.github.com/repos/abhay/gchart/subscribers", + "subscription_url": "https://api.github.com/repos/abhay/gchart/subscription", + "commits_url": "https://api.github.com/repos/abhay/gchart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/abhay/gchart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/abhay/gchart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/abhay/gchart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/abhay/gchart/contents/{+path}", + "compare_url": "https://api.github.com/repos/abhay/gchart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/abhay/gchart/merges", + "archive_url": "https://api.github.com/repos/abhay/gchart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/abhay/gchart/downloads", + "issues_url": "https://api.github.com/repos/abhay/gchart/issues{/number}", + "pulls_url": "https://api.github.com/repos/abhay/gchart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/abhay/gchart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/abhay/gchart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/abhay/gchart/labels{/name}", + "releases_url": "https://api.github.com/repos/abhay/gchart/releases{/id}", + "deployments_url": "https://api.github.com/repos/abhay/gchart/deployments" + }, + { + "id": 141, + "name": "schemr", + "full_name": "benburkert/schemr", + "owner": { + "login": "benburkert", + "id": 77, + "avatar_url": "https://avatars.githubusercontent.com/u/77?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/benburkert", + "html_url": "https://github.com/benburkert", + "followers_url": "https://api.github.com/users/benburkert/followers", + "following_url": "https://api.github.com/users/benburkert/following{/other_user}", + "gists_url": "https://api.github.com/users/benburkert/gists{/gist_id}", + "starred_url": "https://api.github.com/users/benburkert/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/benburkert/subscriptions", + "organizations_url": "https://api.github.com/users/benburkert/orgs", + "repos_url": "https://api.github.com/users/benburkert/repos", + "events_url": "https://api.github.com/users/benburkert/events{/privacy}", + "received_events_url": "https://api.github.com/users/benburkert/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/benburkert/schemr", + "description": "A DSL for creating schema documents in ruby", + "fork": false, + "url": "https://api.github.com/repos/benburkert/schemr", + "forks_url": "https://api.github.com/repos/benburkert/schemr/forks", + "keys_url": "https://api.github.com/repos/benburkert/schemr/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/benburkert/schemr/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/benburkert/schemr/teams", + "hooks_url": "https://api.github.com/repos/benburkert/schemr/hooks", + "issue_events_url": "https://api.github.com/repos/benburkert/schemr/issues/events{/number}", + "events_url": "https://api.github.com/repos/benburkert/schemr/events", + "assignees_url": "https://api.github.com/repos/benburkert/schemr/assignees{/user}", + "branches_url": "https://api.github.com/repos/benburkert/schemr/branches{/branch}", + "tags_url": "https://api.github.com/repos/benburkert/schemr/tags", + "blobs_url": "https://api.github.com/repos/benburkert/schemr/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/benburkert/schemr/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/benburkert/schemr/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/benburkert/schemr/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/benburkert/schemr/statuses/{sha}", + "languages_url": "https://api.github.com/repos/benburkert/schemr/languages", + "stargazers_url": "https://api.github.com/repos/benburkert/schemr/stargazers", + "contributors_url": "https://api.github.com/repos/benburkert/schemr/contributors", + "subscribers_url": "https://api.github.com/repos/benburkert/schemr/subscribers", + "subscription_url": "https://api.github.com/repos/benburkert/schemr/subscription", + "commits_url": "https://api.github.com/repos/benburkert/schemr/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/benburkert/schemr/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/benburkert/schemr/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/benburkert/schemr/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/benburkert/schemr/contents/{+path}", + "compare_url": "https://api.github.com/repos/benburkert/schemr/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/benburkert/schemr/merges", + "archive_url": "https://api.github.com/repos/benburkert/schemr/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/benburkert/schemr/downloads", + "issues_url": "https://api.github.com/repos/benburkert/schemr/issues{/number}", + "pulls_url": "https://api.github.com/repos/benburkert/schemr/pulls{/number}", + "milestones_url": "https://api.github.com/repos/benburkert/schemr/milestones{/number}", + "notifications_url": "https://api.github.com/repos/benburkert/schemr/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/benburkert/schemr/labels{/name}", + "releases_url": "https://api.github.com/repos/benburkert/schemr/releases{/id}", + "deployments_url": "https://api.github.com/repos/benburkert/schemr/deployments" + }, + { + "id": 142, + "name": "calais", + "full_name": "abhay/calais", + "owner": { + "login": "abhay", + "id": 75, + "avatar_url": "https://avatars.githubusercontent.com/u/75?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/abhay", + "html_url": "https://github.com/abhay", + "followers_url": "https://api.github.com/users/abhay/followers", + "following_url": "https://api.github.com/users/abhay/following{/other_user}", + "gists_url": "https://api.github.com/users/abhay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/abhay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/abhay/subscriptions", + "organizations_url": "https://api.github.com/users/abhay/orgs", + "repos_url": "https://api.github.com/users/abhay/repos", + "events_url": "https://api.github.com/users/abhay/events{/privacy}", + "received_events_url": "https://api.github.com/users/abhay/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/abhay/calais", + "description": "A Ruby interface to the Open Calais API (http://opencalais.com)", + "fork": false, + "url": "https://api.github.com/repos/abhay/calais", + "forks_url": "https://api.github.com/repos/abhay/calais/forks", + "keys_url": "https://api.github.com/repos/abhay/calais/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/abhay/calais/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/abhay/calais/teams", + "hooks_url": "https://api.github.com/repos/abhay/calais/hooks", + "issue_events_url": "https://api.github.com/repos/abhay/calais/issues/events{/number}", + "events_url": "https://api.github.com/repos/abhay/calais/events", + "assignees_url": "https://api.github.com/repos/abhay/calais/assignees{/user}", + "branches_url": "https://api.github.com/repos/abhay/calais/branches{/branch}", + "tags_url": "https://api.github.com/repos/abhay/calais/tags", + "blobs_url": "https://api.github.com/repos/abhay/calais/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/abhay/calais/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/abhay/calais/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/abhay/calais/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/abhay/calais/statuses/{sha}", + "languages_url": "https://api.github.com/repos/abhay/calais/languages", + "stargazers_url": "https://api.github.com/repos/abhay/calais/stargazers", + "contributors_url": "https://api.github.com/repos/abhay/calais/contributors", + "subscribers_url": "https://api.github.com/repos/abhay/calais/subscribers", + "subscription_url": "https://api.github.com/repos/abhay/calais/subscription", + "commits_url": "https://api.github.com/repos/abhay/calais/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/abhay/calais/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/abhay/calais/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/abhay/calais/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/abhay/calais/contents/{+path}", + "compare_url": "https://api.github.com/repos/abhay/calais/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/abhay/calais/merges", + "archive_url": "https://api.github.com/repos/abhay/calais/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/abhay/calais/downloads", + "issues_url": "https://api.github.com/repos/abhay/calais/issues{/number}", + "pulls_url": "https://api.github.com/repos/abhay/calais/pulls{/number}", + "milestones_url": "https://api.github.com/repos/abhay/calais/milestones{/number}", + "notifications_url": "https://api.github.com/repos/abhay/calais/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/abhay/calais/labels{/name}", + "releases_url": "https://api.github.com/repos/abhay/calais/releases{/id}", + "deployments_url": "https://api.github.com/repos/abhay/calais/deployments" + }, + { + "id": 144, + "name": "chronic", + "full_name": "mojombo/chronic", + "owner": { + "login": "mojombo", + "id": 1, + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mojombo/chronic", + "description": "Chronic is a pure Ruby natural language date parser.", + "fork": false, + "url": "https://api.github.com/repos/mojombo/chronic", + "forks_url": "https://api.github.com/repos/mojombo/chronic/forks", + "keys_url": "https://api.github.com/repos/mojombo/chronic/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mojombo/chronic/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mojombo/chronic/teams", + "hooks_url": "https://api.github.com/repos/mojombo/chronic/hooks", + "issue_events_url": "https://api.github.com/repos/mojombo/chronic/issues/events{/number}", + "events_url": "https://api.github.com/repos/mojombo/chronic/events", + "assignees_url": "https://api.github.com/repos/mojombo/chronic/assignees{/user}", + "branches_url": "https://api.github.com/repos/mojombo/chronic/branches{/branch}", + "tags_url": "https://api.github.com/repos/mojombo/chronic/tags", + "blobs_url": "https://api.github.com/repos/mojombo/chronic/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mojombo/chronic/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mojombo/chronic/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mojombo/chronic/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mojombo/chronic/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mojombo/chronic/languages", + "stargazers_url": "https://api.github.com/repos/mojombo/chronic/stargazers", + "contributors_url": "https://api.github.com/repos/mojombo/chronic/contributors", + "subscribers_url": "https://api.github.com/repos/mojombo/chronic/subscribers", + "subscription_url": "https://api.github.com/repos/mojombo/chronic/subscription", + "commits_url": "https://api.github.com/repos/mojombo/chronic/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mojombo/chronic/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mojombo/chronic/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mojombo/chronic/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mojombo/chronic/contents/{+path}", + "compare_url": "https://api.github.com/repos/mojombo/chronic/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mojombo/chronic/merges", + "archive_url": "https://api.github.com/repos/mojombo/chronic/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mojombo/chronic/downloads", + "issues_url": "https://api.github.com/repos/mojombo/chronic/issues{/number}", + "pulls_url": "https://api.github.com/repos/mojombo/chronic/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mojombo/chronic/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mojombo/chronic/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mojombo/chronic/labels{/name}", + "releases_url": "https://api.github.com/repos/mojombo/chronic/releases{/id}", + "deployments_url": "https://api.github.com/repos/mojombo/chronic/deployments" + }, + { + "id": 165, + "name": "git-wiki", + "full_name": "sr/git-wiki", + "owner": { + "login": "sr", + "id": 90, + "avatar_url": "https://avatars.githubusercontent.com/u/90?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sr", + "html_url": "https://github.com/sr", + "followers_url": "https://api.github.com/users/sr/followers", + "following_url": "https://api.github.com/users/sr/following{/other_user}", + "gists_url": "https://api.github.com/users/sr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sr/subscriptions", + "organizations_url": "https://api.github.com/users/sr/orgs", + "repos_url": "https://api.github.com/users/sr/repos", + "events_url": "https://api.github.com/users/sr/events{/privacy}", + "received_events_url": "https://api.github.com/users/sr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sr/git-wiki", + "description": "A quick & dirty git-powered Sinatra wiki", + "fork": false, + "url": "https://api.github.com/repos/sr/git-wiki", + "forks_url": "https://api.github.com/repos/sr/git-wiki/forks", + "keys_url": "https://api.github.com/repos/sr/git-wiki/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sr/git-wiki/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sr/git-wiki/teams", + "hooks_url": "https://api.github.com/repos/sr/git-wiki/hooks", + "issue_events_url": "https://api.github.com/repos/sr/git-wiki/issues/events{/number}", + "events_url": "https://api.github.com/repos/sr/git-wiki/events", + "assignees_url": "https://api.github.com/repos/sr/git-wiki/assignees{/user}", + "branches_url": "https://api.github.com/repos/sr/git-wiki/branches{/branch}", + "tags_url": "https://api.github.com/repos/sr/git-wiki/tags", + "blobs_url": "https://api.github.com/repos/sr/git-wiki/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sr/git-wiki/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sr/git-wiki/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sr/git-wiki/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sr/git-wiki/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sr/git-wiki/languages", + "stargazers_url": "https://api.github.com/repos/sr/git-wiki/stargazers", + "contributors_url": "https://api.github.com/repos/sr/git-wiki/contributors", + "subscribers_url": "https://api.github.com/repos/sr/git-wiki/subscribers", + "subscription_url": "https://api.github.com/repos/sr/git-wiki/subscription", + "commits_url": "https://api.github.com/repos/sr/git-wiki/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sr/git-wiki/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sr/git-wiki/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sr/git-wiki/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sr/git-wiki/contents/{+path}", + "compare_url": "https://api.github.com/repos/sr/git-wiki/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sr/git-wiki/merges", + "archive_url": "https://api.github.com/repos/sr/git-wiki/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sr/git-wiki/downloads", + "issues_url": "https://api.github.com/repos/sr/git-wiki/issues{/number}", + "pulls_url": "https://api.github.com/repos/sr/git-wiki/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sr/git-wiki/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sr/git-wiki/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sr/git-wiki/labels{/name}", + "releases_url": "https://api.github.com/repos/sr/git-wiki/releases{/id}", + "deployments_url": "https://api.github.com/repos/sr/git-wiki/deployments" + }, + { + "id": 177, + "name": "signal-wiki", + "full_name": "queso/signal-wiki", + "owner": { + "login": "queso", + "id": 106, + "avatar_url": "https://avatars.githubusercontent.com/u/106?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/queso", + "html_url": "https://github.com/queso", + "followers_url": "https://api.github.com/users/queso/followers", + "following_url": "https://api.github.com/users/queso/following{/other_user}", + "gists_url": "https://api.github.com/users/queso/gists{/gist_id}", + "starred_url": "https://api.github.com/users/queso/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/queso/subscriptions", + "organizations_url": "https://api.github.com/users/queso/orgs", + "repos_url": "https://api.github.com/users/queso/repos", + "events_url": "https://api.github.com/users/queso/events{/privacy}", + "received_events_url": "https://api.github.com/users/queso/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/queso/signal-wiki", + "description": "The easy to use rails wiki", + "fork": false, + "url": "https://api.github.com/repos/queso/signal-wiki", + "forks_url": "https://api.github.com/repos/queso/signal-wiki/forks", + "keys_url": "https://api.github.com/repos/queso/signal-wiki/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/queso/signal-wiki/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/queso/signal-wiki/teams", + "hooks_url": "https://api.github.com/repos/queso/signal-wiki/hooks", + "issue_events_url": "https://api.github.com/repos/queso/signal-wiki/issues/events{/number}", + "events_url": "https://api.github.com/repos/queso/signal-wiki/events", + "assignees_url": "https://api.github.com/repos/queso/signal-wiki/assignees{/user}", + "branches_url": "https://api.github.com/repos/queso/signal-wiki/branches{/branch}", + "tags_url": "https://api.github.com/repos/queso/signal-wiki/tags", + "blobs_url": "https://api.github.com/repos/queso/signal-wiki/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/queso/signal-wiki/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/queso/signal-wiki/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/queso/signal-wiki/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/queso/signal-wiki/statuses/{sha}", + "languages_url": "https://api.github.com/repos/queso/signal-wiki/languages", + "stargazers_url": "https://api.github.com/repos/queso/signal-wiki/stargazers", + "contributors_url": "https://api.github.com/repos/queso/signal-wiki/contributors", + "subscribers_url": "https://api.github.com/repos/queso/signal-wiki/subscribers", + "subscription_url": "https://api.github.com/repos/queso/signal-wiki/subscription", + "commits_url": "https://api.github.com/repos/queso/signal-wiki/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/queso/signal-wiki/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/queso/signal-wiki/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/queso/signal-wiki/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/queso/signal-wiki/contents/{+path}", + "compare_url": "https://api.github.com/repos/queso/signal-wiki/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/queso/signal-wiki/merges", + "archive_url": "https://api.github.com/repos/queso/signal-wiki/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/queso/signal-wiki/downloads", + "issues_url": "https://api.github.com/repos/queso/signal-wiki/issues{/number}", + "pulls_url": "https://api.github.com/repos/queso/signal-wiki/pulls{/number}", + "milestones_url": "https://api.github.com/repos/queso/signal-wiki/milestones{/number}", + "notifications_url": "https://api.github.com/repos/queso/signal-wiki/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/queso/signal-wiki/labels{/name}", + "releases_url": "https://api.github.com/repos/queso/signal-wiki/releases{/id}", + "deployments_url": "https://api.github.com/repos/queso/signal-wiki/deployments" + }, + { + "id": 179, + "name": "ruby-on-rails-tmbundle", + "full_name": "drnic/ruby-on-rails-tmbundle", + "owner": { + "login": "drnic", + "id": 108, + "avatar_url": "https://avatars.githubusercontent.com/u/108?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/drnic", + "html_url": "https://github.com/drnic", + "followers_url": "https://api.github.com/users/drnic/followers", + "following_url": "https://api.github.com/users/drnic/following{/other_user}", + "gists_url": "https://api.github.com/users/drnic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/drnic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/drnic/subscriptions", + "organizations_url": "https://api.github.com/users/drnic/orgs", + "repos_url": "https://api.github.com/users/drnic/repos", + "events_url": "https://api.github.com/users/drnic/events{/privacy}", + "received_events_url": "https://api.github.com/users/drnic/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/drnic/ruby-on-rails-tmbundle", + "description": "Ruby on Rails TextMate bundle [Learn it with PeepCode - http://peepcode.com/products/textmate-for-rails-2]", + "fork": false, + "url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle", + "forks_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/forks", + "keys_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/teams", + "hooks_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/hooks", + "issue_events_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/issues/events{/number}", + "events_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/events", + "assignees_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/assignees{/user}", + "branches_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/branches{/branch}", + "tags_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/tags", + "blobs_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/statuses/{sha}", + "languages_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/languages", + "stargazers_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/stargazers", + "contributors_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/contributors", + "subscribers_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/subscribers", + "subscription_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/subscription", + "commits_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/contents/{+path}", + "compare_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/merges", + "archive_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/downloads", + "issues_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/issues{/number}", + "pulls_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/pulls{/number}", + "milestones_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/milestones{/number}", + "notifications_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/labels{/name}", + "releases_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/releases{/id}", + "deployments_url": "https://api.github.com/repos/drnic/ruby-on-rails-tmbundle/deployments" + }, + { + "id": 185, + "name": "low-pro-for-jquery", + "full_name": "danwrong/low-pro-for-jquery", + "owner": { + "login": "danwrong", + "id": 110, + "avatar_url": "https://avatars.githubusercontent.com/u/110?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/danwrong", + "html_url": "https://github.com/danwrong", + "followers_url": "https://api.github.com/users/danwrong/followers", + "following_url": "https://api.github.com/users/danwrong/following{/other_user}", + "gists_url": "https://api.github.com/users/danwrong/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danwrong/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danwrong/subscriptions", + "organizations_url": "https://api.github.com/users/danwrong/orgs", + "repos_url": "https://api.github.com/users/danwrong/repos", + "events_url": "https://api.github.com/users/danwrong/events{/privacy}", + "received_events_url": "https://api.github.com/users/danwrong/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/danwrong/low-pro-for-jquery", + "description": "A jQuery plugin version of the Low Pro behavior framework.", + "fork": false, + "url": "https://api.github.com/repos/danwrong/low-pro-for-jquery", + "forks_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/forks", + "keys_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/teams", + "hooks_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/hooks", + "issue_events_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/events", + "assignees_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/tags", + "blobs_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/languages", + "stargazers_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/stargazers", + "contributors_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/contributors", + "subscribers_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/subscribers", + "subscription_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/subscription", + "commits_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/merges", + "archive_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/downloads", + "issues_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/danwrong/low-pro-for-jquery/deployments" + }, + { + "id": 186, + "name": "merb-core", + "full_name": "wayneeseguin/merb-core", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/merb-core", + "description": "Merb Core: All you need. None you don't.", + "fork": true, + "url": "https://api.github.com/repos/wayneeseguin/merb-core", + "forks_url": "https://api.github.com/repos/wayneeseguin/merb-core/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/merb-core/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/merb-core/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/merb-core/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/merb-core/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/merb-core/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/merb-core/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/merb-core/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/merb-core/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/merb-core/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/merb-core/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/merb-core/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/merb-core/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/merb-core/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/merb-core/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/merb-core/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/merb-core/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/merb-core/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/merb-core/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/merb-core/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/merb-core/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/merb-core/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/merb-core/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/merb-core/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/merb-core/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/merb-core/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/merb-core/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/merb-core/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/merb-core/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/merb-core/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/merb-core/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/merb-core/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/merb-core/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/merb-core/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/merb-core/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/merb-core/deployments" + }, + { + "id": 190, + "name": "dst", + "full_name": "sr/dst", + "owner": { + "login": "sr", + "id": 90, + "avatar_url": "https://avatars.githubusercontent.com/u/90?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sr", + "html_url": "https://github.com/sr", + "followers_url": "https://api.github.com/users/sr/followers", + "following_url": "https://api.github.com/users/sr/following{/other_user}", + "gists_url": "https://api.github.com/users/sr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sr/subscriptions", + "organizations_url": "https://api.github.com/users/sr/orgs", + "repos_url": "https://api.github.com/users/sr/repos", + "events_url": "https://api.github.com/users/sr/events{/privacy}", + "received_events_url": "https://api.github.com/users/sr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sr/dst", + "description": "todo-list manager I wrote back in 2008 with the help of Gregory Brown in order to learn Ruby and TDD", + "fork": false, + "url": "https://api.github.com/repos/sr/dst", + "forks_url": "https://api.github.com/repos/sr/dst/forks", + "keys_url": "https://api.github.com/repos/sr/dst/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sr/dst/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sr/dst/teams", + "hooks_url": "https://api.github.com/repos/sr/dst/hooks", + "issue_events_url": "https://api.github.com/repos/sr/dst/issues/events{/number}", + "events_url": "https://api.github.com/repos/sr/dst/events", + "assignees_url": "https://api.github.com/repos/sr/dst/assignees{/user}", + "branches_url": "https://api.github.com/repos/sr/dst/branches{/branch}", + "tags_url": "https://api.github.com/repos/sr/dst/tags", + "blobs_url": "https://api.github.com/repos/sr/dst/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sr/dst/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sr/dst/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sr/dst/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sr/dst/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sr/dst/languages", + "stargazers_url": "https://api.github.com/repos/sr/dst/stargazers", + "contributors_url": "https://api.github.com/repos/sr/dst/contributors", + "subscribers_url": "https://api.github.com/repos/sr/dst/subscribers", + "subscription_url": "https://api.github.com/repos/sr/dst/subscription", + "commits_url": "https://api.github.com/repos/sr/dst/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sr/dst/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sr/dst/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sr/dst/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sr/dst/contents/{+path}", + "compare_url": "https://api.github.com/repos/sr/dst/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sr/dst/merges", + "archive_url": "https://api.github.com/repos/sr/dst/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sr/dst/downloads", + "issues_url": "https://api.github.com/repos/sr/dst/issues{/number}", + "pulls_url": "https://api.github.com/repos/sr/dst/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sr/dst/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sr/dst/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sr/dst/labels{/name}", + "releases_url": "https://api.github.com/repos/sr/dst/releases{/id}", + "deployments_url": "https://api.github.com/repos/sr/dst/deployments" + }, + { + "id": 191, + "name": "yaws", + "full_name": "mojombo/yaws", + "owner": { + "login": "mojombo", + "id": 1, + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mojombo/yaws", + "description": "YAWS is an erlang web server", + "fork": false, + "url": "https://api.github.com/repos/mojombo/yaws", + "forks_url": "https://api.github.com/repos/mojombo/yaws/forks", + "keys_url": "https://api.github.com/repos/mojombo/yaws/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mojombo/yaws/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mojombo/yaws/teams", + "hooks_url": "https://api.github.com/repos/mojombo/yaws/hooks", + "issue_events_url": "https://api.github.com/repos/mojombo/yaws/issues/events{/number}", + "events_url": "https://api.github.com/repos/mojombo/yaws/events", + "assignees_url": "https://api.github.com/repos/mojombo/yaws/assignees{/user}", + "branches_url": "https://api.github.com/repos/mojombo/yaws/branches{/branch}", + "tags_url": "https://api.github.com/repos/mojombo/yaws/tags", + "blobs_url": "https://api.github.com/repos/mojombo/yaws/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mojombo/yaws/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mojombo/yaws/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mojombo/yaws/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mojombo/yaws/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mojombo/yaws/languages", + "stargazers_url": "https://api.github.com/repos/mojombo/yaws/stargazers", + "contributors_url": "https://api.github.com/repos/mojombo/yaws/contributors", + "subscribers_url": "https://api.github.com/repos/mojombo/yaws/subscribers", + "subscription_url": "https://api.github.com/repos/mojombo/yaws/subscription", + "commits_url": "https://api.github.com/repos/mojombo/yaws/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mojombo/yaws/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mojombo/yaws/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mojombo/yaws/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mojombo/yaws/contents/{+path}", + "compare_url": "https://api.github.com/repos/mojombo/yaws/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mojombo/yaws/merges", + "archive_url": "https://api.github.com/repos/mojombo/yaws/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mojombo/yaws/downloads", + "issues_url": "https://api.github.com/repos/mojombo/yaws/issues{/number}", + "pulls_url": "https://api.github.com/repos/mojombo/yaws/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mojombo/yaws/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mojombo/yaws/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mojombo/yaws/labels{/name}", + "releases_url": "https://api.github.com/repos/mojombo/yaws/releases{/id}", + "deployments_url": "https://api.github.com/repos/mojombo/yaws/deployments" + }, + { + "id": 192, + "name": "yaws", + "full_name": "KirinDave/yaws", + "owner": { + "login": "KirinDave", + "id": 36, + "avatar_url": "https://avatars.githubusercontent.com/u/36?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/KirinDave", + "html_url": "https://github.com/KirinDave", + "followers_url": "https://api.github.com/users/KirinDave/followers", + "following_url": "https://api.github.com/users/KirinDave/following{/other_user}", + "gists_url": "https://api.github.com/users/KirinDave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KirinDave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KirinDave/subscriptions", + "organizations_url": "https://api.github.com/users/KirinDave/orgs", + "repos_url": "https://api.github.com/users/KirinDave/repos", + "events_url": "https://api.github.com/users/KirinDave/events{/privacy}", + "received_events_url": "https://api.github.com/users/KirinDave/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/KirinDave/yaws", + "description": "YAWS is an erlang web server", + "fork": true, + "url": "https://api.github.com/repos/KirinDave/yaws", + "forks_url": "https://api.github.com/repos/KirinDave/yaws/forks", + "keys_url": "https://api.github.com/repos/KirinDave/yaws/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/KirinDave/yaws/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/KirinDave/yaws/teams", + "hooks_url": "https://api.github.com/repos/KirinDave/yaws/hooks", + "issue_events_url": "https://api.github.com/repos/KirinDave/yaws/issues/events{/number}", + "events_url": "https://api.github.com/repos/KirinDave/yaws/events", + "assignees_url": "https://api.github.com/repos/KirinDave/yaws/assignees{/user}", + "branches_url": "https://api.github.com/repos/KirinDave/yaws/branches{/branch}", + "tags_url": "https://api.github.com/repos/KirinDave/yaws/tags", + "blobs_url": "https://api.github.com/repos/KirinDave/yaws/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/KirinDave/yaws/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/KirinDave/yaws/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/KirinDave/yaws/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/KirinDave/yaws/statuses/{sha}", + "languages_url": "https://api.github.com/repos/KirinDave/yaws/languages", + "stargazers_url": "https://api.github.com/repos/KirinDave/yaws/stargazers", + "contributors_url": "https://api.github.com/repos/KirinDave/yaws/contributors", + "subscribers_url": "https://api.github.com/repos/KirinDave/yaws/subscribers", + "subscription_url": "https://api.github.com/repos/KirinDave/yaws/subscription", + "commits_url": "https://api.github.com/repos/KirinDave/yaws/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/KirinDave/yaws/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/KirinDave/yaws/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/KirinDave/yaws/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/KirinDave/yaws/contents/{+path}", + "compare_url": "https://api.github.com/repos/KirinDave/yaws/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/KirinDave/yaws/merges", + "archive_url": "https://api.github.com/repos/KirinDave/yaws/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/KirinDave/yaws/downloads", + "issues_url": "https://api.github.com/repos/KirinDave/yaws/issues{/number}", + "pulls_url": "https://api.github.com/repos/KirinDave/yaws/pulls{/number}", + "milestones_url": "https://api.github.com/repos/KirinDave/yaws/milestones{/number}", + "notifications_url": "https://api.github.com/repos/KirinDave/yaws/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/KirinDave/yaws/labels{/name}", + "releases_url": "https://api.github.com/repos/KirinDave/yaws/releases{/id}", + "deployments_url": "https://api.github.com/repos/KirinDave/yaws/deployments" + }, + { + "id": 193, + "name": "tasks", + "full_name": "sr/tasks", + "owner": { + "login": "sr", + "id": 90, + "avatar_url": "https://avatars.githubusercontent.com/u/90?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sr", + "html_url": "https://github.com/sr", + "followers_url": "https://api.github.com/users/sr/followers", + "following_url": "https://api.github.com/users/sr/following{/other_user}", + "gists_url": "https://api.github.com/users/sr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sr/subscriptions", + "organizations_url": "https://api.github.com/users/sr/orgs", + "repos_url": "https://api.github.com/users/sr/repos", + "events_url": "https://api.github.com/users/sr/events{/privacy}", + "received_events_url": "https://api.github.com/users/sr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sr/tasks", + "description": "Some more or less useful rake tasks. Includes tasks to work with git-cvs, convert an Atom collection to a blog, post to an AtomPub server and more.", + "fork": false, + "url": "https://api.github.com/repos/sr/tasks", + "forks_url": "https://api.github.com/repos/sr/tasks/forks", + "keys_url": "https://api.github.com/repos/sr/tasks/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sr/tasks/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sr/tasks/teams", + "hooks_url": "https://api.github.com/repos/sr/tasks/hooks", + "issue_events_url": "https://api.github.com/repos/sr/tasks/issues/events{/number}", + "events_url": "https://api.github.com/repos/sr/tasks/events", + "assignees_url": "https://api.github.com/repos/sr/tasks/assignees{/user}", + "branches_url": "https://api.github.com/repos/sr/tasks/branches{/branch}", + "tags_url": "https://api.github.com/repos/sr/tasks/tags", + "blobs_url": "https://api.github.com/repos/sr/tasks/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sr/tasks/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sr/tasks/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sr/tasks/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sr/tasks/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sr/tasks/languages", + "stargazers_url": "https://api.github.com/repos/sr/tasks/stargazers", + "contributors_url": "https://api.github.com/repos/sr/tasks/contributors", + "subscribers_url": "https://api.github.com/repos/sr/tasks/subscribers", + "subscription_url": "https://api.github.com/repos/sr/tasks/subscription", + "commits_url": "https://api.github.com/repos/sr/tasks/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sr/tasks/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sr/tasks/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sr/tasks/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sr/tasks/contents/{+path}", + "compare_url": "https://api.github.com/repos/sr/tasks/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sr/tasks/merges", + "archive_url": "https://api.github.com/repos/sr/tasks/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sr/tasks/downloads", + "issues_url": "https://api.github.com/repos/sr/tasks/issues{/number}", + "pulls_url": "https://api.github.com/repos/sr/tasks/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sr/tasks/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sr/tasks/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sr/tasks/labels{/name}", + "releases_url": "https://api.github.com/repos/sr/tasks/releases{/id}", + "deployments_url": "https://api.github.com/repos/sr/tasks/deployments" + }, + { + "id": 195, + "name": "ruby-on-rails-tmbundle", + "full_name": "mattetti/ruby-on-rails-tmbundle", + "owner": { + "login": "mattetti", + "id": 113, + "avatar_url": "https://avatars.githubusercontent.com/u/113?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mattetti", + "html_url": "https://github.com/mattetti", + "followers_url": "https://api.github.com/users/mattetti/followers", + "following_url": "https://api.github.com/users/mattetti/following{/other_user}", + "gists_url": "https://api.github.com/users/mattetti/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mattetti/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mattetti/subscriptions", + "organizations_url": "https://api.github.com/users/mattetti/orgs", + "repos_url": "https://api.github.com/users/mattetti/repos", + "events_url": "https://api.github.com/users/mattetti/events{/privacy}", + "received_events_url": "https://api.github.com/users/mattetti/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mattetti/ruby-on-rails-tmbundle", + "description": "Ruby on Rails TextMate bundle [master branch is svn trunk; patches to drnicwilliams@gmail.com]", + "fork": true, + "url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle", + "forks_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/forks", + "keys_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/teams", + "hooks_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/hooks", + "issue_events_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/issues/events{/number}", + "events_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/events", + "assignees_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/assignees{/user}", + "branches_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/branches{/branch}", + "tags_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/tags", + "blobs_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/languages", + "stargazers_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/stargazers", + "contributors_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/contributors", + "subscribers_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/subscribers", + "subscription_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/subscription", + "commits_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/contents/{+path}", + "compare_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/merges", + "archive_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/downloads", + "issues_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/issues{/number}", + "pulls_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/labels{/name}", + "releases_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/releases{/id}", + "deployments_url": "https://api.github.com/repos/mattetti/ruby-on-rails-tmbundle/deployments" + }, + { + "id": 196, + "name": "ruby-on-rails-tmbundle", + "full_name": "lawrencepit/ruby-on-rails-tmbundle", + "owner": { + "login": "lawrencepit", + "id": 115, + "avatar_url": "https://avatars.githubusercontent.com/u/115?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lawrencepit", + "html_url": "https://github.com/lawrencepit", + "followers_url": "https://api.github.com/users/lawrencepit/followers", + "following_url": "https://api.github.com/users/lawrencepit/following{/other_user}", + "gists_url": "https://api.github.com/users/lawrencepit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lawrencepit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lawrencepit/subscriptions", + "organizations_url": "https://api.github.com/users/lawrencepit/orgs", + "repos_url": "https://api.github.com/users/lawrencepit/repos", + "events_url": "https://api.github.com/users/lawrencepit/events{/privacy}", + "received_events_url": "https://api.github.com/users/lawrencepit/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lawrencepit/ruby-on-rails-tmbundle", + "description": "Ruby on Rails TextMate bundle [master branch is svn trunk; patches to drnicwilliams@gmail.com]", + "fork": true, + "url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle", + "forks_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/forks", + "keys_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/teams", + "hooks_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/hooks", + "issue_events_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/issues/events{/number}", + "events_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/events", + "assignees_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/assignees{/user}", + "branches_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/branches{/branch}", + "tags_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/tags", + "blobs_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/languages", + "stargazers_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/stargazers", + "contributors_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/contributors", + "subscribers_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/subscribers", + "subscription_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/subscription", + "commits_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/contents/{+path}", + "compare_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/merges", + "archive_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/downloads", + "issues_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/issues{/number}", + "pulls_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/labels{/name}", + "releases_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/releases{/id}", + "deployments_url": "https://api.github.com/repos/lawrencepit/ruby-on-rails-tmbundle/deployments" + }, + { + "id": 199, + "name": "amazon-ec2", + "full_name": "grempe/amazon-ec2", + "owner": { + "login": "grempe", + "id": 117, + "avatar_url": "https://avatars.githubusercontent.com/u/117?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/grempe", + "html_url": "https://github.com/grempe", + "followers_url": "https://api.github.com/users/grempe/followers", + "following_url": "https://api.github.com/users/grempe/following{/other_user}", + "gists_url": "https://api.github.com/users/grempe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/grempe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/grempe/subscriptions", + "organizations_url": "https://api.github.com/users/grempe/orgs", + "repos_url": "https://api.github.com/users/grempe/repos", + "events_url": "https://api.github.com/users/grempe/events{/privacy}", + "received_events_url": "https://api.github.com/users/grempe/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/grempe/amazon-ec2", + "description": "A Ruby Gem that gives you full access to several of the Amazon Web Services API from your Ruby/Ruby on Rails apps", + "fork": false, + "url": "https://api.github.com/repos/grempe/amazon-ec2", + "forks_url": "https://api.github.com/repos/grempe/amazon-ec2/forks", + "keys_url": "https://api.github.com/repos/grempe/amazon-ec2/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/grempe/amazon-ec2/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/grempe/amazon-ec2/teams", + "hooks_url": "https://api.github.com/repos/grempe/amazon-ec2/hooks", + "issue_events_url": "https://api.github.com/repos/grempe/amazon-ec2/issues/events{/number}", + "events_url": "https://api.github.com/repos/grempe/amazon-ec2/events", + "assignees_url": "https://api.github.com/repos/grempe/amazon-ec2/assignees{/user}", + "branches_url": "https://api.github.com/repos/grempe/amazon-ec2/branches{/branch}", + "tags_url": "https://api.github.com/repos/grempe/amazon-ec2/tags", + "blobs_url": "https://api.github.com/repos/grempe/amazon-ec2/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/grempe/amazon-ec2/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/grempe/amazon-ec2/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/grempe/amazon-ec2/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/grempe/amazon-ec2/statuses/{sha}", + "languages_url": "https://api.github.com/repos/grempe/amazon-ec2/languages", + "stargazers_url": "https://api.github.com/repos/grempe/amazon-ec2/stargazers", + "contributors_url": "https://api.github.com/repos/grempe/amazon-ec2/contributors", + "subscribers_url": "https://api.github.com/repos/grempe/amazon-ec2/subscribers", + "subscription_url": "https://api.github.com/repos/grempe/amazon-ec2/subscription", + "commits_url": "https://api.github.com/repos/grempe/amazon-ec2/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/grempe/amazon-ec2/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/grempe/amazon-ec2/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/grempe/amazon-ec2/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/grempe/amazon-ec2/contents/{+path}", + "compare_url": "https://api.github.com/repos/grempe/amazon-ec2/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/grempe/amazon-ec2/merges", + "archive_url": "https://api.github.com/repos/grempe/amazon-ec2/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/grempe/amazon-ec2/downloads", + "issues_url": "https://api.github.com/repos/grempe/amazon-ec2/issues{/number}", + "pulls_url": "https://api.github.com/repos/grempe/amazon-ec2/pulls{/number}", + "milestones_url": "https://api.github.com/repos/grempe/amazon-ec2/milestones{/number}", + "notifications_url": "https://api.github.com/repos/grempe/amazon-ec2/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/grempe/amazon-ec2/labels{/name}", + "releases_url": "https://api.github.com/repos/grempe/amazon-ec2/releases{/id}", + "deployments_url": "https://api.github.com/repos/grempe/amazon-ec2/deployments" + }, + { + "id": 203, + "name": "merblogger", + "full_name": "wayneeseguin/merblogger", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/merblogger", + "description": "A Merb Blogging & Publishing Platform using Merb, DataMapper, haml and jQuery.", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/merblogger", + "forks_url": "https://api.github.com/repos/wayneeseguin/merblogger/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/merblogger/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/merblogger/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/merblogger/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/merblogger/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/merblogger/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/merblogger/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/merblogger/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/merblogger/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/merblogger/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/merblogger/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/merblogger/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/merblogger/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/merblogger/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/merblogger/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/merblogger/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/merblogger/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/merblogger/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/merblogger/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/merblogger/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/merblogger/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/merblogger/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/merblogger/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/merblogger/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/merblogger/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/merblogger/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/merblogger/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/merblogger/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/merblogger/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/merblogger/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/merblogger/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/merblogger/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/merblogger/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/merblogger/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/merblogger/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/merblogger/deployments" + }, + { + "id": 204, + "name": "merbtastic", + "full_name": "wayneeseguin/merbtastic", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/merbtastic", + "description": "Merb + Webgen CMS system that has dynamic routing, Nginx config and static site generation with haml/sass/erb/... support.", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/merbtastic", + "forks_url": "https://api.github.com/repos/wayneeseguin/merbtastic/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/merbtastic/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/merbtastic/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/merbtastic/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/merbtastic/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/merbtastic/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/merbtastic/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/merbtastic/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/merbtastic/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/merbtastic/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/merbtastic/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/merbtastic/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/merbtastic/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/merbtastic/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/merbtastic/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/merbtastic/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/merbtastic/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/merbtastic/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/merbtastic/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/merbtastic/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/merbtastic/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/merbtastic/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/merbtastic/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/merbtastic/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/merbtastic/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/merbtastic/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/merbtastic/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/merbtastic/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/merbtastic/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/merbtastic/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/merbtastic/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/merbtastic/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/merbtastic/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/merbtastic/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/merbtastic/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/merbtastic/deployments" + }, + { + "id": 205, + "name": "alogr", + "full_name": "wayneeseguin/alogr", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/alogr", + "description": "AlogR is a threadsafe non-blocking asynchronous configurable logger for Ruby.", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/alogr", + "forks_url": "https://api.github.com/repos/wayneeseguin/alogr/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/alogr/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/alogr/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/alogr/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/alogr/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/alogr/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/alogr/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/alogr/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/alogr/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/alogr/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/alogr/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/alogr/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/alogr/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/alogr/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/alogr/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/alogr/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/alogr/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/alogr/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/alogr/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/alogr/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/alogr/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/alogr/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/alogr/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/alogr/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/alogr/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/alogr/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/alogr/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/alogr/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/alogr/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/alogr/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/alogr/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/alogr/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/alogr/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/alogr/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/alogr/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/alogr/deployments" + }, + { + "id": 206, + "name": "autozest", + "full_name": "wayneeseguin/autozest", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/autozest", + "description": "AutoZest is an autotest addon that: * automated growl installation * generation of .autotest with growl & autozest config * generation of .autozest.yml config file * autozest.sqlite3 database file for pulling random messages based on severity", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/autozest", + "forks_url": "https://api.github.com/repos/wayneeseguin/autozest/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/autozest/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/autozest/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/autozest/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/autozest/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/autozest/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/autozest/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/autozest/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/autozest/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/autozest/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/autozest/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/autozest/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/autozest/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/autozest/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/autozest/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/autozest/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/autozest/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/autozest/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/autozest/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/autozest/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/autozest/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/autozest/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/autozest/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/autozest/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/autozest/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/autozest/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/autozest/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/autozest/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/autozest/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/autozest/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/autozest/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/autozest/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/autozest/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/autozest/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/autozest/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/autozest/deployments" + }, + { + "id": 207, + "name": "rnginx", + "full_name": "wayneeseguin/rnginx", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/rnginx", + "description": "Command line utility and library for working with Nginx configuration scripts.", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/rnginx", + "forks_url": "https://api.github.com/repos/wayneeseguin/rnginx/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/rnginx/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/rnginx/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/rnginx/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/rnginx/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/rnginx/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/rnginx/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/rnginx/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/rnginx/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/rnginx/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/rnginx/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/rnginx/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/rnginx/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/rnginx/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/rnginx/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/rnginx/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/rnginx/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/rnginx/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/rnginx/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/rnginx/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/rnginx/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/rnginx/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/rnginx/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/rnginx/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/rnginx/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/rnginx/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/rnginx/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/rnginx/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/rnginx/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/rnginx/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/rnginx/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/rnginx/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/rnginx/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/rnginx/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/rnginx/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/rnginx/deployments" + }, + { + "id": 208, + "name": "sequel", + "full_name": "wayneeseguin/sequel", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/sequel", + "description": "Sequel ORM", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/sequel", + "forks_url": "https://api.github.com/repos/wayneeseguin/sequel/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/sequel/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/sequel/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/sequel/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/sequel/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/sequel/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/sequel/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/sequel/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/sequel/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/sequel/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/sequel/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/sequel/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/sequel/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/sequel/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/sequel/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/sequel/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/sequel/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/sequel/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/sequel/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/sequel/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/sequel/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/sequel/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/sequel/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/sequel/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/sequel/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/sequel/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/sequel/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/sequel/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/sequel/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/sequel/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/sequel/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/sequel/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/sequel/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/sequel/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/sequel/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/sequel/deployments" + }, + { + "id": 211, + "name": "simply_versioned", + "full_name": "bmizerany/simply_versioned", + "owner": { + "login": "bmizerany", + "id": 46, + "avatar_url": "https://avatars.githubusercontent.com/u/46?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bmizerany", + "html_url": "https://github.com/bmizerany", + "followers_url": "https://api.github.com/users/bmizerany/followers", + "following_url": "https://api.github.com/users/bmizerany/following{/other_user}", + "gists_url": "https://api.github.com/users/bmizerany/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bmizerany/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bmizerany/subscriptions", + "organizations_url": "https://api.github.com/users/bmizerany/orgs", + "repos_url": "https://api.github.com/users/bmizerany/repos", + "events_url": "https://api.github.com/users/bmizerany/events{/privacy}", + "received_events_url": "https://api.github.com/users/bmizerany/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bmizerany/simply_versioned", + "description": "A simple, non-invasive, approach to versioning ActiveRecord models", + "fork": true, + "url": "https://api.github.com/repos/bmizerany/simply_versioned", + "forks_url": "https://api.github.com/repos/bmizerany/simply_versioned/forks", + "keys_url": "https://api.github.com/repos/bmizerany/simply_versioned/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bmizerany/simply_versioned/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bmizerany/simply_versioned/teams", + "hooks_url": "https://api.github.com/repos/bmizerany/simply_versioned/hooks", + "issue_events_url": "https://api.github.com/repos/bmizerany/simply_versioned/issues/events{/number}", + "events_url": "https://api.github.com/repos/bmizerany/simply_versioned/events", + "assignees_url": "https://api.github.com/repos/bmizerany/simply_versioned/assignees{/user}", + "branches_url": "https://api.github.com/repos/bmizerany/simply_versioned/branches{/branch}", + "tags_url": "https://api.github.com/repos/bmizerany/simply_versioned/tags", + "blobs_url": "https://api.github.com/repos/bmizerany/simply_versioned/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bmizerany/simply_versioned/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bmizerany/simply_versioned/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bmizerany/simply_versioned/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bmizerany/simply_versioned/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bmizerany/simply_versioned/languages", + "stargazers_url": "https://api.github.com/repos/bmizerany/simply_versioned/stargazers", + "contributors_url": "https://api.github.com/repos/bmizerany/simply_versioned/contributors", + "subscribers_url": "https://api.github.com/repos/bmizerany/simply_versioned/subscribers", + "subscription_url": "https://api.github.com/repos/bmizerany/simply_versioned/subscription", + "commits_url": "https://api.github.com/repos/bmizerany/simply_versioned/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bmizerany/simply_versioned/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bmizerany/simply_versioned/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bmizerany/simply_versioned/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bmizerany/simply_versioned/contents/{+path}", + "compare_url": "https://api.github.com/repos/bmizerany/simply_versioned/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bmizerany/simply_versioned/merges", + "archive_url": "https://api.github.com/repos/bmizerany/simply_versioned/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bmizerany/simply_versioned/downloads", + "issues_url": "https://api.github.com/repos/bmizerany/simply_versioned/issues{/number}", + "pulls_url": "https://api.github.com/repos/bmizerany/simply_versioned/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bmizerany/simply_versioned/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bmizerany/simply_versioned/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bmizerany/simply_versioned/labels{/name}", + "releases_url": "https://api.github.com/repos/bmizerany/simply_versioned/releases{/id}", + "deployments_url": "https://api.github.com/repos/bmizerany/simply_versioned/deployments" + }, + { + "id": 212, + "name": "switchpipe", + "full_name": "peterc/switchpipe", + "owner": { + "login": "peterc", + "id": 118, + "avatar_url": "https://avatars.githubusercontent.com/u/118?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/peterc", + "html_url": "https://github.com/peterc", + "followers_url": "https://api.github.com/users/peterc/followers", + "following_url": "https://api.github.com/users/peterc/following{/other_user}", + "gists_url": "https://api.github.com/users/peterc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/peterc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/peterc/subscriptions", + "organizations_url": "https://api.github.com/users/peterc/orgs", + "repos_url": "https://api.github.com/users/peterc/repos", + "events_url": "https://api.github.com/users/peterc/events{/privacy}", + "received_events_url": "https://api.github.com/users/peterc/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/peterc/switchpipe", + "description": "SwitchPipe is a backend process manager and HTTP proxy that makes (especially Ruby) web app deployment simple. NOW OBSOLETE. DO NOT USE.", + "fork": false, + "url": "https://api.github.com/repos/peterc/switchpipe", + "forks_url": "https://api.github.com/repos/peterc/switchpipe/forks", + "keys_url": "https://api.github.com/repos/peterc/switchpipe/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/peterc/switchpipe/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/peterc/switchpipe/teams", + "hooks_url": "https://api.github.com/repos/peterc/switchpipe/hooks", + "issue_events_url": "https://api.github.com/repos/peterc/switchpipe/issues/events{/number}", + "events_url": "https://api.github.com/repos/peterc/switchpipe/events", + "assignees_url": "https://api.github.com/repos/peterc/switchpipe/assignees{/user}", + "branches_url": "https://api.github.com/repos/peterc/switchpipe/branches{/branch}", + "tags_url": "https://api.github.com/repos/peterc/switchpipe/tags", + "blobs_url": "https://api.github.com/repos/peterc/switchpipe/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/peterc/switchpipe/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/peterc/switchpipe/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/peterc/switchpipe/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/peterc/switchpipe/statuses/{sha}", + "languages_url": "https://api.github.com/repos/peterc/switchpipe/languages", + "stargazers_url": "https://api.github.com/repos/peterc/switchpipe/stargazers", + "contributors_url": "https://api.github.com/repos/peterc/switchpipe/contributors", + "subscribers_url": "https://api.github.com/repos/peterc/switchpipe/subscribers", + "subscription_url": "https://api.github.com/repos/peterc/switchpipe/subscription", + "commits_url": "https://api.github.com/repos/peterc/switchpipe/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/peterc/switchpipe/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/peterc/switchpipe/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/peterc/switchpipe/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/peterc/switchpipe/contents/{+path}", + "compare_url": "https://api.github.com/repos/peterc/switchpipe/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/peterc/switchpipe/merges", + "archive_url": "https://api.github.com/repos/peterc/switchpipe/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/peterc/switchpipe/downloads", + "issues_url": "https://api.github.com/repos/peterc/switchpipe/issues{/number}", + "pulls_url": "https://api.github.com/repos/peterc/switchpipe/pulls{/number}", + "milestones_url": "https://api.github.com/repos/peterc/switchpipe/milestones{/number}", + "notifications_url": "https://api.github.com/repos/peterc/switchpipe/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/peterc/switchpipe/labels{/name}", + "releases_url": "https://api.github.com/repos/peterc/switchpipe/releases{/id}", + "deployments_url": "https://api.github.com/repos/peterc/switchpipe/deployments" + }, + { + "id": 213, + "name": "arc", + "full_name": "hornbeck/arc", + "owner": { + "login": "hornbeck", + "id": 49, + "avatar_url": "https://avatars.githubusercontent.com/u/49?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hornbeck", + "html_url": "https://github.com/hornbeck", + "followers_url": "https://api.github.com/users/hornbeck/followers", + "following_url": "https://api.github.com/users/hornbeck/following{/other_user}", + "gists_url": "https://api.github.com/users/hornbeck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hornbeck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hornbeck/subscriptions", + "organizations_url": "https://api.github.com/users/hornbeck/orgs", + "repos_url": "https://api.github.com/users/hornbeck/repos", + "events_url": "https://api.github.com/users/hornbeck/events{/privacy}", + "received_events_url": "https://api.github.com/users/hornbeck/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hornbeck/arc", + "description": "My arc repo", + "fork": false, + "url": "https://api.github.com/repos/hornbeck/arc", + "forks_url": "https://api.github.com/repos/hornbeck/arc/forks", + "keys_url": "https://api.github.com/repos/hornbeck/arc/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hornbeck/arc/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hornbeck/arc/teams", + "hooks_url": "https://api.github.com/repos/hornbeck/arc/hooks", + "issue_events_url": "https://api.github.com/repos/hornbeck/arc/issues/events{/number}", + "events_url": "https://api.github.com/repos/hornbeck/arc/events", + "assignees_url": "https://api.github.com/repos/hornbeck/arc/assignees{/user}", + "branches_url": "https://api.github.com/repos/hornbeck/arc/branches{/branch}", + "tags_url": "https://api.github.com/repos/hornbeck/arc/tags", + "blobs_url": "https://api.github.com/repos/hornbeck/arc/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hornbeck/arc/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hornbeck/arc/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hornbeck/arc/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hornbeck/arc/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hornbeck/arc/languages", + "stargazers_url": "https://api.github.com/repos/hornbeck/arc/stargazers", + "contributors_url": "https://api.github.com/repos/hornbeck/arc/contributors", + "subscribers_url": "https://api.github.com/repos/hornbeck/arc/subscribers", + "subscription_url": "https://api.github.com/repos/hornbeck/arc/subscription", + "commits_url": "https://api.github.com/repos/hornbeck/arc/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hornbeck/arc/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hornbeck/arc/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hornbeck/arc/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hornbeck/arc/contents/{+path}", + "compare_url": "https://api.github.com/repos/hornbeck/arc/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hornbeck/arc/merges", + "archive_url": "https://api.github.com/repos/hornbeck/arc/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hornbeck/arc/downloads", + "issues_url": "https://api.github.com/repos/hornbeck/arc/issues{/number}", + "pulls_url": "https://api.github.com/repos/hornbeck/arc/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hornbeck/arc/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hornbeck/arc/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hornbeck/arc/labels{/name}", + "releases_url": "https://api.github.com/repos/hornbeck/arc/releases{/id}", + "deployments_url": "https://api.github.com/repos/hornbeck/arc/deployments" + }, + { + "id": 217, + "name": "ebay4r", + "full_name": "up_the_irons/ebay4r", + "owner": { + "login": "up_the_irons", + "id": 121, + "avatar_url": "https://avatars.githubusercontent.com/u/121?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/up_the_irons", + "html_url": "https://github.com/up_the_irons", + "followers_url": "https://api.github.com/users/up_the_irons/followers", + "following_url": "https://api.github.com/users/up_the_irons/following{/other_user}", + "gists_url": "https://api.github.com/users/up_the_irons/gists{/gist_id}", + "starred_url": "https://api.github.com/users/up_the_irons/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/up_the_irons/subscriptions", + "organizations_url": "https://api.github.com/users/up_the_irons/orgs", + "repos_url": "https://api.github.com/users/up_the_irons/repos", + "events_url": "https://api.github.com/users/up_the_irons/events{/privacy}", + "received_events_url": "https://api.github.com/users/up_the_irons/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/up_the_irons/ebay4r", + "description": "eBay4R is a Ruby wrapper for eBay's Web Services SOAP API", + "fork": false, + "url": "https://api.github.com/repos/up_the_irons/ebay4r", + "forks_url": "https://api.github.com/repos/up_the_irons/ebay4r/forks", + "keys_url": "https://api.github.com/repos/up_the_irons/ebay4r/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/up_the_irons/ebay4r/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/up_the_irons/ebay4r/teams", + "hooks_url": "https://api.github.com/repos/up_the_irons/ebay4r/hooks", + "issue_events_url": "https://api.github.com/repos/up_the_irons/ebay4r/issues/events{/number}", + "events_url": "https://api.github.com/repos/up_the_irons/ebay4r/events", + "assignees_url": "https://api.github.com/repos/up_the_irons/ebay4r/assignees{/user}", + "branches_url": "https://api.github.com/repos/up_the_irons/ebay4r/branches{/branch}", + "tags_url": "https://api.github.com/repos/up_the_irons/ebay4r/tags", + "blobs_url": "https://api.github.com/repos/up_the_irons/ebay4r/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/up_the_irons/ebay4r/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/up_the_irons/ebay4r/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/up_the_irons/ebay4r/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/up_the_irons/ebay4r/statuses/{sha}", + "languages_url": "https://api.github.com/repos/up_the_irons/ebay4r/languages", + "stargazers_url": "https://api.github.com/repos/up_the_irons/ebay4r/stargazers", + "contributors_url": "https://api.github.com/repos/up_the_irons/ebay4r/contributors", + "subscribers_url": "https://api.github.com/repos/up_the_irons/ebay4r/subscribers", + "subscription_url": "https://api.github.com/repos/up_the_irons/ebay4r/subscription", + "commits_url": "https://api.github.com/repos/up_the_irons/ebay4r/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/up_the_irons/ebay4r/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/up_the_irons/ebay4r/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/up_the_irons/ebay4r/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/up_the_irons/ebay4r/contents/{+path}", + "compare_url": "https://api.github.com/repos/up_the_irons/ebay4r/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/up_the_irons/ebay4r/merges", + "archive_url": "https://api.github.com/repos/up_the_irons/ebay4r/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/up_the_irons/ebay4r/downloads", + "issues_url": "https://api.github.com/repos/up_the_irons/ebay4r/issues{/number}", + "pulls_url": "https://api.github.com/repos/up_the_irons/ebay4r/pulls{/number}", + "milestones_url": "https://api.github.com/repos/up_the_irons/ebay4r/milestones{/number}", + "notifications_url": "https://api.github.com/repos/up_the_irons/ebay4r/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/up_the_irons/ebay4r/labels{/name}", + "releases_url": "https://api.github.com/repos/up_the_irons/ebay4r/releases{/id}", + "deployments_url": "https://api.github.com/repos/up_the_irons/ebay4r/deployments" + }, + { + "id": 218, + "name": "merb-plugins", + "full_name": "wycats/merb-plugins", + "owner": { + "login": "wycats", + "id": 4, + "avatar_url": "https://avatars.githubusercontent.com/u/4?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wycats/merb-plugins", + "description": "Merb Plugins: Even more modules to hook up your Merb installation", + "fork": false, + "url": "https://api.github.com/repos/wycats/merb-plugins", + "forks_url": "https://api.github.com/repos/wycats/merb-plugins/forks", + "keys_url": "https://api.github.com/repos/wycats/merb-plugins/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wycats/merb-plugins/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wycats/merb-plugins/teams", + "hooks_url": "https://api.github.com/repos/wycats/merb-plugins/hooks", + "issue_events_url": "https://api.github.com/repos/wycats/merb-plugins/issues/events{/number}", + "events_url": "https://api.github.com/repos/wycats/merb-plugins/events", + "assignees_url": "https://api.github.com/repos/wycats/merb-plugins/assignees{/user}", + "branches_url": "https://api.github.com/repos/wycats/merb-plugins/branches{/branch}", + "tags_url": "https://api.github.com/repos/wycats/merb-plugins/tags", + "blobs_url": "https://api.github.com/repos/wycats/merb-plugins/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wycats/merb-plugins/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wycats/merb-plugins/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wycats/merb-plugins/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wycats/merb-plugins/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wycats/merb-plugins/languages", + "stargazers_url": "https://api.github.com/repos/wycats/merb-plugins/stargazers", + "contributors_url": "https://api.github.com/repos/wycats/merb-plugins/contributors", + "subscribers_url": "https://api.github.com/repos/wycats/merb-plugins/subscribers", + "subscription_url": "https://api.github.com/repos/wycats/merb-plugins/subscription", + "commits_url": "https://api.github.com/repos/wycats/merb-plugins/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wycats/merb-plugins/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wycats/merb-plugins/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wycats/merb-plugins/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wycats/merb-plugins/contents/{+path}", + "compare_url": "https://api.github.com/repos/wycats/merb-plugins/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wycats/merb-plugins/merges", + "archive_url": "https://api.github.com/repos/wycats/merb-plugins/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wycats/merb-plugins/downloads", + "issues_url": "https://api.github.com/repos/wycats/merb-plugins/issues{/number}", + "pulls_url": "https://api.github.com/repos/wycats/merb-plugins/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wycats/merb-plugins/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wycats/merb-plugins/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wycats/merb-plugins/labels{/name}", + "releases_url": "https://api.github.com/repos/wycats/merb-plugins/releases{/id}", + "deployments_url": "https://api.github.com/repos/wycats/merb-plugins/deployments" + }, + { + "id": 220, + "name": "ram", + "full_name": "up_the_irons/ram", + "owner": { + "login": "up_the_irons", + "id": 121, + "avatar_url": "https://avatars.githubusercontent.com/u/121?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/up_the_irons", + "html_url": "https://github.com/up_the_irons", + "followers_url": "https://api.github.com/users/up_the_irons/followers", + "following_url": "https://api.github.com/users/up_the_irons/following{/other_user}", + "gists_url": "https://api.github.com/users/up_the_irons/gists{/gist_id}", + "starred_url": "https://api.github.com/users/up_the_irons/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/up_the_irons/subscriptions", + "organizations_url": "https://api.github.com/users/up_the_irons/orgs", + "repos_url": "https://api.github.com/users/up_the_irons/repos", + "events_url": "https://api.github.com/users/up_the_irons/events{/privacy}", + "received_events_url": "https://api.github.com/users/up_the_irons/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/up_the_irons/ram", + "description": "Ruby Asset Manager", + "fork": false, + "url": "https://api.github.com/repos/up_the_irons/ram", + "forks_url": "https://api.github.com/repos/up_the_irons/ram/forks", + "keys_url": "https://api.github.com/repos/up_the_irons/ram/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/up_the_irons/ram/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/up_the_irons/ram/teams", + "hooks_url": "https://api.github.com/repos/up_the_irons/ram/hooks", + "issue_events_url": "https://api.github.com/repos/up_the_irons/ram/issues/events{/number}", + "events_url": "https://api.github.com/repos/up_the_irons/ram/events", + "assignees_url": "https://api.github.com/repos/up_the_irons/ram/assignees{/user}", + "branches_url": "https://api.github.com/repos/up_the_irons/ram/branches{/branch}", + "tags_url": "https://api.github.com/repos/up_the_irons/ram/tags", + "blobs_url": "https://api.github.com/repos/up_the_irons/ram/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/up_the_irons/ram/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/up_the_irons/ram/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/up_the_irons/ram/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/up_the_irons/ram/statuses/{sha}", + "languages_url": "https://api.github.com/repos/up_the_irons/ram/languages", + "stargazers_url": "https://api.github.com/repos/up_the_irons/ram/stargazers", + "contributors_url": "https://api.github.com/repos/up_the_irons/ram/contributors", + "subscribers_url": "https://api.github.com/repos/up_the_irons/ram/subscribers", + "subscription_url": "https://api.github.com/repos/up_the_irons/ram/subscription", + "commits_url": "https://api.github.com/repos/up_the_irons/ram/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/up_the_irons/ram/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/up_the_irons/ram/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/up_the_irons/ram/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/up_the_irons/ram/contents/{+path}", + "compare_url": "https://api.github.com/repos/up_the_irons/ram/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/up_the_irons/ram/merges", + "archive_url": "https://api.github.com/repos/up_the_irons/ram/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/up_the_irons/ram/downloads", + "issues_url": "https://api.github.com/repos/up_the_irons/ram/issues{/number}", + "pulls_url": "https://api.github.com/repos/up_the_irons/ram/pulls{/number}", + "milestones_url": "https://api.github.com/repos/up_the_irons/ram/milestones{/number}", + "notifications_url": "https://api.github.com/repos/up_the_irons/ram/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/up_the_irons/ram/labels{/name}", + "releases_url": "https://api.github.com/repos/up_the_irons/ram/releases{/id}", + "deployments_url": "https://api.github.com/repos/up_the_irons/ram/deployments" + }, + { + "id": 230, + "name": "ambitious_activeldap", + "full_name": "defunkt/ambitious_activeldap", + "owner": { + "login": "defunkt", + "id": 2, + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/defunkt/ambitious_activeldap", + "description": "Ambition adapter for ActiveLdap", + "fork": false, + "url": "https://api.github.com/repos/defunkt/ambitious_activeldap", + "forks_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/forks", + "keys_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/teams", + "hooks_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/events", + "assignees_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/tags", + "blobs_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/subscription", + "commits_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/merges", + "archive_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/downloads", + "issues_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/ambitious_activeldap/deployments" + }, + { + "id": 232, + "name": "fitter_happier", + "full_name": "atmos/fitter_happier", + "owner": { + "login": "atmos", + "id": 38, + "avatar_url": "https://avatars.githubusercontent.com/u/38?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/atmos", + "html_url": "https://github.com/atmos", + "followers_url": "https://api.github.com/users/atmos/followers", + "following_url": "https://api.github.com/users/atmos/following{/other_user}", + "gists_url": "https://api.github.com/users/atmos/gists{/gist_id}", + "starred_url": "https://api.github.com/users/atmos/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/atmos/subscriptions", + "organizations_url": "https://api.github.com/users/atmos/orgs", + "repos_url": "https://api.github.com/users/atmos/repos", + "events_url": "https://api.github.com/users/atmos/events{/privacy}", + "received_events_url": "https://api.github.com/users/atmos/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/atmos/fitter_happier", + "description": "A Rails Plugin for adding a simple health check to your application", + "fork": false, + "url": "https://api.github.com/repos/atmos/fitter_happier", + "forks_url": "https://api.github.com/repos/atmos/fitter_happier/forks", + "keys_url": "https://api.github.com/repos/atmos/fitter_happier/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/atmos/fitter_happier/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/atmos/fitter_happier/teams", + "hooks_url": "https://api.github.com/repos/atmos/fitter_happier/hooks", + "issue_events_url": "https://api.github.com/repos/atmos/fitter_happier/issues/events{/number}", + "events_url": "https://api.github.com/repos/atmos/fitter_happier/events", + "assignees_url": "https://api.github.com/repos/atmos/fitter_happier/assignees{/user}", + "branches_url": "https://api.github.com/repos/atmos/fitter_happier/branches{/branch}", + "tags_url": "https://api.github.com/repos/atmos/fitter_happier/tags", + "blobs_url": "https://api.github.com/repos/atmos/fitter_happier/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/atmos/fitter_happier/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/atmos/fitter_happier/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/atmos/fitter_happier/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/atmos/fitter_happier/statuses/{sha}", + "languages_url": "https://api.github.com/repos/atmos/fitter_happier/languages", + "stargazers_url": "https://api.github.com/repos/atmos/fitter_happier/stargazers", + "contributors_url": "https://api.github.com/repos/atmos/fitter_happier/contributors", + "subscribers_url": "https://api.github.com/repos/atmos/fitter_happier/subscribers", + "subscription_url": "https://api.github.com/repos/atmos/fitter_happier/subscription", + "commits_url": "https://api.github.com/repos/atmos/fitter_happier/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/atmos/fitter_happier/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/atmos/fitter_happier/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/atmos/fitter_happier/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/atmos/fitter_happier/contents/{+path}", + "compare_url": "https://api.github.com/repos/atmos/fitter_happier/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/atmos/fitter_happier/merges", + "archive_url": "https://api.github.com/repos/atmos/fitter_happier/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/atmos/fitter_happier/downloads", + "issues_url": "https://api.github.com/repos/atmos/fitter_happier/issues{/number}", + "pulls_url": "https://api.github.com/repos/atmos/fitter_happier/pulls{/number}", + "milestones_url": "https://api.github.com/repos/atmos/fitter_happier/milestones{/number}", + "notifications_url": "https://api.github.com/repos/atmos/fitter_happier/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/atmos/fitter_happier/labels{/name}", + "releases_url": "https://api.github.com/repos/atmos/fitter_happier/releases{/id}", + "deployments_url": "https://api.github.com/repos/atmos/fitter_happier/deployments" + }, + { + "id": 237, + "name": "oebfare", + "full_name": "brosner/oebfare", + "owner": { + "login": "brosner", + "id": 124, + "avatar_url": "https://avatars.githubusercontent.com/u/124?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/brosner", + "html_url": "https://github.com/brosner", + "followers_url": "https://api.github.com/users/brosner/followers", + "following_url": "https://api.github.com/users/brosner/following{/other_user}", + "gists_url": "https://api.github.com/users/brosner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brosner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brosner/subscriptions", + "organizations_url": "https://api.github.com/users/brosner/orgs", + "repos_url": "https://api.github.com/users/brosner/repos", + "events_url": "https://api.github.com/users/brosner/events{/privacy}", + "received_events_url": "https://api.github.com/users/brosner/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/brosner/oebfare", + "description": "my personal blog written with django", + "fork": false, + "url": "https://api.github.com/repos/brosner/oebfare", + "forks_url": "https://api.github.com/repos/brosner/oebfare/forks", + "keys_url": "https://api.github.com/repos/brosner/oebfare/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/brosner/oebfare/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/brosner/oebfare/teams", + "hooks_url": "https://api.github.com/repos/brosner/oebfare/hooks", + "issue_events_url": "https://api.github.com/repos/brosner/oebfare/issues/events{/number}", + "events_url": "https://api.github.com/repos/brosner/oebfare/events", + "assignees_url": "https://api.github.com/repos/brosner/oebfare/assignees{/user}", + "branches_url": "https://api.github.com/repos/brosner/oebfare/branches{/branch}", + "tags_url": "https://api.github.com/repos/brosner/oebfare/tags", + "blobs_url": "https://api.github.com/repos/brosner/oebfare/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/brosner/oebfare/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/brosner/oebfare/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/brosner/oebfare/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/brosner/oebfare/statuses/{sha}", + "languages_url": "https://api.github.com/repos/brosner/oebfare/languages", + "stargazers_url": "https://api.github.com/repos/brosner/oebfare/stargazers", + "contributors_url": "https://api.github.com/repos/brosner/oebfare/contributors", + "subscribers_url": "https://api.github.com/repos/brosner/oebfare/subscribers", + "subscription_url": "https://api.github.com/repos/brosner/oebfare/subscription", + "commits_url": "https://api.github.com/repos/brosner/oebfare/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/brosner/oebfare/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/brosner/oebfare/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/brosner/oebfare/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/brosner/oebfare/contents/{+path}", + "compare_url": "https://api.github.com/repos/brosner/oebfare/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/brosner/oebfare/merges", + "archive_url": "https://api.github.com/repos/brosner/oebfare/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/brosner/oebfare/downloads", + "issues_url": "https://api.github.com/repos/brosner/oebfare/issues{/number}", + "pulls_url": "https://api.github.com/repos/brosner/oebfare/pulls{/number}", + "milestones_url": "https://api.github.com/repos/brosner/oebfare/milestones{/number}", + "notifications_url": "https://api.github.com/repos/brosner/oebfare/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/brosner/oebfare/labels{/name}", + "releases_url": "https://api.github.com/repos/brosner/oebfare/releases{/id}", + "deployments_url": "https://api.github.com/repos/brosner/oebfare/deployments" + }, + { + "id": 245, + "name": "credit_card_tools", + "full_name": "up_the_irons/credit_card_tools", + "owner": { + "login": "up_the_irons", + "id": 121, + "avatar_url": "https://avatars.githubusercontent.com/u/121?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/up_the_irons", + "html_url": "https://github.com/up_the_irons", + "followers_url": "https://api.github.com/users/up_the_irons/followers", + "following_url": "https://api.github.com/users/up_the_irons/following{/other_user}", + "gists_url": "https://api.github.com/users/up_the_irons/gists{/gist_id}", + "starred_url": "https://api.github.com/users/up_the_irons/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/up_the_irons/subscriptions", + "organizations_url": "https://api.github.com/users/up_the_irons/orgs", + "repos_url": "https://api.github.com/users/up_the_irons/repos", + "events_url": "https://api.github.com/users/up_the_irons/events{/privacy}", + "received_events_url": "https://api.github.com/users/up_the_irons/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/up_the_irons/credit_card_tools", + "description": "Tools for processing credit cards on the command line", + "fork": false, + "url": "https://api.github.com/repos/up_the_irons/credit_card_tools", + "forks_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/forks", + "keys_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/teams", + "hooks_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/hooks", + "issue_events_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/issues/events{/number}", + "events_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/events", + "assignees_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/assignees{/user}", + "branches_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/branches{/branch}", + "tags_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/tags", + "blobs_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/statuses/{sha}", + "languages_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/languages", + "stargazers_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/stargazers", + "contributors_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/contributors", + "subscribers_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/subscribers", + "subscription_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/subscription", + "commits_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/contents/{+path}", + "compare_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/merges", + "archive_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/downloads", + "issues_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/issues{/number}", + "pulls_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/pulls{/number}", + "milestones_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/milestones{/number}", + "notifications_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/labels{/name}", + "releases_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/releases{/id}", + "deployments_url": "https://api.github.com/repos/up_the_irons/credit_card_tools/deployments" + }, + { + "id": 248, + "name": "rorem", + "full_name": "jnicklas/rorem", + "owner": { + "login": "jnicklas", + "id": 134, + "avatar_url": "https://avatars.githubusercontent.com/u/134?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnicklas", + "html_url": "https://github.com/jnicklas", + "followers_url": "https://api.github.com/users/jnicklas/followers", + "following_url": "https://api.github.com/users/jnicklas/following{/other_user}", + "gists_url": "https://api.github.com/users/jnicklas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnicklas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnicklas/subscriptions", + "organizations_url": "https://api.github.com/users/jnicklas/orgs", + "repos_url": "https://api.github.com/users/jnicklas/repos", + "events_url": "https://api.github.com/users/jnicklas/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnicklas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jnicklas/rorem", + "description": "Rorem is a random data generator", + "fork": false, + "url": "https://api.github.com/repos/jnicklas/rorem", + "forks_url": "https://api.github.com/repos/jnicklas/rorem/forks", + "keys_url": "https://api.github.com/repos/jnicklas/rorem/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnicklas/rorem/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnicklas/rorem/teams", + "hooks_url": "https://api.github.com/repos/jnicklas/rorem/hooks", + "issue_events_url": "https://api.github.com/repos/jnicklas/rorem/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnicklas/rorem/events", + "assignees_url": "https://api.github.com/repos/jnicklas/rorem/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnicklas/rorem/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnicklas/rorem/tags", + "blobs_url": "https://api.github.com/repos/jnicklas/rorem/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnicklas/rorem/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnicklas/rorem/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnicklas/rorem/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnicklas/rorem/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnicklas/rorem/languages", + "stargazers_url": "https://api.github.com/repos/jnicklas/rorem/stargazers", + "contributors_url": "https://api.github.com/repos/jnicklas/rorem/contributors", + "subscribers_url": "https://api.github.com/repos/jnicklas/rorem/subscribers", + "subscription_url": "https://api.github.com/repos/jnicklas/rorem/subscription", + "commits_url": "https://api.github.com/repos/jnicklas/rorem/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnicklas/rorem/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnicklas/rorem/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnicklas/rorem/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnicklas/rorem/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnicklas/rorem/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnicklas/rorem/merges", + "archive_url": "https://api.github.com/repos/jnicklas/rorem/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnicklas/rorem/downloads", + "issues_url": "https://api.github.com/repos/jnicklas/rorem/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnicklas/rorem/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnicklas/rorem/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnicklas/rorem/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnicklas/rorem/labels{/name}", + "releases_url": "https://api.github.com/repos/jnicklas/rorem/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnicklas/rorem/deployments" + }, + { + "id": 249, + "name": "braid", + "full_name": "cristibalan/braid", + "owner": { + "login": "cristibalan", + "id": 122, + "avatar_url": "https://avatars.githubusercontent.com/u/122?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cristibalan", + "html_url": "https://github.com/cristibalan", + "followers_url": "https://api.github.com/users/cristibalan/followers", + "following_url": "https://api.github.com/users/cristibalan/following{/other_user}", + "gists_url": "https://api.github.com/users/cristibalan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cristibalan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cristibalan/subscriptions", + "organizations_url": "https://api.github.com/users/cristibalan/orgs", + "repos_url": "https://api.github.com/users/cristibalan/repos", + "events_url": "https://api.github.com/users/cristibalan/events{/privacy}", + "received_events_url": "https://api.github.com/users/cristibalan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cristibalan/braid", + "description": "Simple tool to help track vendor branches in a Git repository.", + "fork": false, + "url": "https://api.github.com/repos/cristibalan/braid", + "forks_url": "https://api.github.com/repos/cristibalan/braid/forks", + "keys_url": "https://api.github.com/repos/cristibalan/braid/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cristibalan/braid/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cristibalan/braid/teams", + "hooks_url": "https://api.github.com/repos/cristibalan/braid/hooks", + "issue_events_url": "https://api.github.com/repos/cristibalan/braid/issues/events{/number}", + "events_url": "https://api.github.com/repos/cristibalan/braid/events", + "assignees_url": "https://api.github.com/repos/cristibalan/braid/assignees{/user}", + "branches_url": "https://api.github.com/repos/cristibalan/braid/branches{/branch}", + "tags_url": "https://api.github.com/repos/cristibalan/braid/tags", + "blobs_url": "https://api.github.com/repos/cristibalan/braid/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cristibalan/braid/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cristibalan/braid/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cristibalan/braid/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cristibalan/braid/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cristibalan/braid/languages", + "stargazers_url": "https://api.github.com/repos/cristibalan/braid/stargazers", + "contributors_url": "https://api.github.com/repos/cristibalan/braid/contributors", + "subscribers_url": "https://api.github.com/repos/cristibalan/braid/subscribers", + "subscription_url": "https://api.github.com/repos/cristibalan/braid/subscription", + "commits_url": "https://api.github.com/repos/cristibalan/braid/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cristibalan/braid/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cristibalan/braid/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cristibalan/braid/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cristibalan/braid/contents/{+path}", + "compare_url": "https://api.github.com/repos/cristibalan/braid/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cristibalan/braid/merges", + "archive_url": "https://api.github.com/repos/cristibalan/braid/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cristibalan/braid/downloads", + "issues_url": "https://api.github.com/repos/cristibalan/braid/issues{/number}", + "pulls_url": "https://api.github.com/repos/cristibalan/braid/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cristibalan/braid/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cristibalan/braid/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cristibalan/braid/labels{/name}", + "releases_url": "https://api.github.com/repos/cristibalan/braid/releases{/id}", + "deployments_url": "https://api.github.com/repos/cristibalan/braid/deployments" + }, + { + "id": 251, + "name": "uploadcolumn", + "full_name": "jnicklas/uploadcolumn", + "owner": { + "login": "jnicklas", + "id": 134, + "avatar_url": "https://avatars.githubusercontent.com/u/134?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnicklas", + "html_url": "https://github.com/jnicklas", + "followers_url": "https://api.github.com/users/jnicklas/followers", + "following_url": "https://api.github.com/users/jnicklas/following{/other_user}", + "gists_url": "https://api.github.com/users/jnicklas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnicklas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnicklas/subscriptions", + "organizations_url": "https://api.github.com/users/jnicklas/orgs", + "repos_url": "https://api.github.com/users/jnicklas/repos", + "events_url": "https://api.github.com/users/jnicklas/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnicklas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jnicklas/uploadcolumn", + "description": "UploadColumn is no longer maintained, check out CarrierWave for an alternative", + "fork": false, + "url": "https://api.github.com/repos/jnicklas/uploadcolumn", + "forks_url": "https://api.github.com/repos/jnicklas/uploadcolumn/forks", + "keys_url": "https://api.github.com/repos/jnicklas/uploadcolumn/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnicklas/uploadcolumn/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnicklas/uploadcolumn/teams", + "hooks_url": "https://api.github.com/repos/jnicklas/uploadcolumn/hooks", + "issue_events_url": "https://api.github.com/repos/jnicklas/uploadcolumn/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnicklas/uploadcolumn/events", + "assignees_url": "https://api.github.com/repos/jnicklas/uploadcolumn/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnicklas/uploadcolumn/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnicklas/uploadcolumn/tags", + "blobs_url": "https://api.github.com/repos/jnicklas/uploadcolumn/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnicklas/uploadcolumn/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnicklas/uploadcolumn/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnicklas/uploadcolumn/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnicklas/uploadcolumn/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnicklas/uploadcolumn/languages", + "stargazers_url": "https://api.github.com/repos/jnicklas/uploadcolumn/stargazers", + "contributors_url": "https://api.github.com/repos/jnicklas/uploadcolumn/contributors", + "subscribers_url": "https://api.github.com/repos/jnicklas/uploadcolumn/subscribers", + "subscription_url": "https://api.github.com/repos/jnicklas/uploadcolumn/subscription", + "commits_url": "https://api.github.com/repos/jnicklas/uploadcolumn/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnicklas/uploadcolumn/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnicklas/uploadcolumn/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnicklas/uploadcolumn/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnicklas/uploadcolumn/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnicklas/uploadcolumn/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnicklas/uploadcolumn/merges", + "archive_url": "https://api.github.com/repos/jnicklas/uploadcolumn/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnicklas/uploadcolumn/downloads", + "issues_url": "https://api.github.com/repos/jnicklas/uploadcolumn/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnicklas/uploadcolumn/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnicklas/uploadcolumn/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnicklas/uploadcolumn/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnicklas/uploadcolumn/labels{/name}", + "releases_url": "https://api.github.com/repos/jnicklas/uploadcolumn/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnicklas/uploadcolumn/deployments" + }, + { + "id": 252, + "name": "ruby-on-rails-tmbundle", + "full_name": "simonjefford/ruby-on-rails-tmbundle", + "owner": { + "login": "simonjefford", + "id": 136, + "avatar_url": "https://avatars.githubusercontent.com/u/136?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/simonjefford", + "html_url": "https://github.com/simonjefford", + "followers_url": "https://api.github.com/users/simonjefford/followers", + "following_url": "https://api.github.com/users/simonjefford/following{/other_user}", + "gists_url": "https://api.github.com/users/simonjefford/gists{/gist_id}", + "starred_url": "https://api.github.com/users/simonjefford/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/simonjefford/subscriptions", + "organizations_url": "https://api.github.com/users/simonjefford/orgs", + "repos_url": "https://api.github.com/users/simonjefford/repos", + "events_url": "https://api.github.com/users/simonjefford/events{/privacy}", + "received_events_url": "https://api.github.com/users/simonjefford/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/simonjefford/ruby-on-rails-tmbundle", + "description": "Ruby on Rails TextMate bundle [master branch is svn trunk; patches to drnicwilliams@gmail.com]", + "fork": true, + "url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle", + "forks_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/forks", + "keys_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/teams", + "hooks_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/hooks", + "issue_events_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/issues/events{/number}", + "events_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/events", + "assignees_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/assignees{/user}", + "branches_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/branches{/branch}", + "tags_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/tags", + "blobs_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/statuses/{sha}", + "languages_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/languages", + "stargazers_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/stargazers", + "contributors_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/contributors", + "subscribers_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/subscribers", + "subscription_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/subscription", + "commits_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/contents/{+path}", + "compare_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/merges", + "archive_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/downloads", + "issues_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/issues{/number}", + "pulls_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/pulls{/number}", + "milestones_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/milestones{/number}", + "notifications_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/labels{/name}", + "releases_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/releases{/id}", + "deployments_url": "https://api.github.com/repos/simonjefford/ruby-on-rails-tmbundle/deployments" + }, + { + "id": 256, + "name": "rack-mirror", + "full_name": "chneukirchen/rack-mirror", + "owner": { + "login": "chneukirchen", + "id": 139, + "avatar_url": "https://avatars.githubusercontent.com/u/139?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chneukirchen", + "html_url": "https://github.com/chneukirchen", + "followers_url": "https://api.github.com/users/chneukirchen/followers", + "following_url": "https://api.github.com/users/chneukirchen/following{/other_user}", + "gists_url": "https://api.github.com/users/chneukirchen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chneukirchen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chneukirchen/subscriptions", + "organizations_url": "https://api.github.com/users/chneukirchen/orgs", + "repos_url": "https://api.github.com/users/chneukirchen/repos", + "events_url": "https://api.github.com/users/chneukirchen/events{/privacy}", + "received_events_url": "https://api.github.com/users/chneukirchen/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chneukirchen/rack-mirror", + "description": "OUTDATED mirror of Rack's darcs repository, use github.com/chneukirchen/rack", + "fork": false, + "url": "https://api.github.com/repos/chneukirchen/rack-mirror", + "forks_url": "https://api.github.com/repos/chneukirchen/rack-mirror/forks", + "keys_url": "https://api.github.com/repos/chneukirchen/rack-mirror/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chneukirchen/rack-mirror/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chneukirchen/rack-mirror/teams", + "hooks_url": "https://api.github.com/repos/chneukirchen/rack-mirror/hooks", + "issue_events_url": "https://api.github.com/repos/chneukirchen/rack-mirror/issues/events{/number}", + "events_url": "https://api.github.com/repos/chneukirchen/rack-mirror/events", + "assignees_url": "https://api.github.com/repos/chneukirchen/rack-mirror/assignees{/user}", + "branches_url": "https://api.github.com/repos/chneukirchen/rack-mirror/branches{/branch}", + "tags_url": "https://api.github.com/repos/chneukirchen/rack-mirror/tags", + "blobs_url": "https://api.github.com/repos/chneukirchen/rack-mirror/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chneukirchen/rack-mirror/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chneukirchen/rack-mirror/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chneukirchen/rack-mirror/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chneukirchen/rack-mirror/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chneukirchen/rack-mirror/languages", + "stargazers_url": "https://api.github.com/repos/chneukirchen/rack-mirror/stargazers", + "contributors_url": "https://api.github.com/repos/chneukirchen/rack-mirror/contributors", + "subscribers_url": "https://api.github.com/repos/chneukirchen/rack-mirror/subscribers", + "subscription_url": "https://api.github.com/repos/chneukirchen/rack-mirror/subscription", + "commits_url": "https://api.github.com/repos/chneukirchen/rack-mirror/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chneukirchen/rack-mirror/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chneukirchen/rack-mirror/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chneukirchen/rack-mirror/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chneukirchen/rack-mirror/contents/{+path}", + "compare_url": "https://api.github.com/repos/chneukirchen/rack-mirror/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chneukirchen/rack-mirror/merges", + "archive_url": "https://api.github.com/repos/chneukirchen/rack-mirror/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chneukirchen/rack-mirror/downloads", + "issues_url": "https://api.github.com/repos/chneukirchen/rack-mirror/issues{/number}", + "pulls_url": "https://api.github.com/repos/chneukirchen/rack-mirror/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chneukirchen/rack-mirror/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chneukirchen/rack-mirror/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chneukirchen/rack-mirror/labels{/name}", + "releases_url": "https://api.github.com/repos/chneukirchen/rack-mirror/releases{/id}", + "deployments_url": "https://api.github.com/repos/chneukirchen/rack-mirror/deployments" + }, + { + "id": 257, + "name": "coset-mirror", + "full_name": "chneukirchen/coset-mirror", + "owner": { + "login": "chneukirchen", + "id": 139, + "avatar_url": "https://avatars.githubusercontent.com/u/139?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chneukirchen", + "html_url": "https://github.com/chneukirchen", + "followers_url": "https://api.github.com/users/chneukirchen/followers", + "following_url": "https://api.github.com/users/chneukirchen/following{/other_user}", + "gists_url": "https://api.github.com/users/chneukirchen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chneukirchen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chneukirchen/subscriptions", + "organizations_url": "https://api.github.com/users/chneukirchen/orgs", + "repos_url": "https://api.github.com/users/chneukirchen/repos", + "events_url": "https://api.github.com/users/chneukirchen/events{/privacy}", + "received_events_url": "https://api.github.com/users/chneukirchen/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chneukirchen/coset-mirror", + "description": "(experimental) Mirror of the coset darcs repository", + "fork": false, + "url": "https://api.github.com/repos/chneukirchen/coset-mirror", + "forks_url": "https://api.github.com/repos/chneukirchen/coset-mirror/forks", + "keys_url": "https://api.github.com/repos/chneukirchen/coset-mirror/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chneukirchen/coset-mirror/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chneukirchen/coset-mirror/teams", + "hooks_url": "https://api.github.com/repos/chneukirchen/coset-mirror/hooks", + "issue_events_url": "https://api.github.com/repos/chneukirchen/coset-mirror/issues/events{/number}", + "events_url": "https://api.github.com/repos/chneukirchen/coset-mirror/events", + "assignees_url": "https://api.github.com/repos/chneukirchen/coset-mirror/assignees{/user}", + "branches_url": "https://api.github.com/repos/chneukirchen/coset-mirror/branches{/branch}", + "tags_url": "https://api.github.com/repos/chneukirchen/coset-mirror/tags", + "blobs_url": "https://api.github.com/repos/chneukirchen/coset-mirror/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chneukirchen/coset-mirror/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chneukirchen/coset-mirror/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chneukirchen/coset-mirror/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chneukirchen/coset-mirror/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chneukirchen/coset-mirror/languages", + "stargazers_url": "https://api.github.com/repos/chneukirchen/coset-mirror/stargazers", + "contributors_url": "https://api.github.com/repos/chneukirchen/coset-mirror/contributors", + "subscribers_url": "https://api.github.com/repos/chneukirchen/coset-mirror/subscribers", + "subscription_url": "https://api.github.com/repos/chneukirchen/coset-mirror/subscription", + "commits_url": "https://api.github.com/repos/chneukirchen/coset-mirror/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chneukirchen/coset-mirror/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chneukirchen/coset-mirror/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chneukirchen/coset-mirror/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chneukirchen/coset-mirror/contents/{+path}", + "compare_url": "https://api.github.com/repos/chneukirchen/coset-mirror/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chneukirchen/coset-mirror/merges", + "archive_url": "https://api.github.com/repos/chneukirchen/coset-mirror/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chneukirchen/coset-mirror/downloads", + "issues_url": "https://api.github.com/repos/chneukirchen/coset-mirror/issues{/number}", + "pulls_url": "https://api.github.com/repos/chneukirchen/coset-mirror/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chneukirchen/coset-mirror/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chneukirchen/coset-mirror/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chneukirchen/coset-mirror/labels{/name}", + "releases_url": "https://api.github.com/repos/chneukirchen/coset-mirror/releases{/id}", + "deployments_url": "https://api.github.com/repos/chneukirchen/coset-mirror/deployments" + }, + { + "id": 267, + "name": "javascript-unittest-tmbundle", + "full_name": "drnic/javascript-unittest-tmbundle", + "owner": { + "login": "drnic", + "id": 108, + "avatar_url": "https://avatars.githubusercontent.com/u/108?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/drnic", + "html_url": "https://github.com/drnic", + "followers_url": "https://api.github.com/users/drnic/followers", + "following_url": "https://api.github.com/users/drnic/following{/other_user}", + "gists_url": "https://api.github.com/users/drnic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/drnic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/drnic/subscriptions", + "organizations_url": "https://api.github.com/users/drnic/orgs", + "repos_url": "https://api.github.com/users/drnic/repos", + "events_url": "https://api.github.com/users/drnic/events{/privacy}", + "received_events_url": "https://api.github.com/users/drnic/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/drnic/javascript-unittest-tmbundle", + "description": "JavaScript Unit Test TextMate Bundle [for prototype's unittest.js library]", + "fork": false, + "url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle", + "forks_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/forks", + "keys_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/teams", + "hooks_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/hooks", + "issue_events_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/issues/events{/number}", + "events_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/events", + "assignees_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/assignees{/user}", + "branches_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/branches{/branch}", + "tags_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/tags", + "blobs_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/statuses/{sha}", + "languages_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/languages", + "stargazers_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/stargazers", + "contributors_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/contributors", + "subscribers_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/subscribers", + "subscription_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/subscription", + "commits_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/contents/{+path}", + "compare_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/merges", + "archive_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/downloads", + "issues_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/issues{/number}", + "pulls_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/pulls{/number}", + "milestones_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/milestones{/number}", + "notifications_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/labels{/name}", + "releases_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/releases{/id}", + "deployments_url": "https://api.github.com/repos/drnic/javascript-unittest-tmbundle/deployments" + }, + { + "id": 273, + "name": "eycap", + "full_name": "engineyard/eycap", + "owner": { + "login": "engineyard", + "id": 81, + "avatar_url": "https://avatars.githubusercontent.com/u/81?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/engineyard", + "html_url": "https://github.com/engineyard", + "followers_url": "https://api.github.com/users/engineyard/followers", + "following_url": "https://api.github.com/users/engineyard/following{/other_user}", + "gists_url": "https://api.github.com/users/engineyard/gists{/gist_id}", + "starred_url": "https://api.github.com/users/engineyard/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/engineyard/subscriptions", + "organizations_url": "https://api.github.com/users/engineyard/orgs", + "repos_url": "https://api.github.com/users/engineyard/repos", + "events_url": "https://api.github.com/users/engineyard/events{/privacy}", + "received_events_url": "https://api.github.com/users/engineyard/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/engineyard/eycap", + "description": "Engine Yard specific capistrano recipes", + "fork": false, + "url": "https://api.github.com/repos/engineyard/eycap", + "forks_url": "https://api.github.com/repos/engineyard/eycap/forks", + "keys_url": "https://api.github.com/repos/engineyard/eycap/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/engineyard/eycap/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/engineyard/eycap/teams", + "hooks_url": "https://api.github.com/repos/engineyard/eycap/hooks", + "issue_events_url": "https://api.github.com/repos/engineyard/eycap/issues/events{/number}", + "events_url": "https://api.github.com/repos/engineyard/eycap/events", + "assignees_url": "https://api.github.com/repos/engineyard/eycap/assignees{/user}", + "branches_url": "https://api.github.com/repos/engineyard/eycap/branches{/branch}", + "tags_url": "https://api.github.com/repos/engineyard/eycap/tags", + "blobs_url": "https://api.github.com/repos/engineyard/eycap/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/engineyard/eycap/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/engineyard/eycap/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/engineyard/eycap/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/engineyard/eycap/statuses/{sha}", + "languages_url": "https://api.github.com/repos/engineyard/eycap/languages", + "stargazers_url": "https://api.github.com/repos/engineyard/eycap/stargazers", + "contributors_url": "https://api.github.com/repos/engineyard/eycap/contributors", + "subscribers_url": "https://api.github.com/repos/engineyard/eycap/subscribers", + "subscription_url": "https://api.github.com/repos/engineyard/eycap/subscription", + "commits_url": "https://api.github.com/repos/engineyard/eycap/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/engineyard/eycap/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/engineyard/eycap/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/engineyard/eycap/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/engineyard/eycap/contents/{+path}", + "compare_url": "https://api.github.com/repos/engineyard/eycap/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/engineyard/eycap/merges", + "archive_url": "https://api.github.com/repos/engineyard/eycap/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/engineyard/eycap/downloads", + "issues_url": "https://api.github.com/repos/engineyard/eycap/issues{/number}", + "pulls_url": "https://api.github.com/repos/engineyard/eycap/pulls{/number}", + "milestones_url": "https://api.github.com/repos/engineyard/eycap/milestones{/number}", + "notifications_url": "https://api.github.com/repos/engineyard/eycap/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/engineyard/eycap/labels{/name}", + "releases_url": "https://api.github.com/repos/engineyard/eycap/releases{/id}", + "deployments_url": "https://api.github.com/repos/engineyard/eycap/deployments" + }, + { + "id": 279, + "name": "gitsum", + "full_name": "chneukirchen/gitsum", + "owner": { + "login": "chneukirchen", + "id": 139, + "avatar_url": "https://avatars.githubusercontent.com/u/139?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chneukirchen", + "html_url": "https://github.com/chneukirchen", + "followers_url": "https://api.github.com/users/chneukirchen/followers", + "following_url": "https://api.github.com/users/chneukirchen/following{/other_user}", + "gists_url": "https://api.github.com/users/chneukirchen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chneukirchen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chneukirchen/subscriptions", + "organizations_url": "https://api.github.com/users/chneukirchen/orgs", + "repos_url": "https://api.github.com/users/chneukirchen/repos", + "events_url": "https://api.github.com/users/chneukirchen/events{/privacy}", + "received_events_url": "https://api.github.com/users/chneukirchen/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chneukirchen/gitsum", + "description": "basic darcsum feelalike for Git", + "fork": false, + "url": "https://api.github.com/repos/chneukirchen/gitsum", + "forks_url": "https://api.github.com/repos/chneukirchen/gitsum/forks", + "keys_url": "https://api.github.com/repos/chneukirchen/gitsum/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chneukirchen/gitsum/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chneukirchen/gitsum/teams", + "hooks_url": "https://api.github.com/repos/chneukirchen/gitsum/hooks", + "issue_events_url": "https://api.github.com/repos/chneukirchen/gitsum/issues/events{/number}", + "events_url": "https://api.github.com/repos/chneukirchen/gitsum/events", + "assignees_url": "https://api.github.com/repos/chneukirchen/gitsum/assignees{/user}", + "branches_url": "https://api.github.com/repos/chneukirchen/gitsum/branches{/branch}", + "tags_url": "https://api.github.com/repos/chneukirchen/gitsum/tags", + "blobs_url": "https://api.github.com/repos/chneukirchen/gitsum/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chneukirchen/gitsum/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chneukirchen/gitsum/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chneukirchen/gitsum/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chneukirchen/gitsum/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chneukirchen/gitsum/languages", + "stargazers_url": "https://api.github.com/repos/chneukirchen/gitsum/stargazers", + "contributors_url": "https://api.github.com/repos/chneukirchen/gitsum/contributors", + "subscribers_url": "https://api.github.com/repos/chneukirchen/gitsum/subscribers", + "subscription_url": "https://api.github.com/repos/chneukirchen/gitsum/subscription", + "commits_url": "https://api.github.com/repos/chneukirchen/gitsum/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chneukirchen/gitsum/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chneukirchen/gitsum/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chneukirchen/gitsum/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chneukirchen/gitsum/contents/{+path}", + "compare_url": "https://api.github.com/repos/chneukirchen/gitsum/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chneukirchen/gitsum/merges", + "archive_url": "https://api.github.com/repos/chneukirchen/gitsum/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chneukirchen/gitsum/downloads", + "issues_url": "https://api.github.com/repos/chneukirchen/gitsum/issues{/number}", + "pulls_url": "https://api.github.com/repos/chneukirchen/gitsum/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chneukirchen/gitsum/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chneukirchen/gitsum/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chneukirchen/gitsum/labels{/name}", + "releases_url": "https://api.github.com/repos/chneukirchen/gitsum/releases{/id}", + "deployments_url": "https://api.github.com/repos/chneukirchen/gitsum/deployments" + }, + { + "id": 293, + "name": "sequel-model", + "full_name": "wayneeseguin/sequel-model", + "owner": { + "login": "wayneeseguin", + "id": 18, + "avatar_url": "https://avatars.githubusercontent.com/u/18?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wayneeseguin/sequel-model", + "description": "Sequel::Model (No longer working on this project)", + "fork": false, + "url": "https://api.github.com/repos/wayneeseguin/sequel-model", + "forks_url": "https://api.github.com/repos/wayneeseguin/sequel-model/forks", + "keys_url": "https://api.github.com/repos/wayneeseguin/sequel-model/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wayneeseguin/sequel-model/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wayneeseguin/sequel-model/teams", + "hooks_url": "https://api.github.com/repos/wayneeseguin/sequel-model/hooks", + "issue_events_url": "https://api.github.com/repos/wayneeseguin/sequel-model/issues/events{/number}", + "events_url": "https://api.github.com/repos/wayneeseguin/sequel-model/events", + "assignees_url": "https://api.github.com/repos/wayneeseguin/sequel-model/assignees{/user}", + "branches_url": "https://api.github.com/repos/wayneeseguin/sequel-model/branches{/branch}", + "tags_url": "https://api.github.com/repos/wayneeseguin/sequel-model/tags", + "blobs_url": "https://api.github.com/repos/wayneeseguin/sequel-model/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wayneeseguin/sequel-model/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wayneeseguin/sequel-model/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wayneeseguin/sequel-model/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wayneeseguin/sequel-model/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wayneeseguin/sequel-model/languages", + "stargazers_url": "https://api.github.com/repos/wayneeseguin/sequel-model/stargazers", + "contributors_url": "https://api.github.com/repos/wayneeseguin/sequel-model/contributors", + "subscribers_url": "https://api.github.com/repos/wayneeseguin/sequel-model/subscribers", + "subscription_url": "https://api.github.com/repos/wayneeseguin/sequel-model/subscription", + "commits_url": "https://api.github.com/repos/wayneeseguin/sequel-model/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wayneeseguin/sequel-model/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wayneeseguin/sequel-model/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wayneeseguin/sequel-model/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wayneeseguin/sequel-model/contents/{+path}", + "compare_url": "https://api.github.com/repos/wayneeseguin/sequel-model/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wayneeseguin/sequel-model/merges", + "archive_url": "https://api.github.com/repos/wayneeseguin/sequel-model/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wayneeseguin/sequel-model/downloads", + "issues_url": "https://api.github.com/repos/wayneeseguin/sequel-model/issues{/number}", + "pulls_url": "https://api.github.com/repos/wayneeseguin/sequel-model/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wayneeseguin/sequel-model/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wayneeseguin/sequel-model/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wayneeseguin/sequel-model/labels{/name}", + "releases_url": "https://api.github.com/repos/wayneeseguin/sequel-model/releases{/id}", + "deployments_url": "https://api.github.com/repos/wayneeseguin/sequel-model/deployments" + }, + { + "id": 305, + "name": "god", + "full_name": "kevinclark/god", + "owner": { + "login": "kevinclark", + "id": 20, + "avatar_url": "https://avatars.githubusercontent.com/u/20?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kevinclark", + "html_url": "https://github.com/kevinclark", + "followers_url": "https://api.github.com/users/kevinclark/followers", + "following_url": "https://api.github.com/users/kevinclark/following{/other_user}", + "gists_url": "https://api.github.com/users/kevinclark/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevinclark/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevinclark/subscriptions", + "organizations_url": "https://api.github.com/users/kevinclark/orgs", + "repos_url": "https://api.github.com/users/kevinclark/repos", + "events_url": "https://api.github.com/users/kevinclark/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevinclark/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kevinclark/god", + "description": "Ruby process monitor", + "fork": true, + "url": "https://api.github.com/repos/kevinclark/god", + "forks_url": "https://api.github.com/repos/kevinclark/god/forks", + "keys_url": "https://api.github.com/repos/kevinclark/god/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kevinclark/god/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kevinclark/god/teams", + "hooks_url": "https://api.github.com/repos/kevinclark/god/hooks", + "issue_events_url": "https://api.github.com/repos/kevinclark/god/issues/events{/number}", + "events_url": "https://api.github.com/repos/kevinclark/god/events", + "assignees_url": "https://api.github.com/repos/kevinclark/god/assignees{/user}", + "branches_url": "https://api.github.com/repos/kevinclark/god/branches{/branch}", + "tags_url": "https://api.github.com/repos/kevinclark/god/tags", + "blobs_url": "https://api.github.com/repos/kevinclark/god/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kevinclark/god/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kevinclark/god/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kevinclark/god/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kevinclark/god/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kevinclark/god/languages", + "stargazers_url": "https://api.github.com/repos/kevinclark/god/stargazers", + "contributors_url": "https://api.github.com/repos/kevinclark/god/contributors", + "subscribers_url": "https://api.github.com/repos/kevinclark/god/subscribers", + "subscription_url": "https://api.github.com/repos/kevinclark/god/subscription", + "commits_url": "https://api.github.com/repos/kevinclark/god/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kevinclark/god/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kevinclark/god/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kevinclark/god/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kevinclark/god/contents/{+path}", + "compare_url": "https://api.github.com/repos/kevinclark/god/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kevinclark/god/merges", + "archive_url": "https://api.github.com/repos/kevinclark/god/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kevinclark/god/downloads", + "issues_url": "https://api.github.com/repos/kevinclark/god/issues{/number}", + "pulls_url": "https://api.github.com/repos/kevinclark/god/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kevinclark/god/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kevinclark/god/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kevinclark/god/labels{/name}", + "releases_url": "https://api.github.com/repos/kevinclark/god/releases{/id}", + "deployments_url": "https://api.github.com/repos/kevinclark/god/deployments" + }, + { + "id": 307, + "name": "blerb-core", + "full_name": "hornbeck/blerb-core", + "owner": { + "login": "hornbeck", + "id": 49, + "avatar_url": "https://avatars.githubusercontent.com/u/49?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hornbeck", + "html_url": "https://github.com/hornbeck", + "followers_url": "https://api.github.com/users/hornbeck/followers", + "following_url": "https://api.github.com/users/hornbeck/following{/other_user}", + "gists_url": "https://api.github.com/users/hornbeck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hornbeck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hornbeck/subscriptions", + "organizations_url": "https://api.github.com/users/hornbeck/orgs", + "repos_url": "https://api.github.com/users/hornbeck/repos", + "events_url": "https://api.github.com/users/hornbeck/events{/privacy}", + "received_events_url": "https://api.github.com/users/hornbeck/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hornbeck/blerb-core", + "description": "blerb running on merb-core", + "fork": false, + "url": "https://api.github.com/repos/hornbeck/blerb-core", + "forks_url": "https://api.github.com/repos/hornbeck/blerb-core/forks", + "keys_url": "https://api.github.com/repos/hornbeck/blerb-core/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hornbeck/blerb-core/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hornbeck/blerb-core/teams", + "hooks_url": "https://api.github.com/repos/hornbeck/blerb-core/hooks", + "issue_events_url": "https://api.github.com/repos/hornbeck/blerb-core/issues/events{/number}", + "events_url": "https://api.github.com/repos/hornbeck/blerb-core/events", + "assignees_url": "https://api.github.com/repos/hornbeck/blerb-core/assignees{/user}", + "branches_url": "https://api.github.com/repos/hornbeck/blerb-core/branches{/branch}", + "tags_url": "https://api.github.com/repos/hornbeck/blerb-core/tags", + "blobs_url": "https://api.github.com/repos/hornbeck/blerb-core/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hornbeck/blerb-core/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hornbeck/blerb-core/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hornbeck/blerb-core/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hornbeck/blerb-core/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hornbeck/blerb-core/languages", + "stargazers_url": "https://api.github.com/repos/hornbeck/blerb-core/stargazers", + "contributors_url": "https://api.github.com/repos/hornbeck/blerb-core/contributors", + "subscribers_url": "https://api.github.com/repos/hornbeck/blerb-core/subscribers", + "subscription_url": "https://api.github.com/repos/hornbeck/blerb-core/subscription", + "commits_url": "https://api.github.com/repos/hornbeck/blerb-core/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hornbeck/blerb-core/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hornbeck/blerb-core/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hornbeck/blerb-core/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hornbeck/blerb-core/contents/{+path}", + "compare_url": "https://api.github.com/repos/hornbeck/blerb-core/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hornbeck/blerb-core/merges", + "archive_url": "https://api.github.com/repos/hornbeck/blerb-core/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hornbeck/blerb-core/downloads", + "issues_url": "https://api.github.com/repos/hornbeck/blerb-core/issues{/number}", + "pulls_url": "https://api.github.com/repos/hornbeck/blerb-core/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hornbeck/blerb-core/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hornbeck/blerb-core/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hornbeck/blerb-core/labels{/name}", + "releases_url": "https://api.github.com/repos/hornbeck/blerb-core/releases{/id}", + "deployments_url": "https://api.github.com/repos/hornbeck/blerb-core/deployments" + }, + { + "id": 312, + "name": "django-mptt", + "full_name": "brosner/django-mptt", + "owner": { + "login": "brosner", + "id": 124, + "avatar_url": "https://avatars.githubusercontent.com/u/124?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/brosner", + "html_url": "https://github.com/brosner", + "followers_url": "https://api.github.com/users/brosner/followers", + "following_url": "https://api.github.com/users/brosner/following{/other_user}", + "gists_url": "https://api.github.com/users/brosner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brosner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brosner/subscriptions", + "organizations_url": "https://api.github.com/users/brosner/orgs", + "repos_url": "https://api.github.com/users/brosner/repos", + "events_url": "https://api.github.com/users/brosner/events{/privacy}", + "received_events_url": "https://api.github.com/users/brosner/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/brosner/django-mptt", + "description": "utilities for implementing a modified pre-order traversal tree in django", + "fork": true, + "url": "https://api.github.com/repos/brosner/django-mptt", + "forks_url": "https://api.github.com/repos/brosner/django-mptt/forks", + "keys_url": "https://api.github.com/repos/brosner/django-mptt/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/brosner/django-mptt/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/brosner/django-mptt/teams", + "hooks_url": "https://api.github.com/repos/brosner/django-mptt/hooks", + "issue_events_url": "https://api.github.com/repos/brosner/django-mptt/issues/events{/number}", + "events_url": "https://api.github.com/repos/brosner/django-mptt/events", + "assignees_url": "https://api.github.com/repos/brosner/django-mptt/assignees{/user}", + "branches_url": "https://api.github.com/repos/brosner/django-mptt/branches{/branch}", + "tags_url": "https://api.github.com/repos/brosner/django-mptt/tags", + "blobs_url": "https://api.github.com/repos/brosner/django-mptt/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/brosner/django-mptt/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/brosner/django-mptt/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/brosner/django-mptt/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/brosner/django-mptt/statuses/{sha}", + "languages_url": "https://api.github.com/repos/brosner/django-mptt/languages", + "stargazers_url": "https://api.github.com/repos/brosner/django-mptt/stargazers", + "contributors_url": "https://api.github.com/repos/brosner/django-mptt/contributors", + "subscribers_url": "https://api.github.com/repos/brosner/django-mptt/subscribers", + "subscription_url": "https://api.github.com/repos/brosner/django-mptt/subscription", + "commits_url": "https://api.github.com/repos/brosner/django-mptt/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/brosner/django-mptt/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/brosner/django-mptt/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/brosner/django-mptt/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/brosner/django-mptt/contents/{+path}", + "compare_url": "https://api.github.com/repos/brosner/django-mptt/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/brosner/django-mptt/merges", + "archive_url": "https://api.github.com/repos/brosner/django-mptt/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/brosner/django-mptt/downloads", + "issues_url": "https://api.github.com/repos/brosner/django-mptt/issues{/number}", + "pulls_url": "https://api.github.com/repos/brosner/django-mptt/pulls{/number}", + "milestones_url": "https://api.github.com/repos/brosner/django-mptt/milestones{/number}", + "notifications_url": "https://api.github.com/repos/brosner/django-mptt/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/brosner/django-mptt/labels{/name}", + "releases_url": "https://api.github.com/repos/brosner/django-mptt/releases{/id}", + "deployments_url": "https://api.github.com/repos/brosner/django-mptt/deployments" + }, + { + "id": 314, + "name": "bus-scheme", + "full_name": "technomancy/bus-scheme", + "owner": { + "login": "technomancy", + "id": 141, + "avatar_url": "https://avatars.githubusercontent.com/u/141?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/technomancy", + "html_url": "https://github.com/technomancy", + "followers_url": "https://api.github.com/users/technomancy/followers", + "following_url": "https://api.github.com/users/technomancy/following{/other_user}", + "gists_url": "https://api.github.com/users/technomancy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technomancy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technomancy/subscriptions", + "organizations_url": "https://api.github.com/users/technomancy/orgs", + "repos_url": "https://api.github.com/users/technomancy/repos", + "events_url": "https://api.github.com/users/technomancy/events{/privacy}", + "received_events_url": "https://api.github.com/users/technomancy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/technomancy/bus-scheme", + "description": "a Scheme written in Ruby, but implemented on the bus!", + "fork": false, + "url": "https://api.github.com/repos/technomancy/bus-scheme", + "forks_url": "https://api.github.com/repos/technomancy/bus-scheme/forks", + "keys_url": "https://api.github.com/repos/technomancy/bus-scheme/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/technomancy/bus-scheme/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/technomancy/bus-scheme/teams", + "hooks_url": "https://api.github.com/repos/technomancy/bus-scheme/hooks", + "issue_events_url": "https://api.github.com/repos/technomancy/bus-scheme/issues/events{/number}", + "events_url": "https://api.github.com/repos/technomancy/bus-scheme/events", + "assignees_url": "https://api.github.com/repos/technomancy/bus-scheme/assignees{/user}", + "branches_url": "https://api.github.com/repos/technomancy/bus-scheme/branches{/branch}", + "tags_url": "https://api.github.com/repos/technomancy/bus-scheme/tags", + "blobs_url": "https://api.github.com/repos/technomancy/bus-scheme/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/technomancy/bus-scheme/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/technomancy/bus-scheme/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/technomancy/bus-scheme/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/technomancy/bus-scheme/statuses/{sha}", + "languages_url": "https://api.github.com/repos/technomancy/bus-scheme/languages", + "stargazers_url": "https://api.github.com/repos/technomancy/bus-scheme/stargazers", + "contributors_url": "https://api.github.com/repos/technomancy/bus-scheme/contributors", + "subscribers_url": "https://api.github.com/repos/technomancy/bus-scheme/subscribers", + "subscription_url": "https://api.github.com/repos/technomancy/bus-scheme/subscription", + "commits_url": "https://api.github.com/repos/technomancy/bus-scheme/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/technomancy/bus-scheme/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/technomancy/bus-scheme/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/technomancy/bus-scheme/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/technomancy/bus-scheme/contents/{+path}", + "compare_url": "https://api.github.com/repos/technomancy/bus-scheme/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/technomancy/bus-scheme/merges", + "archive_url": "https://api.github.com/repos/technomancy/bus-scheme/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/technomancy/bus-scheme/downloads", + "issues_url": "https://api.github.com/repos/technomancy/bus-scheme/issues{/number}", + "pulls_url": "https://api.github.com/repos/technomancy/bus-scheme/pulls{/number}", + "milestones_url": "https://api.github.com/repos/technomancy/bus-scheme/milestones{/number}", + "notifications_url": "https://api.github.com/repos/technomancy/bus-scheme/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/technomancy/bus-scheme/labels{/name}", + "releases_url": "https://api.github.com/repos/technomancy/bus-scheme/releases{/id}", + "deployments_url": "https://api.github.com/repos/technomancy/bus-scheme/deployments" + }, + { + "id": 319, + "name": "javascript-bits", + "full_name": "Caged/javascript-bits", + "owner": { + "login": "Caged", + "id": 25, + "avatar_url": "https://avatars.githubusercontent.com/u/25?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Caged", + "html_url": "https://github.com/Caged", + "followers_url": "https://api.github.com/users/Caged/followers", + "following_url": "https://api.github.com/users/Caged/following{/other_user}", + "gists_url": "https://api.github.com/users/Caged/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Caged/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Caged/subscriptions", + "organizations_url": "https://api.github.com/users/Caged/orgs", + "repos_url": "https://api.github.com/users/Caged/repos", + "events_url": "https://api.github.com/users/Caged/events{/privacy}", + "received_events_url": "https://api.github.com/users/Caged/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/Caged/javascript-bits", + "description": "Useful pieces of JavaScript. Some old, some new.", + "fork": false, + "url": "https://api.github.com/repos/Caged/javascript-bits", + "forks_url": "https://api.github.com/repos/Caged/javascript-bits/forks", + "keys_url": "https://api.github.com/repos/Caged/javascript-bits/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Caged/javascript-bits/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Caged/javascript-bits/teams", + "hooks_url": "https://api.github.com/repos/Caged/javascript-bits/hooks", + "issue_events_url": "https://api.github.com/repos/Caged/javascript-bits/issues/events{/number}", + "events_url": "https://api.github.com/repos/Caged/javascript-bits/events", + "assignees_url": "https://api.github.com/repos/Caged/javascript-bits/assignees{/user}", + "branches_url": "https://api.github.com/repos/Caged/javascript-bits/branches{/branch}", + "tags_url": "https://api.github.com/repos/Caged/javascript-bits/tags", + "blobs_url": "https://api.github.com/repos/Caged/javascript-bits/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Caged/javascript-bits/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Caged/javascript-bits/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Caged/javascript-bits/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Caged/javascript-bits/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Caged/javascript-bits/languages", + "stargazers_url": "https://api.github.com/repos/Caged/javascript-bits/stargazers", + "contributors_url": "https://api.github.com/repos/Caged/javascript-bits/contributors", + "subscribers_url": "https://api.github.com/repos/Caged/javascript-bits/subscribers", + "subscription_url": "https://api.github.com/repos/Caged/javascript-bits/subscription", + "commits_url": "https://api.github.com/repos/Caged/javascript-bits/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Caged/javascript-bits/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Caged/javascript-bits/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Caged/javascript-bits/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Caged/javascript-bits/contents/{+path}", + "compare_url": "https://api.github.com/repos/Caged/javascript-bits/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Caged/javascript-bits/merges", + "archive_url": "https://api.github.com/repos/Caged/javascript-bits/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Caged/javascript-bits/downloads", + "issues_url": "https://api.github.com/repos/Caged/javascript-bits/issues{/number}", + "pulls_url": "https://api.github.com/repos/Caged/javascript-bits/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Caged/javascript-bits/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Caged/javascript-bits/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Caged/javascript-bits/labels{/name}", + "releases_url": "https://api.github.com/repos/Caged/javascript-bits/releases{/id}", + "deployments_url": "https://api.github.com/repos/Caged/javascript-bits/deployments" + }, + { + "id": 320, + "name": "groomlake", + "full_name": "Caged/groomlake", + "owner": { + "login": "Caged", + "id": 25, + "avatar_url": "https://avatars.githubusercontent.com/u/25?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Caged", + "html_url": "https://github.com/Caged", + "followers_url": "https://api.github.com/users/Caged/followers", + "following_url": "https://api.github.com/users/Caged/following{/other_user}", + "gists_url": "https://api.github.com/users/Caged/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Caged/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Caged/subscriptions", + "organizations_url": "https://api.github.com/users/Caged/orgs", + "repos_url": "https://api.github.com/users/Caged/repos", + "events_url": "https://api.github.com/users/Caged/events{/privacy}", + "received_events_url": "https://api.github.com/users/Caged/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/Caged/groomlake", + "description": "Ruby parsers for some Adobe file formats.", + "fork": false, + "url": "https://api.github.com/repos/Caged/groomlake", + "forks_url": "https://api.github.com/repos/Caged/groomlake/forks", + "keys_url": "https://api.github.com/repos/Caged/groomlake/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Caged/groomlake/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Caged/groomlake/teams", + "hooks_url": "https://api.github.com/repos/Caged/groomlake/hooks", + "issue_events_url": "https://api.github.com/repos/Caged/groomlake/issues/events{/number}", + "events_url": "https://api.github.com/repos/Caged/groomlake/events", + "assignees_url": "https://api.github.com/repos/Caged/groomlake/assignees{/user}", + "branches_url": "https://api.github.com/repos/Caged/groomlake/branches{/branch}", + "tags_url": "https://api.github.com/repos/Caged/groomlake/tags", + "blobs_url": "https://api.github.com/repos/Caged/groomlake/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Caged/groomlake/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Caged/groomlake/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Caged/groomlake/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Caged/groomlake/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Caged/groomlake/languages", + "stargazers_url": "https://api.github.com/repos/Caged/groomlake/stargazers", + "contributors_url": "https://api.github.com/repos/Caged/groomlake/contributors", + "subscribers_url": "https://api.github.com/repos/Caged/groomlake/subscribers", + "subscription_url": "https://api.github.com/repos/Caged/groomlake/subscription", + "commits_url": "https://api.github.com/repos/Caged/groomlake/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Caged/groomlake/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Caged/groomlake/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Caged/groomlake/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Caged/groomlake/contents/{+path}", + "compare_url": "https://api.github.com/repos/Caged/groomlake/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Caged/groomlake/merges", + "archive_url": "https://api.github.com/repos/Caged/groomlake/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Caged/groomlake/downloads", + "issues_url": "https://api.github.com/repos/Caged/groomlake/issues{/number}", + "pulls_url": "https://api.github.com/repos/Caged/groomlake/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Caged/groomlake/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Caged/groomlake/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Caged/groomlake/labels{/name}", + "releases_url": "https://api.github.com/repos/Caged/groomlake/releases{/id}", + "deployments_url": "https://api.github.com/repos/Caged/groomlake/deployments" + }, + { + "id": 322, + "name": "forgery", + "full_name": "sevenwire/forgery", + "owner": { + "login": "sevenwire", + "id": 150, + "avatar_url": "https://avatars.githubusercontent.com/u/150?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sevenwire", + "html_url": "https://github.com/sevenwire", + "followers_url": "https://api.github.com/users/sevenwire/followers", + "following_url": "https://api.github.com/users/sevenwire/following{/other_user}", + "gists_url": "https://api.github.com/users/sevenwire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sevenwire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sevenwire/subscriptions", + "organizations_url": "https://api.github.com/users/sevenwire/orgs", + "repos_url": "https://api.github.com/users/sevenwire/repos", + "events_url": "https://api.github.com/users/sevenwire/events{/privacy}", + "received_events_url": "https://api.github.com/users/sevenwire/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sevenwire/forgery", + "description": "Easy and customizable generation of forged data.", + "fork": false, + "url": "https://api.github.com/repos/sevenwire/forgery", + "forks_url": "https://api.github.com/repos/sevenwire/forgery/forks", + "keys_url": "https://api.github.com/repos/sevenwire/forgery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sevenwire/forgery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sevenwire/forgery/teams", + "hooks_url": "https://api.github.com/repos/sevenwire/forgery/hooks", + "issue_events_url": "https://api.github.com/repos/sevenwire/forgery/issues/events{/number}", + "events_url": "https://api.github.com/repos/sevenwire/forgery/events", + "assignees_url": "https://api.github.com/repos/sevenwire/forgery/assignees{/user}", + "branches_url": "https://api.github.com/repos/sevenwire/forgery/branches{/branch}", + "tags_url": "https://api.github.com/repos/sevenwire/forgery/tags", + "blobs_url": "https://api.github.com/repos/sevenwire/forgery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sevenwire/forgery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sevenwire/forgery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sevenwire/forgery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sevenwire/forgery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sevenwire/forgery/languages", + "stargazers_url": "https://api.github.com/repos/sevenwire/forgery/stargazers", + "contributors_url": "https://api.github.com/repos/sevenwire/forgery/contributors", + "subscribers_url": "https://api.github.com/repos/sevenwire/forgery/subscribers", + "subscription_url": "https://api.github.com/repos/sevenwire/forgery/subscription", + "commits_url": "https://api.github.com/repos/sevenwire/forgery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sevenwire/forgery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sevenwire/forgery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sevenwire/forgery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sevenwire/forgery/contents/{+path}", + "compare_url": "https://api.github.com/repos/sevenwire/forgery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sevenwire/forgery/merges", + "archive_url": "https://api.github.com/repos/sevenwire/forgery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sevenwire/forgery/downloads", + "issues_url": "https://api.github.com/repos/sevenwire/forgery/issues{/number}", + "pulls_url": "https://api.github.com/repos/sevenwire/forgery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sevenwire/forgery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sevenwire/forgery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sevenwire/forgery/labels{/name}", + "releases_url": "https://api.github.com/repos/sevenwire/forgery/releases{/id}", + "deployments_url": "https://api.github.com/repos/sevenwire/forgery/deployments" + }, + { + "id": 324, + "name": "ambitious-sphinx", + "full_name": "technicalpickles/ambitious-sphinx", + "owner": { + "login": "technicalpickles", + "id": 159, + "avatar_url": "https://avatars.githubusercontent.com/u/159?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/technicalpickles", + "html_url": "https://github.com/technicalpickles", + "followers_url": "https://api.github.com/users/technicalpickles/followers", + "following_url": "https://api.github.com/users/technicalpickles/following{/other_user}", + "gists_url": "https://api.github.com/users/technicalpickles/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technicalpickles/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technicalpickles/subscriptions", + "organizations_url": "https://api.github.com/users/technicalpickles/orgs", + "repos_url": "https://api.github.com/users/technicalpickles/repos", + "events_url": "https://api.github.com/users/technicalpickles/events{/privacy}", + "received_events_url": "https://api.github.com/users/technicalpickles/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/technicalpickles/ambitious-sphinx", + "description": "Ambition adapter for Sphinx", + "fork": false, + "url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx", + "forks_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/forks", + "keys_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/teams", + "hooks_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/hooks", + "issue_events_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/issues/events{/number}", + "events_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/events", + "assignees_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/assignees{/user}", + "branches_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/branches{/branch}", + "tags_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/tags", + "blobs_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/statuses/{sha}", + "languages_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/languages", + "stargazers_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/stargazers", + "contributors_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/contributors", + "subscribers_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/subscribers", + "subscription_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/subscription", + "commits_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/contents/{+path}", + "compare_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/merges", + "archive_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/downloads", + "issues_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/issues{/number}", + "pulls_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/pulls{/number}", + "milestones_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/milestones{/number}", + "notifications_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/labels{/name}", + "releases_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/releases{/id}", + "deployments_url": "https://api.github.com/repos/technicalpickles/ambitious-sphinx/deployments" + }, + { + "id": 329, + "name": "soup", + "full_name": "lazyatom/soup", + "owner": { + "login": "lazyatom", + "id": 145, + "avatar_url": "https://avatars.githubusercontent.com/u/145?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lazyatom", + "html_url": "https://github.com/lazyatom", + "followers_url": "https://api.github.com/users/lazyatom/followers", + "following_url": "https://api.github.com/users/lazyatom/following{/other_user}", + "gists_url": "https://api.github.com/users/lazyatom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lazyatom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lazyatom/subscriptions", + "organizations_url": "https://api.github.com/users/lazyatom/orgs", + "repos_url": "https://api.github.com/users/lazyatom/repos", + "events_url": "https://api.github.com/users/lazyatom/events{/privacy}", + "received_events_url": "https://api.github.com/users/lazyatom/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lazyatom/soup", + "description": "I suppose it's a document database. Or a tuple store. But really, it's just data sloshing around, waiting to be used.", + "fork": false, + "url": "https://api.github.com/repos/lazyatom/soup", + "forks_url": "https://api.github.com/repos/lazyatom/soup/forks", + "keys_url": "https://api.github.com/repos/lazyatom/soup/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lazyatom/soup/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lazyatom/soup/teams", + "hooks_url": "https://api.github.com/repos/lazyatom/soup/hooks", + "issue_events_url": "https://api.github.com/repos/lazyatom/soup/issues/events{/number}", + "events_url": "https://api.github.com/repos/lazyatom/soup/events", + "assignees_url": "https://api.github.com/repos/lazyatom/soup/assignees{/user}", + "branches_url": "https://api.github.com/repos/lazyatom/soup/branches{/branch}", + "tags_url": "https://api.github.com/repos/lazyatom/soup/tags", + "blobs_url": "https://api.github.com/repos/lazyatom/soup/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lazyatom/soup/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lazyatom/soup/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lazyatom/soup/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lazyatom/soup/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lazyatom/soup/languages", + "stargazers_url": "https://api.github.com/repos/lazyatom/soup/stargazers", + "contributors_url": "https://api.github.com/repos/lazyatom/soup/contributors", + "subscribers_url": "https://api.github.com/repos/lazyatom/soup/subscribers", + "subscription_url": "https://api.github.com/repos/lazyatom/soup/subscription", + "commits_url": "https://api.github.com/repos/lazyatom/soup/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lazyatom/soup/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lazyatom/soup/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lazyatom/soup/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lazyatom/soup/contents/{+path}", + "compare_url": "https://api.github.com/repos/lazyatom/soup/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lazyatom/soup/merges", + "archive_url": "https://api.github.com/repos/lazyatom/soup/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lazyatom/soup/downloads", + "issues_url": "https://api.github.com/repos/lazyatom/soup/issues{/number}", + "pulls_url": "https://api.github.com/repos/lazyatom/soup/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lazyatom/soup/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lazyatom/soup/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lazyatom/soup/labels{/name}", + "releases_url": "https://api.github.com/repos/lazyatom/soup/releases{/id}", + "deployments_url": "https://api.github.com/repos/lazyatom/soup/deployments" + }, + { + "id": 332, + "name": "rails", + "full_name": "josh/rails", + "owner": { + "login": "josh", + "id": 137, + "avatar_url": "https://avatars.githubusercontent.com/u/137?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/josh", + "html_url": "https://github.com/josh", + "followers_url": "https://api.github.com/users/josh/followers", + "following_url": "https://api.github.com/users/josh/following{/other_user}", + "gists_url": "https://api.github.com/users/josh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/josh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/josh/subscriptions", + "organizations_url": "https://api.github.com/users/josh/orgs", + "repos_url": "https://api.github.com/users/josh/repos", + "events_url": "https://api.github.com/users/josh/events{/privacy}", + "received_events_url": "https://api.github.com/users/josh/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/josh/rails", + "description": "Ruby on Rails", + "fork": true, + "url": "https://api.github.com/repos/josh/rails", + "forks_url": "https://api.github.com/repos/josh/rails/forks", + "keys_url": "https://api.github.com/repos/josh/rails/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/josh/rails/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/josh/rails/teams", + "hooks_url": "https://api.github.com/repos/josh/rails/hooks", + "issue_events_url": "https://api.github.com/repos/josh/rails/issues/events{/number}", + "events_url": "https://api.github.com/repos/josh/rails/events", + "assignees_url": "https://api.github.com/repos/josh/rails/assignees{/user}", + "branches_url": "https://api.github.com/repos/josh/rails/branches{/branch}", + "tags_url": "https://api.github.com/repos/josh/rails/tags", + "blobs_url": "https://api.github.com/repos/josh/rails/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/josh/rails/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/josh/rails/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/josh/rails/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/josh/rails/statuses/{sha}", + "languages_url": "https://api.github.com/repos/josh/rails/languages", + "stargazers_url": "https://api.github.com/repos/josh/rails/stargazers", + "contributors_url": "https://api.github.com/repos/josh/rails/contributors", + "subscribers_url": "https://api.github.com/repos/josh/rails/subscribers", + "subscription_url": "https://api.github.com/repos/josh/rails/subscription", + "commits_url": "https://api.github.com/repos/josh/rails/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/josh/rails/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/josh/rails/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/josh/rails/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/josh/rails/contents/{+path}", + "compare_url": "https://api.github.com/repos/josh/rails/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/josh/rails/merges", + "archive_url": "https://api.github.com/repos/josh/rails/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/josh/rails/downloads", + "issues_url": "https://api.github.com/repos/josh/rails/issues{/number}", + "pulls_url": "https://api.github.com/repos/josh/rails/pulls{/number}", + "milestones_url": "https://api.github.com/repos/josh/rails/milestones{/number}", + "notifications_url": "https://api.github.com/repos/josh/rails/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/josh/rails/labels{/name}", + "releases_url": "https://api.github.com/repos/josh/rails/releases{/id}", + "deployments_url": "https://api.github.com/repos/josh/rails/deployments" + }, + { + "id": 334, + "name": "backpacking", + "full_name": "cdcarter/backpacking", + "owner": { + "login": "cdcarter", + "id": 164, + "avatar_url": "https://avatars.githubusercontent.com/u/164?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cdcarter", + "html_url": "https://github.com/cdcarter", + "followers_url": "https://api.github.com/users/cdcarter/followers", + "following_url": "https://api.github.com/users/cdcarter/following{/other_user}", + "gists_url": "https://api.github.com/users/cdcarter/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cdcarter/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cdcarter/subscriptions", + "organizations_url": "https://api.github.com/users/cdcarter/orgs", + "repos_url": "https://api.github.com/users/cdcarter/repos", + "events_url": "https://api.github.com/users/cdcarter/events{/privacy}", + "received_events_url": "https://api.github.com/users/cdcarter/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cdcarter/backpacking", + "description": "An Io web framework of sorts", + "fork": false, + "url": "https://api.github.com/repos/cdcarter/backpacking", + "forks_url": "https://api.github.com/repos/cdcarter/backpacking/forks", + "keys_url": "https://api.github.com/repos/cdcarter/backpacking/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cdcarter/backpacking/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cdcarter/backpacking/teams", + "hooks_url": "https://api.github.com/repos/cdcarter/backpacking/hooks", + "issue_events_url": "https://api.github.com/repos/cdcarter/backpacking/issues/events{/number}", + "events_url": "https://api.github.com/repos/cdcarter/backpacking/events", + "assignees_url": "https://api.github.com/repos/cdcarter/backpacking/assignees{/user}", + "branches_url": "https://api.github.com/repos/cdcarter/backpacking/branches{/branch}", + "tags_url": "https://api.github.com/repos/cdcarter/backpacking/tags", + "blobs_url": "https://api.github.com/repos/cdcarter/backpacking/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cdcarter/backpacking/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cdcarter/backpacking/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cdcarter/backpacking/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cdcarter/backpacking/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cdcarter/backpacking/languages", + "stargazers_url": "https://api.github.com/repos/cdcarter/backpacking/stargazers", + "contributors_url": "https://api.github.com/repos/cdcarter/backpacking/contributors", + "subscribers_url": "https://api.github.com/repos/cdcarter/backpacking/subscribers", + "subscription_url": "https://api.github.com/repos/cdcarter/backpacking/subscription", + "commits_url": "https://api.github.com/repos/cdcarter/backpacking/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cdcarter/backpacking/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cdcarter/backpacking/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cdcarter/backpacking/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cdcarter/backpacking/contents/{+path}", + "compare_url": "https://api.github.com/repos/cdcarter/backpacking/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cdcarter/backpacking/merges", + "archive_url": "https://api.github.com/repos/cdcarter/backpacking/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cdcarter/backpacking/downloads", + "issues_url": "https://api.github.com/repos/cdcarter/backpacking/issues{/number}", + "pulls_url": "https://api.github.com/repos/cdcarter/backpacking/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cdcarter/backpacking/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cdcarter/backpacking/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cdcarter/backpacking/labels{/name}", + "releases_url": "https://api.github.com/repos/cdcarter/backpacking/releases{/id}", + "deployments_url": "https://api.github.com/repos/cdcarter/backpacking/deployments" + }, + { + "id": 339, + "name": "capsize", + "full_name": "jnewland/capsize", + "owner": { + "login": "jnewland", + "id": 47, + "avatar_url": "https://avatars.githubusercontent.com/u/47?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jnewland", + "html_url": "https://github.com/jnewland", + "followers_url": "https://api.github.com/users/jnewland/followers", + "following_url": "https://api.github.com/users/jnewland/following{/other_user}", + "gists_url": "https://api.github.com/users/jnewland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jnewland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jnewland/subscriptions", + "organizations_url": "https://api.github.com/users/jnewland/orgs", + "repos_url": "https://api.github.com/users/jnewland/repos", + "events_url": "https://api.github.com/users/jnewland/events{/privacy}", + "received_events_url": "https://api.github.com/users/jnewland/received_events", + "type": "User", + "site_admin": true + }, + "private": false, + "html_url": "https://github.com/jnewland/capsize", + "description": "A Capistrano extension for managing and running your app on Amazon EC2.", + "fork": false, + "url": "https://api.github.com/repos/jnewland/capsize", + "forks_url": "https://api.github.com/repos/jnewland/capsize/forks", + "keys_url": "https://api.github.com/repos/jnewland/capsize/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jnewland/capsize/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jnewland/capsize/teams", + "hooks_url": "https://api.github.com/repos/jnewland/capsize/hooks", + "issue_events_url": "https://api.github.com/repos/jnewland/capsize/issues/events{/number}", + "events_url": "https://api.github.com/repos/jnewland/capsize/events", + "assignees_url": "https://api.github.com/repos/jnewland/capsize/assignees{/user}", + "branches_url": "https://api.github.com/repos/jnewland/capsize/branches{/branch}", + "tags_url": "https://api.github.com/repos/jnewland/capsize/tags", + "blobs_url": "https://api.github.com/repos/jnewland/capsize/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jnewland/capsize/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jnewland/capsize/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jnewland/capsize/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jnewland/capsize/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jnewland/capsize/languages", + "stargazers_url": "https://api.github.com/repos/jnewland/capsize/stargazers", + "contributors_url": "https://api.github.com/repos/jnewland/capsize/contributors", + "subscribers_url": "https://api.github.com/repos/jnewland/capsize/subscribers", + "subscription_url": "https://api.github.com/repos/jnewland/capsize/subscription", + "commits_url": "https://api.github.com/repos/jnewland/capsize/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jnewland/capsize/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jnewland/capsize/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jnewland/capsize/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jnewland/capsize/contents/{+path}", + "compare_url": "https://api.github.com/repos/jnewland/capsize/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jnewland/capsize/merges", + "archive_url": "https://api.github.com/repos/jnewland/capsize/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jnewland/capsize/downloads", + "issues_url": "https://api.github.com/repos/jnewland/capsize/issues{/number}", + "pulls_url": "https://api.github.com/repos/jnewland/capsize/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jnewland/capsize/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jnewland/capsize/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jnewland/capsize/labels{/name}", + "releases_url": "https://api.github.com/repos/jnewland/capsize/releases{/id}", + "deployments_url": "https://api.github.com/repos/jnewland/capsize/deployments" + }, + { + "id": 351, + "name": "starling", + "full_name": "bs/starling", + "owner": { + "login": "bs", + "id": 68, + "avatar_url": "https://avatars.githubusercontent.com/u/68?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bs", + "html_url": "https://github.com/bs", + "followers_url": "https://api.github.com/users/bs/followers", + "following_url": "https://api.github.com/users/bs/following{/other_user}", + "gists_url": "https://api.github.com/users/bs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bs/subscriptions", + "organizations_url": "https://api.github.com/users/bs/orgs", + "repos_url": "https://api.github.com/users/bs/repos", + "events_url": "https://api.github.com/users/bs/events{/privacy}", + "received_events_url": "https://api.github.com/users/bs/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bs/starling", + "description": "Starling Message Queue", + "fork": false, + "url": "https://api.github.com/repos/bs/starling", + "forks_url": "https://api.github.com/repos/bs/starling/forks", + "keys_url": "https://api.github.com/repos/bs/starling/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bs/starling/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bs/starling/teams", + "hooks_url": "https://api.github.com/repos/bs/starling/hooks", + "issue_events_url": "https://api.github.com/repos/bs/starling/issues/events{/number}", + "events_url": "https://api.github.com/repos/bs/starling/events", + "assignees_url": "https://api.github.com/repos/bs/starling/assignees{/user}", + "branches_url": "https://api.github.com/repos/bs/starling/branches{/branch}", + "tags_url": "https://api.github.com/repos/bs/starling/tags", + "blobs_url": "https://api.github.com/repos/bs/starling/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bs/starling/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bs/starling/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bs/starling/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bs/starling/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bs/starling/languages", + "stargazers_url": "https://api.github.com/repos/bs/starling/stargazers", + "contributors_url": "https://api.github.com/repos/bs/starling/contributors", + "subscribers_url": "https://api.github.com/repos/bs/starling/subscribers", + "subscription_url": "https://api.github.com/repos/bs/starling/subscription", + "commits_url": "https://api.github.com/repos/bs/starling/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bs/starling/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bs/starling/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bs/starling/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bs/starling/contents/{+path}", + "compare_url": "https://api.github.com/repos/bs/starling/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bs/starling/merges", + "archive_url": "https://api.github.com/repos/bs/starling/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bs/starling/downloads", + "issues_url": "https://api.github.com/repos/bs/starling/issues{/number}", + "pulls_url": "https://api.github.com/repos/bs/starling/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bs/starling/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bs/starling/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bs/starling/labels{/name}", + "releases_url": "https://api.github.com/repos/bs/starling/releases{/id}", + "deployments_url": "https://api.github.com/repos/bs/starling/deployments" + }, + { + "id": 360, + "name": "ape", + "full_name": "sr/ape", + "owner": { + "login": "sr", + "id": 90, + "avatar_url": "https://avatars.githubusercontent.com/u/90?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sr", + "html_url": "https://github.com/sr", + "followers_url": "https://api.github.com/users/sr/followers", + "following_url": "https://api.github.com/users/sr/following{/other_user}", + "gists_url": "https://api.github.com/users/sr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sr/subscriptions", + "organizations_url": "https://api.github.com/users/sr/orgs", + "repos_url": "https://api.github.com/users/sr/repos", + "events_url": "https://api.github.com/users/sr/events{/privacy}", + "received_events_url": "https://api.github.com/users/sr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sr/ape", + "description": "The Atom Protocol Exerciser", + "fork": false, + "url": "https://api.github.com/repos/sr/ape", + "forks_url": "https://api.github.com/repos/sr/ape/forks", + "keys_url": "https://api.github.com/repos/sr/ape/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sr/ape/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sr/ape/teams", + "hooks_url": "https://api.github.com/repos/sr/ape/hooks", + "issue_events_url": "https://api.github.com/repos/sr/ape/issues/events{/number}", + "events_url": "https://api.github.com/repos/sr/ape/events", + "assignees_url": "https://api.github.com/repos/sr/ape/assignees{/user}", + "branches_url": "https://api.github.com/repos/sr/ape/branches{/branch}", + "tags_url": "https://api.github.com/repos/sr/ape/tags", + "blobs_url": "https://api.github.com/repos/sr/ape/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sr/ape/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sr/ape/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sr/ape/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sr/ape/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sr/ape/languages", + "stargazers_url": "https://api.github.com/repos/sr/ape/stargazers", + "contributors_url": "https://api.github.com/repos/sr/ape/contributors", + "subscribers_url": "https://api.github.com/repos/sr/ape/subscribers", + "subscription_url": "https://api.github.com/repos/sr/ape/subscription", + "commits_url": "https://api.github.com/repos/sr/ape/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sr/ape/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sr/ape/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sr/ape/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sr/ape/contents/{+path}", + "compare_url": "https://api.github.com/repos/sr/ape/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sr/ape/merges", + "archive_url": "https://api.github.com/repos/sr/ape/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sr/ape/downloads", + "issues_url": "https://api.github.com/repos/sr/ape/issues{/number}", + "pulls_url": "https://api.github.com/repos/sr/ape/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sr/ape/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sr/ape/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sr/ape/labels{/name}", + "releases_url": "https://api.github.com/repos/sr/ape/releases{/id}", + "deployments_url": "https://api.github.com/repos/sr/ape/deployments" + }, + { + "id": 362, + "name": "awesomeness", + "full_name": "collectiveidea/awesomeness", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/awesomeness", + "description": "Collective Idea's Awesomeness. A collection of useful Rails bits and pieces.", + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/awesomeness", + "forks_url": "https://api.github.com/repos/collectiveidea/awesomeness/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/awesomeness/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/awesomeness/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/awesomeness/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/awesomeness/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/awesomeness/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/awesomeness/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/awesomeness/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/awesomeness/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/awesomeness/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/awesomeness/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/awesomeness/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/awesomeness/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/awesomeness/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/awesomeness/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/awesomeness/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/awesomeness/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/awesomeness/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/awesomeness/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/awesomeness/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/awesomeness/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/awesomeness/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/awesomeness/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/awesomeness/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/awesomeness/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/awesomeness/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/awesomeness/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/awesomeness/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/awesomeness/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/awesomeness/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/awesomeness/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/awesomeness/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/awesomeness/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/awesomeness/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/awesomeness/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/awesomeness/deployments" + }, + { + "id": 363, + "name": "audited", + "full_name": "collectiveidea/audited", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/audited", + "description": "Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.", + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/audited", + "forks_url": "https://api.github.com/repos/collectiveidea/audited/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/audited/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/audited/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/audited/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/audited/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/audited/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/audited/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/audited/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/audited/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/audited/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/audited/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/audited/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/audited/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/audited/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/audited/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/audited/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/audited/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/audited/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/audited/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/audited/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/audited/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/audited/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/audited/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/audited/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/audited/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/audited/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/audited/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/audited/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/audited/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/audited/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/audited/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/audited/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/audited/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/audited/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/audited/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/audited/deployments" + }, + { + "id": 364, + "name": "acts_as_geocodable", + "full_name": "collectiveidea/acts_as_geocodable", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/acts_as_geocodable", + "description": "Simple geocoding for Active Record models", + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable", + "forks_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/acts_as_geocodable/deployments" + }, + { + "id": 365, + "name": "acts_as_money", + "full_name": "collectiveidea/acts_as_money", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/acts_as_money", + "description": "an Active Record plugin that makes it easier to work with the money gem", + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/acts_as_money", + "forks_url": "https://api.github.com/repos/collectiveidea/acts_as_money/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/acts_as_money/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/acts_as_money/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/acts_as_money/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/acts_as_money/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/acts_as_money/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/acts_as_money/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/acts_as_money/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/acts_as_money/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/acts_as_money/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/acts_as_money/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/acts_as_money/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/acts_as_money/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/acts_as_money/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/acts_as_money/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/acts_as_money/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/acts_as_money/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/acts_as_money/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/acts_as_money/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/acts_as_money/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/acts_as_money/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/acts_as_money/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/acts_as_money/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/acts_as_money/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/acts_as_money/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/acts_as_money/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/acts_as_money/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/acts_as_money/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/acts_as_money/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/acts_as_money/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/acts_as_money/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/acts_as_money/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/acts_as_money/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/acts_as_money/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/acts_as_money/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/acts_as_money/deployments" + }, + { + "id": 367, + "name": "calendar_builder", + "full_name": "collectiveidea/calendar_builder", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/calendar_builder", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/calendar_builder", + "forks_url": "https://api.github.com/repos/collectiveidea/calendar_builder/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/calendar_builder/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/calendar_builder/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/calendar_builder/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/calendar_builder/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/calendar_builder/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/calendar_builder/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/calendar_builder/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/calendar_builder/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/calendar_builder/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/calendar_builder/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/calendar_builder/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/calendar_builder/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/calendar_builder/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/calendar_builder/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/calendar_builder/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/calendar_builder/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/calendar_builder/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/calendar_builder/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/calendar_builder/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/calendar_builder/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/calendar_builder/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/calendar_builder/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/calendar_builder/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/calendar_builder/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/calendar_builder/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/calendar_builder/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/calendar_builder/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/calendar_builder/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/calendar_builder/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/calendar_builder/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/calendar_builder/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/calendar_builder/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/calendar_builder/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/calendar_builder/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/calendar_builder/deployments" + }, + { + "id": 368, + "name": "clear_empty_attributes", + "full_name": "collectiveidea/clear_empty_attributes", + "owner": { + "login": "collectiveidea", + "id": 128, + "avatar_url": "https://avatars.githubusercontent.com/u/128?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/collectiveidea", + "html_url": "https://github.com/collectiveidea", + "followers_url": "https://api.github.com/users/collectiveidea/followers", + "following_url": "https://api.github.com/users/collectiveidea/following{/other_user}", + "gists_url": "https://api.github.com/users/collectiveidea/gists{/gist_id}", + "starred_url": "https://api.github.com/users/collectiveidea/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/collectiveidea/subscriptions", + "organizations_url": "https://api.github.com/users/collectiveidea/orgs", + "repos_url": "https://api.github.com/users/collectiveidea/repos", + "events_url": "https://api.github.com/users/collectiveidea/events{/privacy}", + "received_events_url": "https://api.github.com/users/collectiveidea/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/collectiveidea/clear_empty_attributes", + "description": "When Active Record objects are saved from a form, empty fields are saved as empty strings instead of nil. This kills most validations.", + "fork": false, + "url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes", + "forks_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/forks", + "keys_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/teams", + "hooks_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/hooks", + "issue_events_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/issues/events{/number}", + "events_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/events", + "assignees_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/assignees{/user}", + "branches_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/branches{/branch}", + "tags_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/tags", + "blobs_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/statuses/{sha}", + "languages_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/languages", + "stargazers_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/stargazers", + "contributors_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/contributors", + "subscribers_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/subscribers", + "subscription_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/subscription", + "commits_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/contents/{+path}", + "compare_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/merges", + "archive_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/downloads", + "issues_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/issues{/number}", + "pulls_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/pulls{/number}", + "milestones_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/milestones{/number}", + "notifications_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/labels{/name}", + "releases_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/releases{/id}", + "deployments_url": "https://api.github.com/repos/collectiveidea/clear_empty_attributes/deployments" + } +] diff --git a/swh/lister/github/tests/test_gh_lister.py b/swh/lister/github/tests/test_gh_lister.py new file mode 100644 --- /dev/null +++ b/swh/lister/github/tests/test_gh_lister.py @@ -0,0 +1,46 @@ +# Copyright (C) 2017 the Software Heritage developers +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import re +import unittest +from datetime import datetime, timedelta + +from swh.lister.core.tests.test_lister import IndexingHttpListerTesterBase +from swh.lister.github.lister import GitHubLister + + +class GitHubListerTester(IndexingHttpListerTesterBase, unittest.TestCase): + Lister = GitHubLister + test_re = re.compile(r'/repositories\?since=([^?&]+)') + lister_subdir = 'github' + good_api_response_file = 'api_response.json' + bad_api_response_file = 'api_empty_response.json' + first_index = 26 + last_index = 368 + entries_per_page = 100 + + def response_headers(self, request): + headers = {'X-RateLimit-Remaining': '1'} + if self.request_index(request) == str(self.first_index): + headers.update({ + 'Link': ';' + ' rel="next",' + ';' + ' rel="first"' + }) + else: + headers.update({ + 'Link': ';' + ' rel="first"' + }) + + return headers + + def mock_rate_quota(self, n, request, context): + self.rate_limit += 1 + context.status_code = 403 + context.headers['X-RateLimit-Remaining'] = '0' + one_second = int((datetime.now() + timedelta(seconds=1.5)).timestamp()) + context.headers['X-RateLimit-Reset'] = str(one_second) + return '{"error":"dummy"}'