reponaut 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,3 +5,8 @@ end
5
5
  Given /^the GitHub service returns 404 for the user "([^"]*)"$/ do |username|
6
6
  set_environment_variable 'REPONAUT_ENV', 'cucumber'
7
7
  end
8
+
9
+ Given /^the GitHub service is rate limiting requests for the user "([^"]*)"$/ do |username|
10
+ set_environment_variable 'REPONAUT_ENV', 'cucumber'
11
+ set_environment_variable 'REPONAUT_RATE_LIMIT', 'on'
12
+ end
data/lib/reponaut.rb CHANGED
@@ -1,4 +1,17 @@
1
- require 'reponaut/application'
1
+ def require_all(path)
2
+ glob = File.join(File.dirname(__FILE__), path, '*.rb')
3
+ Dir[glob].each do |f|
4
+ require f
5
+ end
6
+ end
7
+
8
+ require 'reponaut/ext/ENV'
9
+
10
+ require 'reponaut/command'
2
11
  require 'reponaut/github'
12
+ require 'reponaut/presenter'
13
+ require 'reponaut/sorter'
3
14
  require 'reponaut/statistics'
4
15
  require 'reponaut/version'
16
+
17
+ require_all 'reponaut/commands'
@@ -0,0 +1,37 @@
1
+ module Reponaut
2
+ module Application
3
+ class Command
4
+ class << self
5
+ def subclasses
6
+ @subclasses ||= []
7
+ end
8
+
9
+ def inherited(base)
10
+ subclasses << base
11
+ super
12
+ end
13
+ end
14
+
15
+ attr_reader :username, :client, :repos
16
+
17
+ def initialize(prog); end
18
+
19
+ def process(options, args)
20
+ raise ArgumentError.new('You must specify a username') if args.empty?
21
+ @username = args.first
22
+ @client = Reponaut::GitHub::Client.new(username)
23
+ @repos = client.repos.reject { |r| r.language.nil? }
24
+ @repos = @repos.find_all { |r| r.source? } if options['ignore_forks']
25
+ rescue Reponaut::GitHub::NoSuchUserError
26
+ quit 4, "No such user: #{username}"
27
+ rescue Reponaut::GitHub::RateLimitExceededError
28
+ quit 5, 'GitHub rate limit exceeded. Try your request again later.'
29
+ end
30
+
31
+ def quit(code, msg)
32
+ $stderr.puts msg
33
+ exit code
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,41 @@
1
+ require 'reponaut/ext/hash'
2
+
3
+ module Reponaut
4
+ module Application
5
+ class Count < Command
6
+ def initialize(prog)
7
+ prog.command(:count) do |c|
8
+ c.syntax 'count [options] <username>'
9
+ c.description "Shows a breakdown of a user's total number of repos"
10
+ c.option 'ignore_forks', '-f', '--ignore-forks', 'Ignore forks'
11
+ c.option 'sort_numerically', '-n', 'Sort by number of repos instead of alphabetically'
12
+
13
+ c.action do |args, options|
14
+ process(options, args)
15
+ end
16
+ end
17
+ end
18
+
19
+ def process(options, args)
20
+ super
21
+
22
+ quit 3, "#{username} has no repositories" if repos.empty?
23
+
24
+ stats = Reponaut::StatisticsCalculator.new(repos)
25
+ counts = sort_counts(stats.language_counts.pairs, !!options['sort_numerically'])
26
+ longest_label = counts.map { |e| e[0].length }.max
27
+ longest_count = counts.map { |e| e[1].to_s.length }.max
28
+ counts.each do |e|
29
+ printf "%-*s %*d\n", longest_label, e[0], longest_count, e[1]
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def sort_counts(pairs, sort_numerically)
36
+ sorter = sort_numerically ? NumericalSorter : LexicographicalSorter
37
+ pairs.map { |p| sorter.new(p) }.sort.map { |s| [s.name, s.count] }
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module Reponaut
2
+ module Application
3
+ class List < Command
4
+ def initialize(prog)
5
+ prog.command(:list) do |c|
6
+ c.alias :ls
7
+ c.syntax 'list [options] <username> [language]'
8
+ c.description "List a user's repos"
9
+ c.option 'ignore_forks', '-f', 'Ignore forks'
10
+ c.option 'show_description', '-d', 'Show repo description'
11
+
12
+ c.action do |args, options|
13
+ process(options, args)
14
+ end
15
+ end
16
+ end
17
+
18
+ def process(options, args)
19
+ super
20
+
21
+ language = args[1]
22
+
23
+ filtered_repos = repos
24
+ filtered_repos = filtered_repos.select { |r| r.language.downcase == language.downcase } if language
25
+ quit 4, "#{username} has no repositories written in #{language}" if filtered_repos.empty?
26
+
27
+ formatter = formatter_class(options).new
28
+ filtered_repos.sort.each do |r|
29
+ puts formatter.format(r)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def formatter_class(options)
36
+ options['show_description'] ? LongPresenter : SimplePresenter
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ module Reponaut
2
+ module Env
3
+ def cucumber?
4
+ self['REPONAUT_ENV'] == 'cucumber'
5
+ end
6
+ end
7
+ end
8
+
9
+ ENV.extend(Reponaut::Env)
@@ -0,0 +1,16 @@
1
+ module Mercenary
2
+ class Command
3
+ def logger(level = nil)
4
+ unless @logger
5
+ @logger = Logger.new(STDERR)
6
+ @logger.level = level || Logger::INFO
7
+ @logger.formatter = proc do |severity, datetime, progname, msg|
8
+ "#{msg}\n"
9
+ end
10
+ end
11
+
12
+ @logger.level = level unless level.nil?
13
+ @logger
14
+ end
15
+ end
16
+ end
@@ -5,8 +5,6 @@ require 'reponaut/ext/bool'
5
5
 
