lita-github_pr_list 0.0.21 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }