lita-github_pr_list 0.0.21 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff7f8c04542f84b86ba6d3d977b21caad29a4a3a
4
- data.tar.gz: 2c405bafbfc2b8438a23fceaa119e01eac28c1f8
3
+ metadata.gz: 81377b8026ca631cf88252170fcb1525e21063ac
4
+ data.tar.gz: a1d18082305bc6a4e0e2aac7745d82b5dc99f5d9
5
5
  SHA512:
6
- metadata.gz: f002ffb1ec7aa1bacf5a81f77ec04eb4ed90fad4795caeaeab023c3a25abd0068ea7cb6a4e4903f075324aa7d9978331202cea2a1968cb32d4fdf562df8caa7e
7
- data.tar.gz: 0f467d3c6523bbedfc9ed8127aa341bfca94448e1117ac060e76582efd220c24ac37039cc058ac2528c4f1f6debc25ca03db9c84c7e8529a416e341df9158eff
6
+ metadata.gz: 075d995d3fd0f0281e5b65c741348439049ed2493b64e3de3a3d71d0dcc688ab29380455c3cfb38a93827685927033576ceb4a1905ec0f53e10b7e3e7eb526e9
7
+ data.tar.gz: f26270149694e49f5e32ac34e18a57f659cfce4e32fb425d719777c65b5bfacd5085918cf4c87d1c4faf11f7ef0cc8d723b5b2f7ba3ba31934281b319011291a
data/README.md CHANGED
@@ -38,10 +38,14 @@ will display it, otherwise it will display :new:.
38
38
 
39
39
  New - :new: - This is the default state, shown (new) if none of the other states are set.
40
40
  Pass - :elephant: :elephant: :elephant: = (elephant)(elephant)(elephant)
41
+ Pass DESIGN - :art: :art: :art: = (art)(art)(art)
41
42
  In Review - :book: = (book)
42
43
  Fail - :poop: OR :hankey: = (poop)
43
44
  Fixed - :wave: = (wave)
44
45
 
46
+ Placing an :art: or :elephant: in the initial pull request will designate the request to be for design or developers respectively
47
+ Placing neither :art: nor :elephant:, or placing both of them will assume both design and developer review is requested
48
+
45
49
  ## Contributing
46
50
 