6
6
  module Reponaut
7
7
  module GitHub
8
- class NoSuchUserError < StandardError; end
9
-
10
8
  class Client
11
9
  include HTTParty
12
10
 
@@ -26,21 +24,33 @@ module Reponaut
26
24
  username
27
25
  end
28
26
 
27
+ def method_missing(symbol, *args)
28
+ if self.class.respond_to?(symbol)
29
+ self.class.send(symbol, *args)
30
+ else
31
+ super
32
+ end
33
+ end
34
+
29
35
  private
30
- def repo_data
31
- return mock_repo_data if ENV['REPONAUT_ENV'] == 'cucumber'
32
- resp = self.class.get("/users/#{username}/repos")
36
+
37
+ def real_repo_data
38
+ resp = get("/users/#{username}/repos")
33
39
  raise NoSuchUserError, username if resp.code == 404
40
+ raise RateLimitExceededError if resp.code == 403
34
41
  resp.body
35
42
  end
36
43
 
37
44
  def mock_repo_data
38
- path = File.join(File.dirname(__FILE__), '..', '..', 'spec', 'fixtures', 'cassettes', "#{username}.yml")
45
+ raise RateLimitExceededError if ENV['REPONAUT_RATE_LIMIT'] == 'on'
46
+ path = File.expand_path("../../../spec/fixtures/cassettes/#{username}.yml", __FILE__)
39
47
  raw_data = IO.read(path)
40
48
  data = YAML.load(raw_data)
41
49
  raise NoSuchUserError, username if data['http_interactions'][0]['response']['status']['code'] == 404
42
50
  data['http_interactions'][0]['response']['body']['string']
43
51
  end
52
+
53
+ define_method(:repo_data, instance_method(ENV.cucumber? ? :mock_repo_data : :real_repo_data))
44
54
  end
45
55
 
46
56
  class Repository
@@ -55,7 +65,7 @@ module Reponaut
55
65
 
56
66
  def upstream
57
67
  return nil unless fork?
58
- @service.class.get("/repos/#{full_name}")['parent']['full_name']
68
+ repo_data['parent']['full_name']
59
69
  end
60
70
 
61
71
  def to_s
@@ -82,6 +92,26 @@ module Reponaut
82
92
  end
83
93
  end
84
94
  end
95
+
96
+ private
97
+
98
+ def real_repo_data
99
+ @service.get("/repos/#{full_name}")
100
+ end
101
+
102
+ def mock_repo_data
103
+ path = File.expand_path("../../../spec/fixtures/repos/#{full_name}.json", __FILE__)
104
+ raw_data = IO.read(path)
105
+ JSON.parse(raw_data)
106
+ end
107
+
108
+ define_method(:repo_data, instance_method(ENV.cucumber? ? :mock_repo_data : :real_repo_data))
85
109
  end
