hubba 0.5.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,47 @@
1
+ module Hubba
2
+
3
+ def self.update_stats( hash_or_path='./repos.yml' ) ## move to reposet e.g. Reposet#update_status!!!!
4
+ h = if hash_or_path.is_a?( String ) ## assume it is a file path!!!
5
+ path = hash_or_path
6
+ YAML.load_file( path )
7
+ else
8
+ hash_or_path # assume its a hash / reposet already!!!
9
+ end
10
+
11
+ gh = Github.new
12
+
13
+ h.each do |org_with_counter,names|
14
+
15
+ ## remove optional number from key e.g.
16
+ ## mrhydescripts (3) => mrhydescripts
17
+ ## footballjs (4) => footballjs
18
+ ## etc.
19
+ org = org_with_counter.sub( /\([0-9]+\)/, '' ).strip
20
+
21
+ ## puts " -- #{key_with_counter} [#{key}] --"
22
+
23
+ names.each do |name|
24
+ full_name = "#{org}/#{name}"
25
+
26
+ ## puts " fetching stats #{count+1}/#{repo_count} - >#{full_name}<..."
27
+ stats = Stats.new( full_name )
28
+ stats.read
29
+
30
+ puts "update >#{full_name}< [1/4] - fetching repo..."
31
+ repo = gh.repo( full_name )
32
+ puts "update >#{full_name}< [2/4] - fetching repo commits ..."
33
+ commits = gh.repo_commits( full_name )
34
+ puts "update >#{full_name}< [3/4] - fetching repo topics ..."
35
+ topics = gh.repo_topics( full_name )
36
+ puts "update >#{full_name}< [4/4] - fetching repo languages ..."
37
+ languages = gh.repo_languages( full_name )
38
+
39
+ stats.update( repo,
40
+ commits: commits,
41
+ topics: topics,
42
+ languages: languages )
43
+ stats.write
44
+ end
45
+ end
46
+ end
47
+ end # module Hubba
@@ -0,0 +1,52 @@
1
+ module Hubba
2
+
3
+
4
+ ###
5
+ ## note: keep update traffic separate from update (basic) stats
6
+ ## traffic stats require (personal access) token with push access!!
7
+
8
+ def self.update_traffic( hash_or_path='./repos.yml' ) ## move to reposet e.g. Reposet#update_status!!!!
9
+ h = if hash_or_path.is_a?( String ) ## assume it is a file path!!!
10
+ path = hash_or_path
11
+ YAML.load_file( path )
12
+ else
13
+ hash_or_path # assume its a hash / reposet already!!!
14
+ end
15
+
16
+ gh = Github.new
17
+
18
+ h.each do |org_with_counter,names|
19
+
20
+ ## remove optional number from key e.g.
21
+ ## mrhydescripts (3) => mrhydescripts
22
+ ## footballjs (4) => footballjs
23
+ ## etc.
24
+ org = org_with_counter.sub( /\([0-9]+\)/, '' ).strip
25
+
26
+ ## puts " -- #{key_with_counter} [#{key}] --"
27
+
28
+ names.each do |name|
29
+ full_name = "#{org}/#{name}"
30
+
31
+ ## puts " fetching stats #{count+1}/#{repo_count} - >#{full_name}<..."
32
+ stats = Stats.new( full_name )
33
+ stats.read
34
+
35
+ puts "update >#{full_name}< [1/4] - fetching repo traffic clones..."
36
+ clones = gh.repo_traffic_clones( full_name )
37
+ puts "update >#{full_name}< [2/4] - fetching repo traffic views..."
38
+ views = gh.repo_traffic_views( full_name )
39
+ puts "update >#{full_name}< [3/4] - fetching repo traffic popular paths..."
40
+ paths = gh.repo_traffic_popular_paths( full_name )
41
+ puts "update >#{full_name}< [4/4] - fetching repo traffic popular referrers..."
42
+ referrers = gh.repo_traffic_popular_referrers( full_name )
43
+
44
+ stats.update_traffic( clones: clones,
45
+ views: views,
46
+ paths: paths,
47
+ referrers: referrers )
48
+ stats.write
49
+ end
50
+ end
51
+ end
52
+ end # module Hubba
@@ -1,7 +1,7 @@
1
1
  module Hubba
