reponaut 1.2.0 → 2.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.
@@ -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
+ }