110
+
111
+ class GitHubError < StandardError; end
112
+
113
+ class NoSuchUserError < GitHubError; end
114
+
115
+ class RateLimitExceededError < GitHubError; end
86
116
  end
87
117
  end
@@ -0,0 +1,30 @@
1
+ module Reponaut
2
+ module Application
3
+ class Presenter
4
+ def format(repo)
5
+ line = repo.name
6
+ line = "#{line} -> #{repo.upstream}" if repo.fork?
7
+ line
8
+ end
9
+ end
10
+
11
+ class SimplePresenter < Presenter; end
12
+
13
+ class LongPresenter < Presenter
14
+ attr_reader :count
15
+
16
+ def initialize
17
+ super
18
+ @count = 0
19
+ end
20
+
21
+ def format(repo)
22
+ line = super
23
+ line = "\n#{line}" unless @count == 0
24
+ line = "#{line}\n #{repo.description}"
25
+ @count += 1
26
+ line
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ module Reponaut
2
+ module Application
3
+ class Sorter
4
+ attr_reader :name, :count
5
+
6
+ def initialize(pair)
7
+ @name, @count = pair
8
+ end
9
+ end
10
+
11
+ class LexicographicalSorter < Sorter
12
+ def <=>(o)
13
+ return nil unless o.kind_of? self.class
14
+ name <=> o.name
15
+ end
16
+ end
17
+
18
+ class NumericalSorter < Sorter
19
+ def <=>(o)
20
+ return nil unless o.kind_of? self.class
21
+ if count == o.count
22
+ name <=> o.name
23
+ else
24
+ o.count <=> count
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Reponaut
2
- VERSION = "1.2.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/reponaut.gemspec CHANGED
@@ -17,11 +17,17 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features|fixtures)/})
18
18
  gem.require_paths = ['lib']
19
19
 
20
+ gem.metadata = {
21
+ 'build_date' => Time.now.strftime("%Y-%m-%d %H:%M:%S %Z"),
22
+ 'commit' => `git describe 2>/dev/null`.chomp,
23
+ 'commit_hash' => `git rev-parse HEAD`.chomp,
24
+ }
25
+
20
26
  gem.required_ruby_version = '>= 2.0.0'
21
27
 
22
- gem.add_runtime_dependency('httparty', '~> 0.13.5')
23
- gem.add_runtime_dependency('json', '~> 1.8')
24
- gem.add_runtime_dependency('slop', '~> 4.2')
28
+ gem.add_runtime_dependency('httparty', '~> 0.14.0')
29
+ gem.add_runtime_dependency('json', '~> 2.0')
30
+ gem.add_runtime_dependency('mercenary', '~> 0.3.5', '!= 0.3.6')
25
31
 
26
32
  gem.add_development_dependency('aruba', '~> 0.8')
27
33
  gem.add_development_dependency('cucumber', '~> 2.0')