2
- MAJOR = 0 ## todo: namespace inside version or something - why? why not??
3
- MINOR = 5
4
- PATCH = 2
2
+ MAJOR = 1 ## todo: namespace inside version or something - why? why not??
3
+ MINOR = 0
4
+ PATCH = 0
5
5
  VERSION = [MAJOR,MINOR,PATCH].join('.')
6
6
 
7
7
  def self.version
@@ -12,10 +12,20 @@ class TestConfig < MiniTest::Test
12
12
  Hubba.configure do |config|
13
13
  config.user = 'user1'
14
14
  config.password = 'password1'
15
+ # -or-
16
+ config.token = 'token1'
15
17
  end
16
18
 
17
19
  assert_equal 'user1', Hubba.configuration.user
18
20
  assert_equal 'password1', Hubba.configuration.password
21
+ assert_equal 'token1', Hubba.configuration.token
22
+
23
+ assert_equal 'user1', Hubba.config.user
24
+ assert_equal 'password1', Hubba.config.password
25
+ assert_equal 'token1', Hubba.config.token
26
+
27
+ assert_equal './data', Hubba.configuration.data_dir
28
+ assert_equal './data', Hubba.config.data_dir
19
29
  end
20
30
 
21
31
  end # class TestConfig
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-07 00:00:00.000000000 Z
11
+ date: 2020-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webclient
@@ -72,22 +72,15 @@ files:
72
72
  - README.md
73
73
  - Rakefile
74
74
  - lib/hubba.rb
75
- - lib/hubba/cache.rb
76
- - lib/hubba/client.rb
75
+ - lib/hubba/config.rb
77
76
  - lib/hubba/github.rb
77
+ - lib/hubba/reposet.rb
78
78
  - lib/hubba/stats.rb
79
+ - lib/hubba/update.rb
80
+ - lib/hubba/update_traffic.rb
79
81
  - lib/hubba/version.rb
80
- - test/cache/users~geraldb~orgs.json
81
- - test/cache/users~geraldb~repos.json
82
82
  - test/helper.rb
83
- - test/stats/jekyll~minima.json
84
- - test/stats/openblockchains~awesome-blockchains.json
85
- - test/stats/opendatajson~factbook.json.json
86
- - test/stats/poole~hyde.json
87
- - test/test_cache.rb
88
83
  - test/test_config.rb
89
- - test/test_stats.rb
90
- - test/test_stats_tmp.rb
91
84
  homepage: https://github.com/rubycoco/git
92
85
  licenses:
93
86
  - Public Domain