47
51
  1. Fork it ( https://github.com/amaabca/lita-github_pr_list/fork )
@@ -2,12 +2,15 @@ module Lita
2
2
  module GithubPrList
3
3
  class CommentHook
4
4
  attr_accessor :request, :response, :payload, :commenter, :issue_owner, :issue_title, :issue_body, :status,
5
- :issue_html_url, :redis
5
+ :issue_html_url, :redis, :github_organization, :github_client
6
6
 
7
7
  def initialize(params = {})
8
8
  self.response = params.fetch(:response, nil)
9
9
  self.request = params.fetch(:request, nil)
10
10
  self.redis = params.fetch(:redis, nil)
11
+ self.github_organization = params.fetch(:github_organization, nil)
12
+ github_token = params.fetch(:github_token, nil)
13
+ self.github_client = Octokit::Client.new(access_token: github_token, auto_paginate: true)
11
14
 
12
15
  raise "invalid params in #{self.class.name}" if response.nil? || request.nil? || redis.nil?
13
16
 
@@ -21,22 +24,58 @@ module Lita
21
24
  end
22
25
 
23
26
  def message
24
- status = Status.new({comment: issue_body}).comment_status
25
-
27
+ self.status = repo_status(payload["repository"]["full_name"], payload["issue"])
26
28
  if !status.empty?
27
- if status[:emoji] == Lita::GithubPrList::Status::PASS_EMOJI
28
- "@#{issue_owner} your pull request: #{issue_title} has passed. #{issue_html_url}"
29
- elsif status[:emoji] == Lita::GithubPrList::Status::REVIEW_EMOJI
29
+ if status.include? Lita::GithubPrList::Status::PASS_DEV_EMOJI
30
+ pass_dev?
31
+ elsif status.include? Lita::GithubPrList::Status::PASS_DESIGN_EMOJI
32
+ pass_design?
33
+ elsif status.include? Lita::GithubPrList::Status::REVIEW_EMOJI
30
34
  "@#{commenter} is currently reviewing: #{issue_title}. #{issue_html_url}"
31
- elsif status[:emoji] == Lita::GithubPrList::Status::FAIL_EMOJI
35
+ elsif status.include? Lita::GithubPrList::Status::FAIL_EMOJI
32
36
  "@#{issue_owner} your pull request: #{issue_title} has failed. #{issue_html_url}"
33
- elsif status[:emoji] == Lita::GithubPrList::Status::FIXED_EMOJI
37
+ elsif status.include? Lita::GithubPrList::Status::FIXED_EMOJI
34
38
  "#{issue_title} has been fixed: #{issue_html_url}"
35
39
  end
36
40
  else
37
41
  nil
38
42
  end
39
43
  end
44
+
45
+ private
46
+ def pass_dev?
47
+ if self.status.include? Lita::GithubPrList::Status::PASS_DESIGN_EMOJI
48
+ "@#{issue_owner} your pull request: #{issue_title} has passed. #{issue_html_url}"
49
+ else
50
+ resp = "@#{issue_owner} your pull request: #{issue_title} has passed DEV REVIEW. #{issue_html_url}"
51
+ if self.status.include?(Lita::GithubPrList::Status::DESIGN_REVIEW_REQUIRED) && !status.include?(Lita::GithubPrList::Status::PASS_DESIGN_EMOJI)
52
+ resp += " - You still require DESIGN REVIEW"
53
+ end
54
+ resp
55
+ end
56
+ end
57
+
58
+ def pass_design?
59
+ resp = "@#{issue_owner} your pull request: #{issue_title} has passed DESIGN. #{issue_html_url}"
60
+ if self.status.include?(Lita::GithubPrList::Status::DEV_REVIEW_REQUIRED) && !status.match(Lita::GithubPrList::Status::PASS_DEV_EMOJI)
61
+ resp += " - You still require DEV REVIEW"
62
+ end
63
+ resp
64
+ end
65
+
66
+ def repo_status(repo_full_name, issue)
67
+ status_object = Lita::GithubPrList::Status.new(comment: ":new: " + issue["body"])
68
+ status = status_object.comment_status
69
+ comments(repo_full_name, issue["number"]).each do |c|
70
+ status = status_object.update(c.body)
71
+ end
72
+ status
73
+ end
74
+
75
+ def comments(repo_full_name, issue_number, options = nil)
76
+ github_options = options || { direction: 'asc', sort: 'created' }
77
+ github_client.issue_comments(repo_full_name, issue_number, github_options)
78
+ end
40
79
  end
41
80
  end
42
- end
81
+ end
@@ -34,19 +34,18 @@ module Lita
34
34
 
35
35
  def build_summary
36
36
  github_pull_requests.map do |pr_issue|
37
- status = repo_status("#{pr_issue.repository.full_name}", pr_issue.number)
37
+ status = repo_status("#{pr_issue.repository.full_name}", pr_issue)
38
38
  "#{pr_issue.repository.name} #{status} #{pr_issue.title} #{pr_issue.pull_request.html_url}"
39
39
  end
40
40
  end
41
41
 
42
- def repo_status(repo_full_name, issue_number)
43
- status = { emoji: "(new)", status: "New" }
44
-
45
- comments(repo_full_name, issue_number).each do |c|
46
- status = Lita::GithubPrList::Status.new(comment: c.body, status: status).comment_status
42
+ def repo_status(repo_full_name, issue)
43
+ status_object = Lita::GithubPrList::Status.new(comment: ":new: " + issue.body)
44
+ status = status_object.comment_status
45
+ comments(repo_full_name, issue.number).each do |c|
46
+ status = status_object.update(c.body)
47
47
  end
48
-
49
- status[:emoji]
48
+ status
50
49
  end
51
50
 
52
51
  def comments(repo_full_name, issue_number, options = nil)
@@ -55,4 +54,4 @@ module Lita
55
54
  end
56
55
  end
57
56
  end
58
- end
57
+ end
@@ -1,44 +1,93 @@
1
1
  module Lita
2
2
  module GithubPrList
3
3
  class Status
4
- attr_accessor :comment, :status,
5
- :pass_regex, :review_regex, :fail_regex, :fixed_regex
4
+ attr_accessor :comment, :base, :dev, :design
6
5
 
7
- PASS_REGEX = /:elephant: :elephant: :elephant:/
6
+ DESIGN_REVIEW_REGEX = /:art:/
7
+ DEV_REVIEW_REGEX = /:elephant:/
8
+ PASS_DEV_REGEX = /:elephant: :elephant: :elephant:/
9
+ PASS_DESIGN_REGEX = /:art: :art: :art:/
8
10
  REVIEW_REGEX = /:book:/
9
11
  FAIL_REGEX = /:poop:|:hankey:/
10
12
  FIXED_REGEX = /:wave:/
13
+ NEW_REGEX = /:new:/
11
14
 
12
- PASS_EMOJI = "(elephant)(elephant)(elephant)"
15
+ DESIGN_REVIEW_REQUIRED = "(art)"
16
+ DEV_REVIEW_REQUIRED = "(elephant)"
17
+ PASS_DEV_EMOJI = "(elephant)(elephant)(elephant)"
18
+ PASS_DESIGN_EMOJI = "(art)(art)(art)"
13
19
  REVIEW_EMOJI = "(book)"
14
20
  FAIL_EMOJI = "(poop)"
15
21
  FIXED_EMOJI = "(wave)"
22
+ NEW_EMOJI = "(new)"
16
23
 
17
24
  def initialize(params = {})
18
25
  self.comment = params.fetch(:comment, nil)
19
- self.status = params.fetch(:status, {})
20
-
26
+ self.base = "(new)"
27
+ setup(comment)
21
28
  raise "invalid params in #{self.class.name}" if comment.nil?
22
29
  end
23
30
 
24
31
  def comment_status
25
- case self.comment
26
- when PASS_REGEX
27
- status[:emoji] = PASS_EMOJI
28
- status[:status] = "Passed"
32
+ case base
33
+ when REVIEW_REGEX, FAIL_REGEX
34
+ base
35
+ else
36
+ "#{base}#{dev}#{design}"
37
+ end
38
+ end
39
+
40
+ def update(new_comment)
41
+ parse_dev(new_comment) unless self.dev.empty?
42
+ parse_design(new_comment) unless self.design.empty?
43
+ parse_common(new_comment)
44
+ self.comment = new_comment
45
+ comment_status
46
+ end
47
+
48
+ private
49
+
50
+ def parse_dev(comm)
51
+ case comm
52
+ when PASS_DEV_REGEX
53
+ self.base = ""
54
+ self.dev = PASS_DEV_EMOJI
55
+ when DEV_REVIEW_REGEX, FAIL_REGEX, FIXED_REGEX
56
+ self.dev = DEV_REVIEW_REQUIRED
57
+ end
58
+ end
59
+
60
+ def parse_design(comm)
61
+ case comm
62
+ when PASS_DESIGN_REGEX
63
+ self.base = ""
64
+ self.design = PASS_DESIGN_EMOJI
65
+ when DESIGN_REVIEW_REGEX, FAIL_REGEX, FIXED_REGEX
66
+ self.design = DESIGN_REVIEW_REQUIRED
67
+ end
68
+ end
69
+
70
+ def parse_common(comm)
71
+ case comm
29
72
  when REVIEW_REGEX
30
- status[:emoji] = REVIEW_EMOJI
31
- status[:status] = "In Review"
73
+ self.base = REVIEW_EMOJI
32
74
  when FAIL_REGEX
33
- status[:emoji] = FAIL_EMOJI
34
- status[:status] = "Failed"
75
+ self.base = FAIL_EMOJI
35
76
  when FIXED_REGEX
36
- status[:emoji] = FIXED_EMOJI
37
- status[:status] = "Fixed"
77
+ self.base = FIXED_EMOJI
78
+ when NEW_REGEX
79
+ self.base = NEW_EMOJI
38
80
  end
81
+ end
39
82
 
40
- status
83
+ def setup(comm)
84
+ self.design = DESIGN_REVIEW_REQUIRED if comm.match(DESIGN_REVIEW_REGEX)
85
+ self.dev = DEV_REVIEW_REQUIRED if comm.match(DEV_REVIEW_REGEX)
86
+ if !comm.match(DESIGN_REVIEW_REGEX) && !comm.match(DEV_REVIEW_REGEX)
87
+ self.dev = DEV_REVIEW_REQUIRED
88
+ self.design = DESIGN_REVIEW_REQUIRED
89
+ end
41
90
  end
42
91
  end
43
92
  end
44
- end
93
+ end
@@ -1,5 +1,5 @@
1
1
  module Lita
2
2
  module GithubPrList
3
- VERSION = "0.0.21"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -54,7 +54,7 @@ module Lita
54
54
  end
55
55
 
56
56
  def comment_hook(request, response)
57
- message = Lita::GithubPrList::CommentHook.new({ request: request, response: response, redis: redis }).message
57
+ message = Lita::GithubPrList::CommentHook.new({ request: request, response: response, redis: redis, github_organization: github_organization, github_token: github_access_token}).message
58
58
  message_rooms(message, response)
59
59
  end
60
60
 
@@ -130,7 +130,6 @@ module Lita
130
130
  Lita.config.handlers.github_pr_list.pull_request_open_message_hook_event_type
131
131
  end
132
132
  end
133
-
134
133
  Lita.register_handler(GithubPrList)
135
134
 
136
135
  end
@@ -6,8 +6,8 @@ require 'lita/github_pr_list/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "lita-github_pr_list"
8
8
  spec.version = Lita::GithubPrList::VERSION
9
- spec.authors = ["Michael van den Beuken", "Ruben Estevez", "Jordan Babe", "Mathieu Gilbert", "Ryan Jones", "Darko Dosenovic"]
10
- spec.email = ["michael.beuken@gmail.com", "ruben.a.estevez@gmail.com", "jorbabe@gmail.com", "mathieu.gilbert@ama.ab.ca", "ryan.michael.jones@gmail.com", "darko.dosenovic@ama.ab.ca"]
9
+ spec.authors = ["Michael van den Beuken", "Ruben Estevez", "Jordan Babe", "Mathieu Gilbert", "Ryan Jones", "Darko Dosenovic", "Jonathan Weyermann", "Adam Melnyk"]
10
+ spec.email = ["michael.beuken@gmail.com", "ruben.a.estevez@gmail.com", "jorbabe@gmail.com", "mathieu.gilbert@ama.ab.ca", "ryan.michael.jones@gmail.com", "darko.dosenovic@ama.ab.ca", "jonathan.weyermann@ama.ab.ca", "adam.melnyk@ama.ab.ca"]
11
11
  spec.summary = %q{List open pull requests for an organization.}
12
12
  spec.description = %q{List open pull requests for an organization.}
13
13
  spec.homepage = "https://github.com/amaabca/lita-github_pr_list"
@@ -0,0 +1,180 @@
1
+ {
2
+ "action": "created",
3
+ "issue": {
4
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/47",
5
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/47/labels{/name}",
6
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/47/comments",
7
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/47/events",
8
+ "html_url": "https://github.com/baxterthehacker/public-repo/issues/47",
9
+ "id": 36913817,
10
+ "number": 47,
11
+ "title": "Spelling error in the README file",
12
+ "user": {
13
+ "login": "mcwaffle1234",
14
+ "id": 6752317,
15
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?",
16
+ "gravatar_id": "258ae60b5512c8402b93673b7478d9c6",
17
+ "url": "https://api.github.com/users/baxterthehacker",
18
+ "html_url": "https://github.com/baxterthehacker",
19
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
20
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
21
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
22
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
23
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
24
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
25
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
26
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
27
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
28
+ "type": "User",
29
+ "site_admin": false
30
+ },
31
+ "labels": [
32
+ {
33
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug",
34
+ "name": "bug",
35
+ "color": "fc2929"
36
+ }
37
+ ],
38
+ "state": "open",
39
+ "assignee": null,
40
+ "milestone": null,
41
+ "comments": 1,
42
+ "created_at": "2014-07-01T17:21:15Z",
43
+ "updated_at": "2014-07-01T17:21:15Z",
44
+ "closed_at": null,
45
+ "body": "It looks like you accidently spelled 'commit' with two 't's."
46
+ },
47
+ "comment": {
48
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments/47684681",
49
+ "html_url": "https://github.com/baxterthehacker/public-repo/issues/47#issuecomment-47684681",
50
+ "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/47",
51
+ "id": 47684681,
52
+ "user": {
53
+ "login": "baxterthehacker",
54
+ "id": 6752317,
55
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?",
56
+ "gravatar_id": "258ae60b5512c8402b93673b7478d9c6",
57
+ "url": "https://api.github.com/users/baxterthehacker",
58
+ "html_url": "https://github.com/baxterthehacker",
59
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
60
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
61
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
62
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
63
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
64
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
65
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
66
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
67
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
68
+ "type": "User",
69
+ "site_admin": false
70
+ },
71
+ "created_at": "2014-07-01T17:21:15Z",
72
+ "updated_at": "2014-07-01T17:21:15Z",
73
+ "body": "Passed DESIGN :art: :art: :art:"
74
+ },
75
+ "repository": {
76
+ "id": 20000106,
77
+ "name": "public-repo",
78
+ "full_name": "baxterthehacker/public-repo",
79
+ "owner": {
80
+ "login": "baxterthehacker",
81
+ "id": 6752317,
82
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?",
83
+ "gravatar_id": "258ae60b5512c8402b93673b7478d9c6",
84
+ "url": "https://api.github.com/users/baxterthehacker",
85
+ "html_url": "https://github.com/baxterthehacker",
86
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
87
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
88
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
89
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
90
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
91
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
92
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
93
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
94
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
95
+ "type": "User",
96
+ "site_admin": false
97
+ },
98
+ "private": false,
99
+ "html_url": "https://github.com/baxterthehacker/public-repo",
100
+ "description": "",
101
+ "fork": false,
102
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
103
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
104
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
105
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
106
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
107
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
108
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
109
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
110
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
111
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
112
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
113
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
114
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
115
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
116
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
117
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
118
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
119
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
120
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
121
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
122
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
123
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
124
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
125
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
126
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments/{number}",
127
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
128
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
129
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
130
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
131
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
132
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
133
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
134
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
135
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
136
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
137
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
138
+ "created_at": "2014-05-20T22:39:43Z",
139
+ "updated_at": "2014-07-01T17:17:43Z",
140
+ "pushed_at": "2014-07-01T17:21:15Z",
141
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
142
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
143
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
144
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
145
+ "homepage": null,
146
+ "size": 569,
147
+ "stargazers_count": 0,
148
+ "watchers_count": 0,
149
+ "language": null,
150
+ "has_issues": true,
151
+ "has_downloads": true,
152
+ "has_wiki": true,
153
+ "forks_count": 0,
154
+ "mirror_url": null,
155
+ "open_issues_count": 24,
156
+ "forks": 0,
157
+ "open_issues": 24,
158
+ "watchers": 0,
159
+ "default_branch": "master"
160
+ },
161
+ "sender": {
162
+ "login": "baxterthehacker",
163
+ "id": 6752317,
164
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?",
165
+ "gravatar_id": "258ae60b5512c8402b93673b7478d9c6",
166
+ "url": "https://api.github.com/users/baxterthehacker",
167
+ "html_url": "https://github.com/baxterthehacker",
168
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
169
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
170
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
171
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
172
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
173
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
174
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
175
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
176
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
177
+ "type": "User",
178
+ "site_admin": false
179
+ }
180
+ }