@@ -0,0 +1,4 @@
1
+ {
2
+ "message": "API rate limit exceeded for 208.72.12.4. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
3
+ "documentation_url": "https://developer.github.com/v3/#rate-limiting"
4
+ }
@@ -0,0 +1,266 @@
1
+ {
2
+ "id": 29265278,
3
+ "name": "Smyck-Color-Scheme",
4
+ "full_name": "mdippery/Smyck-Color-Scheme",
5
+ "owner": {
6
+ "login": "mdippery",
7
+ "id": 22942,
8
+ "avatar_url": "https://avatars.githubusercontent.com/u/22942?v=3",
9
+ "gravatar_id": "",
10
+ "url": "https://api.github.com/users/mdippery",
11
+ "html_url": "https://github.com/mdippery",
12
+ "followers_url": "https://api.github.com/users/mdippery/followers",
13
+ "following_url": "https://api.github.com/users/mdippery/following{/other_user}",
14
+ "gists_url": "https://api.github.com/users/mdippery/gists{/gist_id}",
15
+ "starred_url": "https://api.github.com/users/mdippery/starred{/owner}{/repo}",
16
+ "subscriptions_url": "https://api.github.com/users/mdippery/subscriptions",
17
+ "organizations_url": "https://api.github.com/users/mdippery/orgs",
18
+ "repos_url": "https://api.github.com/users/mdippery/repos",
19
+ "events_url": "https://api.github.com/users/mdippery/events{/privacy}",
20
+ "received_events_url": "https://api.github.com/users/mdippery/received_events",
21
+ "type": "User",
22
+ "site_admin": false
23
+ },
24
+ "private": false,
25
+ "html_url": "https://github.com/mdippery/Smyck-Color-Scheme",
26
+ "description": "Color Scheme for Terminal.app, iTerm2, Vim, MacVim, Sublime Text2 and Textmate",
27
+ "fork": true,
28
+ "url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme",
29
+ "forks_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/forks",
30
+ "keys_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/keys{/key_id}",
31
+ "collaborators_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/collaborators{/collaborator}",
32
+ "teams_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/teams",
33
+ "hooks_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/hooks",
34
+ "issue_events_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/issues/events{/number}",
35
+ "events_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/events",
36
+ "assignees_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/assignees{/user}",
37
+ "branches_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/branches{/branch}",
38
+ "tags_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/tags",
39
+ "blobs_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/git/blobs{/sha}",
40
+ "git_tags_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/git/tags{/sha}",
41
+ "git_refs_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/git/refs{/sha}",
42
+ "trees_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/git/trees{/sha}",
43
+ "statuses_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/statuses/{sha}",
44
+ "languages_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/languages",
45
+ "stargazers_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/stargazers",
46
+ "contributors_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/contributors",
47
+ "subscribers_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/subscribers",
48
+ "subscription_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/subscription",
49
+ "commits_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/commits{/sha}",
50
+ "git_commits_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/git/commits{/sha}",
51
+ "comments_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/comments{/number}",
52
+ "issue_comment_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/issues/comments{/number}",
53
+ "contents_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/contents/{+path}",
54
+ "compare_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/compare/{base}...{head}",
55
+ "merges_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/merges",
56
+ "archive_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/{archive_format}{/ref}",
57
+ "downloads_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/downloads",
58
+ "issues_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/issues{/number}",
59
+ "pulls_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/pulls{/number}",
60
+ "milestones_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/milestones{/number}",
61
+ "notifications_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/notifications{?since,all,participating}",
62
+ "labels_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/labels{/name}",
63
+ "releases_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/releases{/id}",
64
+ "deployments_url": "https://api.github.com/repos/mdippery/Smyck-Color-Scheme/deployments",
65
+ "created_at": "2015-01-14T20:54:57Z",
66
+ "updated_at": "2015-01-14T20:55:08Z",
67
+ "pushed_at": "2015-01-14T23:29:10Z",
68
+ "git_url": "git://github.com/mdippery/Smyck-Color-Scheme.git",
69
+ "ssh_url": "git@github.com:mdippery/Smyck-Color-Scheme.git",
70
+ "clone_url": "https://github.com/mdippery/Smyck-Color-Scheme.git",
71
+ "svn_url": "https://github.com/mdippery/Smyck-Color-Scheme",
72
+ "homepage": "http://color.smyck.org/",
73
+ "size": 107,
74
+ "stargazers_count": 0,
75
+ "watchers_count": 0,
76
+ "language": "VimL",
77
+ "has_issues": false,
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": 0,
87
+ "default_branch": "master",
88
+ "parent": {
89
+ "id": 3688785,
90
+ "name": "Smyck-Color-Scheme",
91
+ "full_name": "hukl/Smyck-Color-Scheme",
92
+ "owner": {
93
+ "login": "hukl",
94
+ "id": 25157,
95
+ "avatar_url": "https://avatars.githubusercontent.com/u/25157?v=3",
96
+ "gravatar_id": "",
97
+ "url": "https://api.github.com/users/hukl",
98
+ "html_url": "https://github.com/hukl",
99
+ "followers_url": "https://api.github.com/users/hukl/followers",
100
+ "following_url": "https://api.github.com/users/hukl/following{/other_user}",
101
+ "gists_url": "https://api.github.com/users/hukl/gists{/gist_id}",
102
+ "starred_url": "https://api.github.com/users/hukl/starred{/owner}{/repo}",
103
+ "subscriptions_url": "https://api.github.com/users/hukl/subscriptions",
104
+ "organizations_url": "https://api.github.com/users/hukl/orgs",
105
+ "repos_url": "https://api.github.com/users/hukl/repos",
106
+ "events_url": "https://api.github.com/users/hukl/events{/privacy}",
107
+ "received_events_url": "https://api.github.com/users/hukl/received_events",
108
+ "type": "User",
109
+ "site_admin": false
110
+ },
111
+ "private": false,
112
+ "html_url": "https://github.com/hukl/Smyck-Color-Scheme",
113
+ "description": "Color Scheme for Terminal.app, iTerm2, Vim, MacVim, Sublime Text2 and Textmate",
114
+ "fork": false,
115
+ "url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme",
116
+ "forks_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/forks",
117
+ "keys_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/keys{/key_id}",
118
+ "collaborators_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/collaborators{/collaborator}",
119
+ "teams_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/teams",
120
+ "hooks_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/hooks",
121
+ "issue_events_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues/events{/number}",
122
+ "events_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/events",
123
+ "assignees_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/assignees{/user}",
124
+ "branches_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/branches{/branch}",
125
+ "tags_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/tags",
126
+ "blobs_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/blobs{/sha}",
127
+ "git_tags_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/tags{/sha}",
128
+ "git_refs_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/refs{/sha}",
129
+ "trees_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/trees{/sha}",
130
+ "statuses_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/statuses/{sha}",
131
+ "languages_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/languages",
132
+ "stargazers_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/stargazers",
133
+ "contributors_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/contributors",
134
+ "subscribers_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/subscribers",
135
+ "subscription_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/subscription",
136
+ "commits_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/commits{/sha}",
137
+ "git_commits_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/commits{/sha}",
138
+ "comments_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/comments{/number}",
139
+ "issue_comment_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues/comments{/number}",
140
+ "contents_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/contents/{+path}",
141
+ "compare_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/compare/{base}...{head}",
142
+ "merges_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/merges",
143
+ "archive_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/{archive_format}{/ref}",
144
+ "downloads_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/downloads",
145
+ "issues_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues{/number}",
146
+ "pulls_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/pulls{/number}",
147
+ "milestones_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/milestones{/number}",
148
+ "notifications_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/notifications{?since,all,participating}",
149
+ "labels_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/labels{/name}",
150
+ "releases_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/releases{/id}",
151
+ "deployments_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/deployments",
152
+ "created_at": "2012-03-11T18:46:41Z",
153
+ "updated_at": "2016-07-06T05:06:25Z",
154
+ "pushed_at": "2016-04-24T15:46:54Z",
155
+ "git_url": "git://github.com/hukl/Smyck-Color-Scheme.git",
156
+ "ssh_url": "git@github.com:hukl/Smyck-Color-Scheme.git",
157
+ "clone_url": "https://github.com/hukl/Smyck-Color-Scheme.git",
158
+ "svn_url": "https://github.com/hukl/Smyck-Color-Scheme",
159
+ "homepage": "http://color.smyck.org/",
160
+ "size": 221,
161
+ "stargazers_count": 817,
162
+ "watchers_count": 817,
163
+ "language": "VimL",
164
+ "has_issues": true,
165
+ "has_downloads": true,
166
+ "has_wiki": true,
167
+ "has_pages": false,
168
+ "forks_count": 115,
169
+ "mirror_url": null,
170
+ "open_issues_count": 18,
171
+ "forks": 115,
172
+ "open_issues": 18,
173
+ "watchers": 817,
174
+ "default_branch": "master"
175
+ },
176
+ "source": {
177
+ "id": 3688785,
178
+ "name": "Smyck-Color-Scheme",
179
+ "full_name": "hukl/Smyck-Color-Scheme",
180
+ "owner": {
181
+ "login": "hukl",
182
+ "id": 25157,
183
+ "avatar_url": "https://avatars.githubusercontent.com/u/25157?v=3",
184
+ "gravatar_id": "",
185
+ "url": "https://api.github.com/users/hukl",
186
+ "html_url": "https://github.com/hukl",
187
+ "followers_url": "https://api.github.com/users/hukl/followers",
188
+ "following_url": "https://api.github.com/users/hukl/following{/other_user}",
189
+ "gists_url": "https://api.github.com/users/hukl/gists{/gist_id}",
190
+ "starred_url": "https://api.github.com/users/hukl/starred{/owner}{/repo}",
191
+ "subscriptions_url": "https://api.github.com/users/hukl/subscriptions",
192
+ "organizations_url": "https://api.github.com/users/hukl/orgs",
193
+ "repos_url": "https://api.github.com/users/hukl/repos",
194
+ "events_url": "https://api.github.com/users/hukl/events{/privacy}",
195
+ "received_events_url": "https://api.github.com/users/hukl/received_events",
196
+ "type": "User",
197
+ "site_admin": false
198
+ },
199
+ "private": false,
200
+ "html_url": "https://github.com/hukl/Smyck-Color-Scheme",
201
+ "description": "Color Scheme for Terminal.app, iTerm2, Vim, MacVim, Sublime Text2 and Textmate",
202
+ "fork": false,
203
+ "url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme",
204
+ "forks_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/forks",
205
+ "keys_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/keys{/key_id}",
206
+ "collaborators_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/collaborators{/collaborator}",
207
+ "teams_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/teams",
208
+ "hooks_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/hooks",
209
+ "issue_events_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues/events{/number}",
210
+ "events_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/events",
211
+ "assignees_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/assignees{/user}",
212
+ "branches_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/branches{/branch}",
213
+ "tags_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/tags",
214
+ "blobs_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/blobs{/sha}",
215
+ "git_tags_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/tags{/sha}",
216
+ "git_refs_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/refs{/sha}",
217
+ "trees_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/trees{/sha}",
218
+ "statuses_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/statuses/{sha}",
219
+ "languages_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/languages",
220
+ "stargazers_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/stargazers",
221
+ "contributors_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/contributors",
222
+ "subscribers_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/subscribers",
223
+ "subscription_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/subscription",
224
+ "commits_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/commits{/sha}",
225
+ "git_commits_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/git/commits{/sha}",
226
+ "comments_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/comments{/number}",
227
+ "issue_comment_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues/comments{/number}",
228
+ "contents_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/contents/{+path}",
229
+ "compare_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/compare/{base}...{head}",
230
+ "merges_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/merges",
231
+ "archive_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/{archive_format}{/ref}",
232
+ "downloads_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/downloads",
233
+ "issues_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/issues{/number}",
234
+ "pulls_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/pulls{/number}",
235
+ "milestones_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/milestones{/number}",
236
+ "notifications_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/notifications{?since,all,participating}",
237
+ "labels_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/labels{/name}",
238
+ "releases_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/releases{/id}",
239
+ "deployments_url": "https://api.github.com/repos/hukl/Smyck-Color-Scheme/deployments",
240
+ "created_at": "2012-03-11T18:46:41Z",
241
+ "updated_at": "2016-07-06T05:06:25Z",
242
+ "pushed_at": "2016-04-24T15:46:54Z",
243
+ "git_url": "git://github.com/hukl/Smyck-Color-Scheme.git",
244
+ "ssh_url": "git@github.com:hukl/Smyck-Color-Scheme.git",
245
+ "clone_url": "https://github.com/hukl/Smyck-Color-Scheme.git",
246
+ "svn_url": "https://github.com/hukl/Smyck-Color-Scheme",
247
+ "homepage": "http://color.smyck.org/",
248
+ "size": 221,
249
+ "stargazers_count": 817,
250
+ "watchers_count": 817,
251
+ "language": "VimL",
252
+ "has_issues": true,
253
+ "has_downloads": true,
254
+ "has_wiki": true,
255
+ "has_pages": false,
256
+ "forks_count": 115,
257
+ "mirror_url": null,
258
+ "open_issues_count": 18,
259
+ "forks": 115,
260
+ "open_issues": 18,
261
+ "watchers": 817,
262
+ "default_branch": "master"
263
+ },
264
+ "network_count": 115,
265
+ "subscribers_count": 0
266
+ }