@@ -1,61 +0,0 @@
1
- module Hubba
2
-
3
- class Cache ## lets you work with GitHub api "offline" using just a local cache of stored json
4
-
5
- def initialize( dir )
6
- @dir = dir
7
- end
8
-
9
- ## fix/todo: cut of query string e.g. ?per_page=100 why? why not?
10
- def get( request_uri )
11
- ## check if request_uri exists in local cache
12
- basename = request_uri_to_basename( request_uri )
13
- path = "#{@dir}/#{basename}.json"
14
- if File.exist?( path )
15
- text = File.open( path, 'r:utf-8') { |f| f.read }
16
- json = JSON.parse( text )
17
- json
18
- else
19
- nil ## todo/fix: raise exception - why? why not??
20
- end
21
- end
22
-
23
- def put( request_uri, obj )
24
- basename = request_uri_to_basename( request_uri )
25
- path = "#{@dir}/#{basename}.json"
26
-
27
- if obj.is_a?( Resource ) ## note: for convenience support Resource obj too
28
- data = obj.data
29
- else
30
- data = obj # assume Hash or Array -- todo: add support for String - why? why not??
31
- end
32
-
33
- File.open( path, 'w:utf-8' ) do |f|
34
- f.write( JSON.pretty_generate( data ))
35
- end
36
- end
37
-
38
-
39
- def request_uri_to_basename( request_uri )
40
- ## 1) cut off leading /
41
- ## 2) convert / to ~
42
- ## 3) remove (optional) query string (for now) - why? why not?
43
- ## e.g. /users/#{name}/orgs?per_page=100 or such
44
- ##
45
- ## e.g.
46
- ## '/users/geraldb' => 'users~geraldb',
47
- ## '/users/geraldb/repos' => 'users~geraldb~repos',
48
- ## '/users/geraldb/orgs' => 'users~geraldb~orgs',
49
- ## '/orgs/wikiscript/repos' => 'orgs~wikiscript~repos',
50
- ## '/orgs/planetjekyll/repos' => 'orgs~planetjekyll~repos',
51
- ## '/orgs/vienna-rb/repos' => 'orgs~vienna~rb.repos',
52
-
53
- basename = request_uri[1..-1]
54
- basename = basename.gsub( '/', '~')
55
- basename = basename.sub( /\?.*\z/, '' ) ## note: must escape ? (use \z for $)
56
- basename
57
- end
58
-
59
- end ## class Cache
60
-
61
- end ## module Hubba
@@ -1,82 +0,0 @@
1
- module Hubba
2
-
3
-
4
- class Client
5
-
6
- BASE_URL = 'https://api.github.com'
7
-
8
-
9
- def initialize( token: nil,
10
- user: nil, password: nil )
11
- ## add support for (personal access) token
12
- @token = token
13
-
14
- ## add support for basic auth - defaults to no auth (nil/nil)
15
- ## remove - deprecated (use token) - why? why not?
16
- @user = user ## use login like Oktokit - why? why not?
17
- @password = password
18
- end # method initialize
19
-
20
-
21
-
22
- def get( request_uri )
23
- puts "GET #{request_uri}"
24
-
25
- ## note: request_uri ALWAYS starts with leading /, thus use + for now!!!
26
- # e.g. /users/geraldb
27
- # /users/geraldb/repos
28
- url = BASE_URL + request_uri
29
-
30
- headers = {}
31
- headers['User-Agent'] = 'ruby/hubba' ## required by GitHub API
32
- headers['Accept'] = 'application/vnd.github.v3+json' ## recommend by GitHub API
33
-
34
- auth = []
35
- ## check if credentials (user/password) present - if yes, use basic auth
36
- if @token
37
- puts " using (personal access) token - starting with: #{@token[0..6]}**********"
38
- headers['Authorization'] = "token #{@token}"
39
- ## token works like:
40
- ## curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos
41
- elsif @user && @password
42
- puts " using basic auth - user: #{@user}, password: ***"
43
- ## use credential auth "tuple" (that is, array with two string items) for now
44
- ## or use Webclient::HttpBasicAuth or something - why? why not?
45
- auth = [@user, @password]
46
- # req.basic_auth( @user, @password )
47
- else
48
- puts " using no credentials (no token, no user/password)"
49
- end
50
-
51
- res = Webclient.get( url,
52
- headers: headers,
53
- auth: auth )
54
-
55
- # Get specific header
56
- # response["content-type"]
57
- # => "text/html; charset=UTF-8"
58
-
59
- # Iterate all response headers.
60
- puts "HTTP HEADERS:"
61
- res.headers.each do |key, value|
62
- puts " #{key}: >#{value}<"
63
- end
64
- puts
65
-
66
- # => "location => http://www.google.com/"
67
- # => "content-type => text/html; charset=UTF-8"
68
- # ...
69
-
70
- if res.status.ok?
71
- res.json
72
- else
73
- puts "!! HTTP ERROR: #{res.status.code} #{res.status.message}:"
74
- pp res.raw
75
- exit 1
76
- end
77
- end # methdo get
78
-
79
- end ## class Client
80
-
81
-
82
- end # module Hubba
@@ -1,46 +0,0 @@
1
- [
2
- {
3
- "login": "vienna-rb",
4
- "id": 3541331,
5
- "url": "https://api.github.com/orgs/vienna-rb",
6
- "repos_url": "https://api.github.com/orgs/vienna-rb/repos",
7
- "events_url": "https://api.github.com/orgs/vienna-rb/events",
8
- "members_url": "https://api.github.com/orgs/vienna-rb/members{/member}",
9
- "public_members_url": "https://api.github.com/orgs/vienna-rb/public_members{/member}",
10
- "avatar_url": "https://avatars.githubusercontent.com/u/3541331?v=3",
11
- "description": null
12
- },
13
- {
14
- "login": "openbeer",
15
- "id": 4464191,
16
- "url": "https://api.github.com/orgs/openbeer",
17
- "repos_url": "https://api.github.com/orgs/openbeer/repos",
18
- "events_url": "https://api.github.com/orgs/openbeer/events",
19
- "members_url": "https://api.github.com/orgs/openbeer/members{/member}",
20
- "public_members_url": "https://api.github.com/orgs/openbeer/public_members{/member}",
21
- "avatar_url": "https://avatars.githubusercontent.com/u/4464191?v=3",
22
- "description": "Open Public Domain Beer, Brewery n Brewpub Data - Incl. The Free World Beer Book"
23
- },
24
- {
25
- "login": "slideshow-s9",
26
- "id": 4464373,
27
- "url": "https://api.github.com/orgs/slideshow-s9",
28
- "repos_url": "https://api.github.com/orgs/slideshow-s9/repos",
29
- "events_url": "https://api.github.com/orgs/slideshow-s9/events",
30
- "members_url": "https://api.github.com/orgs/slideshow-s9/members{/member}",
31
- "public_members_url": "https://api.github.com/orgs/slideshow-s9/public_members{/member}",
32
- "avatar_url": "https://avatars.githubusercontent.com/u/4464373?v=3",
33
- "description": "Free Web Alternative to PowerPoint and Keynote Using Easy-to-Write and Easy-to-Read Plain Text Wiki-Style Markup"
34
- },
35
- {
36
- "login": "openfootball",
37
- "id": 4477026,
38
- "url": "https://api.github.com/orgs/openfootball",
39
- "repos_url": "https://api.github.com/orgs/openfootball/repos",
40
- "events_url": "https://api.github.com/orgs/openfootball/events",
41
- "members_url": "https://api.github.com/orgs/openfootball/members{/member}",
42
- "public_members_url": "https://api.github.com/orgs/openfootball/public_members{/member}",
43
- "avatar_url": "https://avatars.githubusercontent.com/u/4477026?v=3",
44
- "description": "Open Public Domain Football Data - Incl. The Free World Football Almanac"
45
- }
46
- ]
@@ -1,263 +0,0 @@
1
- [
2
- {
3
- "id": 33192631,
4
- "name": "austria",
5
- "full_name": "geraldb/austria",
6
- "owner": {
7
- "login": "geraldb",
8
- "id": 53281,
9
- "avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
10
- "gravatar_id": "",
11
- "url": "https://api.github.com/users/geraldb",
12
- "html_url": "https://github.com/geraldb",
13
- "followers_url": "https://api.github.com/users/geraldb/followers",
14
- "following_url": "https://api.github.com/users/geraldb/following{/other_user}",
15
- "gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
16
- "starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
17
- "subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
18
- "organizations_url": "https://api.github.com/users/geraldb/orgs",
19
- "repos_url": "https://api.github.com/users/geraldb/repos",
20
- "events_url": "https://api.github.com/users/geraldb/events{/privacy}",
21
- "received_events_url": "https://api.github.com/users/geraldb/received_events",
22
- "type": "User",
23
- "site_admin": false
24
- },
25
- "private": false,
26
- "html_url": "https://github.com/geraldb/austria",
27
- "description": "open data and scripts for austria (österreich)",
28
- "fork": false,
29
- "url": "https://api.github.com/repos/geraldb/austria",
30
- "forks_url": "https://api.github.com/repos/geraldb/austria/forks",
31
- "keys_url": "https://api.github.com/repos/geraldb/austria/keys{/key_id}",
32
- "collaborators_url": "https://api.github.com/repos/geraldb/austria/collaborators{/collaborator}",
33
- "teams_url": "https://api.github.com/repos/geraldb/austria/teams",
34
- "hooks_url": "https://api.github.com/repos/geraldb/austria/hooks",
35
- "issue_events_url": "https://api.github.com/repos/geraldb/austria/issues/events{/number}",
36
- "events_url": "https://api.github.com/repos/geraldb/austria/events",
37
- "assignees_url": "https://api.github.com/repos/geraldb/austria/assignees{/user}",
38
- "branches_url": "https://api.github.com/repos/geraldb/austria/branches{/branch}",
39
- "tags_url": "https://api.github.com/repos/geraldb/austria/tags",
40
- "blobs_url": "https://api.github.com/repos/geraldb/austria/git/blobs{/sha}",
41
- "git_tags_url": "https://api.github.com/repos/geraldb/austria/git/tags{/sha}",
42
- "git_refs_url": "https://api.github.com/repos/geraldb/austria/git/refs{/sha}",
43
- "trees_url": "https://api.github.com/repos/geraldb/austria/git/trees{/sha}",
44
- "statuses_url": "https://api.github.com/repos/geraldb/austria/statuses/{sha}",
45
- "languages_url": "https://api.github.com/repos/geraldb/austria/languages",
46
- "stargazers_url": "https://api.github.com/repos/geraldb/austria/stargazers",
47
- "contributors_url": "https://api.github.com/repos/geraldb/austria/contributors",
48
- "subscribers_url": "https://api.github.com/repos/geraldb/austria/subscribers",
49
- "subscription_url": "https://api.github.com/repos/geraldb/austria/subscription",
50
- "commits_url": "https://api.github.com/repos/geraldb/austria/commits{/sha}",
51
- "git_commits_url": "https://api.github.com/repos/geraldb/austria/git/commits{/sha}",
52
- "comments_url": "https://api.github.com/repos/geraldb/austria/comments{/number}",
53
- "issue_comment_url": "https://api.github.com/repos/geraldb/austria/issues/comments{/number}",
54
- "contents_url": "https://api.github.com/repos/geraldb/austria/contents/{+path}",
55
- "compare_url": "https://api.github.com/repos/geraldb/austria/compare/{base}...{head}",
56
- "merges_url": "https://api.github.com/repos/geraldb/austria/merges",
57
- "archive_url": "https://api.github.com/repos/geraldb/austria/{archive_format}{/ref}",
58
- "downloads_url": "https://api.github.com/repos/geraldb/austria/downloads",
59
- "issues_url": "https://api.github.com/repos/geraldb/austria/issues{/number}",
60
- "pulls_url": "https://api.github.com/repos/geraldb/austria/pulls{/number}",
61
- "milestones_url": "https://api.github.com/repos/geraldb/austria/milestones{/number}",
62
- "notifications_url": "https://api.github.com/repos/geraldb/austria/notifications{?since,all,participating}",
63
- "labels_url": "https://api.github.com/repos/geraldb/austria/labels{/name}",
64
- "releases_url": "https://api.github.com/repos/geraldb/austria/releases{/id}",
65
- "created_at": "2015-03-31T15:16:05Z",
66
- "updated_at": "2015-03-31T21:03:02Z",
67
- "pushed_at": "2015-03-31T21:03:02Z",
68
- "git_url": "git://github.com/geraldb/austria.git",
69
- "ssh_url": "git@github.com:geraldb/austria.git",
70
- "clone_url": "https://github.com/geraldb/austria.git",
71
- "svn_url": "https://github.com/geraldb/austria",
72
- "homepage": null,
73
- "size": 552,
74
- "stargazers_count": 1,
75
- "watchers_count": 1,
76
- "language": "Ruby",
77
- "has_issues": true,
78
- "has_downloads": true,
79
- "has_wiki": false,
80
- "has_pages": false,
81
- "forks_count": 0,
82
- "mirror_url": null,
83
- "open_issues_count": 0,
84
- "forks": 0,
85
- "open_issues": 0,
86
- "watchers": 1,
87
- "default_branch": "master"
88
- },
89
- {
90
- "id": 31158327,
91
- "name": "auto",
92
- "full_name": "geraldb/auto",
93
- "owner": {
94
- "login": "geraldb",
95
- "id": 53281,
96
- "avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
97
- "gravatar_id": "",
98
- "url": "https://api.github.com/users/geraldb",
99
- "html_url": "https://github.com/geraldb",
100
- "followers_url": "https://api.github.com/users/geraldb/followers",
101
- "following_url": "https://api.github.com/users/geraldb/following{/other_user}",
102
- "gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
103
- "starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
104
- "subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
105
- "organizations_url": "https://api.github.com/users/geraldb/orgs",
106
- "repos_url": "https://api.github.com/users/geraldb/repos",
107
- "events_url": "https://api.github.com/users/geraldb/events{/privacy}",
108
- "received_events_url": "https://api.github.com/users/geraldb/received_events",
109
- "type": "User",
110
- "site_admin": false
111
- },
112
- "private": false,
113
- "html_url": "https://github.com/geraldb/auto",
114
- "description": "auto - scripts to automate building databases, books, etc.",
115
- "fork": false,
116
- "url": "https://api.github.com/repos/geraldb/auto",
117
- "forks_url": "https://api.github.com/repos/geraldb/auto/forks",
118
- "keys_url": "https://api.github.com/repos/geraldb/auto/keys{/key_id}",
119
- "collaborators_url": "https://api.github.com/repos/geraldb/auto/collaborators{/collaborator}",
120
- "teams_url": "https://api.github.com/repos/geraldb/auto/teams",
121
- "hooks_url": "https://api.github.com/repos/geraldb/auto/hooks",
122
- "issue_events_url": "https://api.github.com/repos/geraldb/auto/issues/events{/number}",
123
- "events_url": "https://api.github.com/repos/geraldb/auto/events",
124
- "assignees_url": "https://api.github.com/repos/geraldb/auto/assignees{/user}",
125
- "branches_url": "https://api.github.com/repos/geraldb/auto/branches{/branch}",
126
- "tags_url": "https://api.github.com/repos/geraldb/auto/tags",
127
- "blobs_url": "https://api.github.com/repos/geraldb/auto/git/blobs{/sha}",
128
- "git_tags_url": "https://api.github.com/repos/geraldb/auto/git/tags{/sha}",
129
- "git_refs_url": "https://api.github.com/repos/geraldb/auto/git/refs{/sha}",
130
- "trees_url": "https://api.github.com/repos/geraldb/auto/git/trees{/sha}",
131
- "statuses_url": "https://api.github.com/repos/geraldb/auto/statuses/{sha}",
132
- "languages_url": "https://api.github.com/repos/geraldb/auto/languages",
133
- "stargazers_url": "https://api.github.com/repos/geraldb/auto/stargazers",
134
- "contributors_url": "https://api.github.com/repos/geraldb/auto/contributors",
135
- "subscribers_url": "https://api.github.com/repos/geraldb/auto/subscribers",
136
- "subscription_url": "https://api.github.com/repos/geraldb/auto/subscription",
137
- "commits_url": "https://api.github.com/repos/geraldb/auto/commits{/sha}",
138
- "git_commits_url": "https://api.github.com/repos/geraldb/auto/git/commits{/sha}",
139
- "comments_url": "https://api.github.com/repos/geraldb/auto/comments{/number}",
140
- "issue_comment_url": "https://api.github.com/repos/geraldb/auto/issues/comments{/number}",
141
- "contents_url": "https://api.github.com/repos/geraldb/auto/contents/{+path}",
142
- "compare_url": "https://api.github.com/repos/geraldb/auto/compare/{base}...{head}",
143
- "merges_url": "https://api.github.com/repos/geraldb/auto/merges",
144
- "archive_url": "https://api.github.com/repos/geraldb/auto/{archive_format}{/ref}",
145
- "downloads_url": "https://api.github.com/repos/geraldb/auto/downloads",
146
- "issues_url": "https://api.github.com/repos/geraldb/auto/issues{/number}",
147
- "pulls_url": "https://api.github.com/repos/geraldb/auto/pulls{/number}",
148
- "milestones_url": "https://api.github.com/repos/geraldb/auto/milestones{/number}",
149
- "notifications_url": "https://api.github.com/repos/geraldb/auto/notifications{?since,all,participating}",
150
- "labels_url": "https://api.github.com/repos/geraldb/auto/labels{/name}",
151
- "releases_url": "https://api.github.com/repos/geraldb/auto/releases{/id}",
152
- "created_at": "2015-02-22T09:27:17Z",
153
- "updated_at": "2015-04-06T14:16:32Z",
154
- "pushed_at": "2015-04-06T14:16:32Z",
155
- "git_url": "git://github.com/geraldb/auto.git",
156
- "ssh_url": "git@github.com:geraldb/auto.git",
157
- "clone_url": "https://github.com/geraldb/auto.git",
158
- "svn_url": "https://github.com/geraldb/auto",
159
- "homepage": null,
160
- "size": 288,
161
- "stargazers_count": 1,
162
- "watchers_count": 1,
163
- "language": "Ruby",
164
- "has_issues": true,
165
- "has_downloads": true,
166
- "has_wiki": false,
167
- "has_pages": false,
168
- "forks_count": 0,
169
- "mirror_url": null,
170
- "open_issues_count": 0,
171
- "forks": 0,
172
- "open_issues": 0,
173
- "watchers": 1,
174
- "default_branch": "master"
175
- },
176
- {
177
- "id": 33404369,
178
- "name": "backup",
179
- "full_name": "geraldb/backup",
180
- "owner": {
181
- "login": "geraldb",
182
- "id": 53281,
183
- "avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
184
- "gravatar_id": "",
185
- "url": "https://api.github.com/users/geraldb",
186
- "html_url": "https://github.com/geraldb",
187
- "followers_url": "https://api.github.com/users/geraldb/followers",
188
- "following_url": "https://api.github.com/users/geraldb/following{/other_user}",
189
- "gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
190
- "starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
191
- "subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
192
- "organizations_url": "https://api.github.com/users/geraldb/orgs",
193
- "repos_url": "https://api.github.com/users/geraldb/repos",
194
- "events_url": "https://api.github.com/users/geraldb/events{/privacy}",
195
- "received_events_url": "https://api.github.com/users/geraldb/received_events",
196
- "type": "User",
197
- "site_admin": false
198
- },
199
- "private": false,
200
- "html_url": "https://github.com/geraldb/backup",
201
- "description": "backup - scripts to backup repos, etc.",
202
- "fork": false,
203
- "url": "https://api.github.com/repos/geraldb/backup",
204
- "forks_url": "https://api.github.com/repos/geraldb/backup/forks",
205
- "keys_url": "https://api.github.com/repos/geraldb/backup/keys{/key_id}",
206
- "collaborators_url": "https://api.github.com/repos/geraldb/backup/collaborators{/collaborator}",
207
- "teams_url": "https://api.github.com/repos/geraldb/backup/teams",
208
- "hooks_url": "https://api.github.com/repos/geraldb/backup/hooks",
209
- "issue_events_url": "https://api.github.com/repos/geraldb/backup/issues/events{/number}",
210
- "events_url": "https://api.github.com/repos/geraldb/backup/events",
211
- "assignees_url": "https://api.github.com/repos/geraldb/backup/assignees{/user}",
212
- "branches_url": "https://api.github.com/repos/geraldb/backup/branches{/branch}",
213
- "tags_url": "https://api.github.com/repos/geraldb/backup/tags",
214
- "blobs_url": "https://api.github.com/repos/geraldb/backup/git/blobs{/sha}",
215
- "git_tags_url": "https://api.github.com/repos/geraldb/backup/git/tags{/sha}",
216
- "git_refs_url": "https://api.github.com/repos/geraldb/backup/git/refs{/sha}",
217
- "trees_url": "https://api.github.com/repos/geraldb/backup/git/trees{/sha}",
218
- "statuses_url": "https://api.github.com/repos/geraldb/backup/statuses/{sha}",
219
- "languages_url": "https://api.github.com/repos/geraldb/backup/languages",
220
- "stargazers_url": "https://api.github.com/repos/geraldb/backup/stargazers",
221
- "contributors_url": "https://api.github.com/repos/geraldb/backup/contributors",
222
- "subscribers_url": "https://api.github.com/repos/geraldb/backup/subscribers",
223
- "subscription_url": "https://api.github.com/repos/geraldb/backup/subscription",
224
- "commits_url": "https://api.github.com/repos/geraldb/backup/commits{/sha}",
225
- "git_commits_url": "https://api.github.com/repos/geraldb/backup/git/commits{/sha}",
226
- "comments_url": "https://api.github.com/repos/geraldb/backup/comments{/number}",
227
- "issue_comment_url": "https://api.github.com/repos/geraldb/backup/issues/comments{/number}",
228
- "contents_url": "https://api.github.com/repos/geraldb/backup/contents/{+path}",
229
- "compare_url": "https://api.github.com/repos/geraldb/backup/compare/{base}...{head}",
230
- "merges_url": "https://api.github.com/repos/geraldb/backup/merges",
231
- "archive_url": "https://api.github.com/repos/geraldb/backup/{archive_format}{/ref}",
232
- "downloads_url": "https://api.github.com/repos/geraldb/backup/downloads",
233
- "issues_url": "https://api.github.com/repos/geraldb/backup/issues{/number}",
234
- "pulls_url": "https://api.github.com/repos/geraldb/backup/pulls{/number}",
235
- "milestones_url": "https://api.github.com/repos/geraldb/backup/milestones{/number}",
236
- "notifications_url": "https://api.github.com/repos/geraldb/backup/notifications{?since,all,participating}",
237
- "labels_url": "https://api.github.com/repos/geraldb/backup/labels{/name}",
238
- "releases_url": "https://api.github.com/repos/geraldb/backup/releases{/id}",
239
- "created_at": "2015-04-04T12:14:24Z",
240
- "updated_at": "2015-06-28T11:55:10Z",
241
- "pushed_at": "2015-11-10T08:58:28Z",
242
- "git_url": "git://github.com/geraldb/backup.git",
243
- "ssh_url": "git@github.com:geraldb/backup.git",
244
- "clone_url": "https://github.com/geraldb/backup.git",
245
- "svn_url": "https://github.com/geraldb/backup",
246
- "homepage": null,
247
- "size": 184,
248
- "stargazers_count": 1,
249
- "watchers_count": 1,
250
- "language": "Ruby",
251
- "has_issues": true,
252
- "has_downloads": true,
253
- "has_wiki": true,
254
- "has_pages": false,
255
- "forks_count": 0,
256
- "mirror_url": null,
257
- "open_issues_count": 0,
258
- "forks": 0,
259
- "open_issues": 0,
260
- "watchers": 1,
261
- "default_branch": "master"
262
- }
263
- ]