contribution-checker 0.1.1 → 0.1.2

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: 12f84acc057e88e25dbbcc411e9b45d158312c71
4
- data.tar.gz: a9e1487a52039a654a49e288809eb75134bf38d0
3
+ metadata.gz: 64faf1285c529439e42567dd4b5939f3023ecb73
4
+ data.tar.gz: 4ce901456e65bc0557cac3247d2f878fda16a441
5
5
  SHA512:
6
- metadata.gz: 5a4bf963fbea1af77db0e86001d7052fe2a9eb17e771984bb4707c9d70585816cfa3edb4c1121ebe02de016568ec0f1ae689d3b28be7591b1817d64dfd631e82
7
- data.tar.gz: 69269ac23e769db4d6c35b428fa0c99e5fdb3d4248f01b6c4c1c469ccfc937d09604f993e26ea243f85c78ea781fa3bda287408119b967b2b9a3012d70ce8372
6
+ metadata.gz: 8127ee4db227492ce04c7d4596383ce683e8e4d7c07e672ffc5fd603a6f6a369dcc793479551faf6f6e77047174bd2b74e55d4542c944f0b35450ef99036fc7c
7
+ data.tar.gz: 3a5b17238889df991c265c73e91894e659a730f26d8e2a59702af1dcd366f743d534b1c79181ae75b7c43ee132ec0b2d83f30d220fd5b2dc00f613d586b2d5c0
@@ -24,5 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
26
26
  spec.add_development_dependency "webmock"
27
+ spec.add_development_dependency "simplecov"
28
+ spec.add_development_dependency "coveralls"
27
29
 
28
30
  end
@@ -171,7 +171,7 @@ module ContributionChecker
171
171
  #
172
172
  # @return [Boolean]
173
173
  def user_is_repo_org_member?
174
- return false if @repo[:owner] != "Organization"
174
+ return false if @repo[:owner][:type] != "Organization"
175
175
  @client.organization_member? @repo[:owner][:login], @user[:login]
176
176
  end
177
177
 
@@ -1,3 +1,3 @@
1
1
  module ContributionChecker
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -47,7 +47,7 @@ describe ContributionChecker::Checker do
47
47
  end
48
48
  end
49
49
 
50
- context "when a commit is successfully checked" do
50
+ context "when a commit is in the default branch and is successfully checked" do
51
51
  let(:checker) { checker = ContributionChecker::Checker.new \
52
52
  :access_token => "token",
53
53
  :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
@@ -65,7 +65,344 @@ describe ContributionChecker::Checker do
65
65
  stub_get("/user/emails").
66
66
  to_return(json_response("emails.json"))
67
67
  stub_get("/user/starred/jdennes/contribution-checker").
68
- to_return(:return => 404)
68
+ to_return(:status => 404)
69
+ end
70
+
71
+ it "returns the check result" do
72
+ result = checker.check
73
+ expect(result).to be_a(Hash)
74
+
75
+ expect(result[:contribution]).to eq(true)
76
+
77
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
78
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
79
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
80
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
81
+
82
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
83
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
84
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
85
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(false)
86
+ end
87
+ end
88
+
89
+ context "when a commit is completely seperate to the default branch but is in gh-pages" do
90
+ let(:checker) { checker = ContributionChecker::Checker.new \
91
+ :access_token => "token",
92
+ :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
93
+ }
94
+
95
+ before do
96
+ stub_get("/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
97
+ to_return(json_response("commit.json"))
98
+ stub_get("/repos/jdennes/contribution-checker").
99
+ to_return(json_response("repo.json"))
100
+ stub_get("/user").
101
+ to_return(json_response("user.json"))
102
+ stub_get("/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
103
+ to_return(:status => 404)
104
+ stub_get("/repos/jdennes/contribution-checker/compare/gh-pages...731e83d4abf1bd67ac6ab68d18387693482e47cf").
105
+ to_return(json_response("gh-pages_compare.json"))
106
+ stub_get("/user/emails").
107
+ to_return(json_response("emails.json"))
108
+ stub_get("/user/starred/jdennes/contribution-checker").
109
+ to_return(:status => 404)
110
+ end
111
+
112
+ it "returns the check result" do
113
+ result = checker.check
114
+ expect(result).to be_a(Hash)
115
+
116
+ expect(result[:contribution]).to eq(true)
117
+
118
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
119
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
120
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
121
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
122
+
123
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
124
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
125
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
126
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(false)
127
+ end
128
+ end
129
+
130
+ context "when a commit is ahead of the default branch but is in gh-pages" do
131
+ let(:checker) { checker = ContributionChecker::Checker.new \
132
+ :access_token => "token",
133
+ :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
134
+ }
135
+
136
+ before do
137
+ stub_get("/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
138
+ to_return(json_response("commit.json"))
139
+ stub_get("/repos/jdennes/contribution-checker").
140
+ to_return(json_response("repo.json"))
141
+ stub_get("/user").
142
+ to_return(json_response("user.json"))
143
+ stub_get("/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
144
+ to_return(json_response("default_compare_ahead.json"))
145
+ stub_get("/repos/jdennes/contribution-checker/compare/gh-pages...731e83d4abf1bd67ac6ab68d18387693482e47cf").
146
+ to_return(json_response("gh-pages_compare.json"))
147
+ stub_get("/user/emails").
148
+ to_return(json_response("emails.json"))
149
+ stub_get("/user/starred/jdennes/contribution-checker").
150
+ to_return(:status => 404)
151
+ end
152
+
153
+ it "returns the check result" do
154
+ result = checker.check
155
+ expect(result).to be_a(Hash)
156
+
157
+ expect(result[:contribution]).to eq(true)
158
+
159
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
160
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
161
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
162
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
163
+
164
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
165
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
166
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
167
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(false)
168
+ end
169
+ end
170
+
171
+ context "when a commit is not in the default branch and not in gh-pages" do
172
+ let(:checker) { checker = ContributionChecker::Checker.new \
173
+ :access_token => "token",
174
+ :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
175
+ }
176
+
177
+ before do
178
+ stub_get("/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
179
+ to_return(json_response("commit.json"))
180
+ stub_get("/repos/jdennes/contribution-checker").
181
+ to_return(json_response("repo.json"))
182
+ stub_get("/user").
183
+ to_return(json_response("user.json"))
184
+ stub_get("/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
185
+ to_return(:status => 404)
186
+ stub_get("/repos/jdennes/contribution-checker/compare/gh-pages...731e83d4abf1bd67ac6ab68d18387693482e47cf").
187
+ to_return(:status => 404)
188
+ stub_get("/user/emails").
189
+ to_return(json_response("emails.json"))
190
+ stub_get("/user/starred/jdennes/contribution-checker").
191
+ to_return(:status => 404)
192
+ end
193
+
194
+ it "returns the check result" do
195
+ result = checker.check
196
+ expect(result).to be_a(Hash)
197
+
198
+ expect(result[:contribution]).to eq(false)
199
+
200
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(false)
201
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
202
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
203
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
204
+
205
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
206
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
207
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
208
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(false)
209
+ end
210
+ end
211
+
212
+
213
+ context "when a commit is in the default branch and the user is a member of the org owning the repository" do
214
+ let(:checker) { checker = ContributionChecker::Checker.new \
215
+ :access_token => "token",
216
+ :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
217
+ }
218
+
219
+ before do
220
+ stub_get("/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
221
+ to_return(json_response("commit.json"))
222
+ stub_get("/repos/jdennes/contribution-checker").
223
+ to_return(json_response("org_owned_repo.json"))
224
+ stub_get("/user").
225
+ to_return(json_response("user.json"))
226
+ stub_get("/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
227
+ to_return(json_response("default_compare.json"))
228
+ stub_get("/user/emails").
229
+ to_return(json_response("emails.json"))
230
+ stub_get("/user/starred/jdennes/contribution-checker").
231
+ to_return(:status => 404)
232
+ stub_get("/orgs/github/members/jdennes").
233
+ to_return(:status => 204)
234
+ end
235
+
236
+ it "returns the check result" do
237
+ result = checker.check
238
+ expect(result).to be_a(Hash)
239
+
240
+ expect(result[:contribution]).to eq(true)
241
+
242
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
243
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
244
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
245
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
246
+
247
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
248
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
249
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(true)
250
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(false)
251
+ end
252
+ end
253
+
254
+ context "when a commit is in the default branch and the user has a fork of the repository" do
255
+ let(:checker) { checker = ContributionChecker::Checker.new \
256
+ :access_token => "token",
257
+ :commit_url => "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
258
+ }
259
+
260
+ before do
261
+ stub_get("/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
262
+ to_return(json_response("commit.json"))
263
+ stub_get("/repos/jdennes/contribution-checker").
264
+ to_return(json_response("repo_with_forks.json"))
265
+ stub_get("/user").
266
+ to_return(json_response("user.json"))
267
+ stub_get("/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
268
+ to_return(json_response("default_compare.json"))
269
+ stub_get("/user/emails").
270
+ to_return(json_response("emails.json"))
271
+ stub_get("/user/starred/jdennes/contribution-checker").
272
+ to_return(:status => 404)
273
+ stub_get("/repos/jdennes/contribution-checker/forks?per_page=100").
274
+ to_return(json_response("repo_forks.json"))
275
+ end
276
+
277
+ it "returns the check result" do
278
+ result = checker.check
279
+ expect(result).to be_a(Hash)
280
+
281
+ expect(result[:contribution]).to eq(true)
282
+
283
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
284
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
285
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
286
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
287
+
288
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
289
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
290
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
291
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(true)
292
+ end
293
+ end
294
+
295
+ context "when a commit is in the default branch and there are too many forks of the repository to check them all" do
296
+ let(:checker) { checker = ContributionChecker::Checker.new \
297
+ :access_token => "token",
298
+ :commit_url => "https://github.com/someone/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
299
+ }
300
+
301
+ before do
302
+ stub_get("/repos/someone/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
303
+ to_return(json_response("commit.json"))
304
+ stub_get("/repos/someone/contribution-checker").
305
+ to_return(json_response("repo_with_too_many_forks.json"))
306
+ stub_get("/user").
307
+ to_return(json_response("user.json"))
308
+ stub_get("/repos/someone/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
309
+ to_return(json_response("default_compare.json"))
310
+ stub_get("/user/emails").
311
+ to_return(json_response("emails.json"))
312
+ stub_get("/user/starred/someone/contribution-checker").
313
+ to_return(:status => 404)
314
+ stub_get("/repos/jdennes/contribution-checker").
315
+ to_return(json_response("potential_fork.json"))
316
+ end
317
+
318
+ it "returns the check result" do
319
+ result = checker.check
320
+ expect(result).to be_a(Hash)
321
+
322
+ expect(result[:contribution]).to eq(true)
323
+
324
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
325
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
326
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
327
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
328
+
329
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
330
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
331
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
332
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(true)
333
+ end
334
+ end
335
+
336
+ context "when a commit is in the default branch and the user's forks are checked" do
337
+ let(:checker) { checker = ContributionChecker::Checker.new \
338
+ :access_token => "token",
339
+ :commit_url => "https://github.com/someone/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
340
+ }
341
+
342
+ before do
343
+ stub_get("/repos/someone/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
344
+ to_return(json_response("commit.json"))
345
+ stub_get("/repos/someone/contribution-checker").
346
+ to_return(json_response("repo_with_too_many_forks.json"))
347
+ stub_get("/user").
348
+ to_return(json_response("user.json"))
349
+ stub_get("/repos/someone/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
350
+ to_return(json_response("default_compare.json"))
351
+ stub_get("/user/emails").
352
+ to_return(json_response("emails.json"))
353
+ stub_get("/user/starred/someone/contribution-checker").
354
+ to_return(:status => 404)
355
+ stub_get("/repos/jdennes/contribution-checker").
356
+ to_return(:status => 404)
357
+ stub_get("/user/repos?per_page=100").
358
+ to_return(json_response("user_repos.json"))
359
+ stub_get("/repos/jdennes/myfork").
360
+ to_return(json_response("user_fork.json"))
361
+ end
362
+
363
+ it "returns the check result" do
364
+ result = checker.check
365
+ expect(result).to be_a(Hash)
366
+
367
+ expect(result[:contribution]).to eq(true)
368
+
369
+ expect(result[:and_criteria][:commit_in_valid_branch]).to eq(true)
370
+ expect(result[:and_criteria][:commit_in_last_year]).to eq(true)
371
+ expect(result[:and_criteria][:repo_not_a_fork]).to eq(true)
372
+ expect(result[:and_criteria][:commit_email_linked_to_user]).to eq(true)
373
+
374
+ expect(result[:or_criteria][:user_has_starred_repo]).to eq(false)
375
+ expect(result[:or_criteria][:user_can_push_to_repo]).to eq(true)
376
+ expect(result[:or_criteria][:user_is_repo_org_member]).to eq(false)
377
+ expect(result[:or_criteria][:user_has_fork_of_repo]).to eq(true)
378
+ end
379
+ end
380
+
381
+ context "when a commit is in the default branch and the user's forks are checked and fails" do
382
+ let(:checker) { checker = ContributionChecker::Checker.new \
383
+ :access_token => "token",
384
+ :commit_url => "https://github.com/someone/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf"
385
+ }
386
+
387
+ before do
388
+ stub_get("/repos/someone/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf").
389
+ to_return(json_response("commit.json"))
390
+ stub_get("/repos/someone/contribution-checker").
391
+ to_return(json_response("repo_with_too_many_forks.json"))
392
+ stub_get("/user").
393
+ to_return(json_response("user.json"))
394
+ stub_get("/repos/someone/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf").
395
+ to_return(json_response("default_compare.json"))
396
+ stub_get("/user/emails").
397
+ to_return(json_response("emails.json"))
398
+ stub_get("/user/starred/someone/contribution-checker").
399
+ to_return(:status => 404)
400
+ stub_get("/repos/jdennes/contribution-checker").
401
+ to_return(:status => 404)
402
+ stub_get("/user/repos?per_page=100").
403
+ to_return(json_response("user_repos.json"))
404
+ stub_get("/repos/jdennes/myfork").
405
+ to_return(json_response("user_fork_not_matching.json"))
69
406
  end
70
407
 
71
408
  it "returns the check result" do
@@ -0,0 +1,157 @@
1
+ {
2
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf",
3
+ "html_url": "https://github.com/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf",
4
+ "permalink_url": "https://github.com/jdennes/contribution-checker/compare/jdennes:8007252...jdennes:731e83d",
5
+ "diff_url": "https://github.com/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf.diff",
6
+ "patch_url": "https://github.com/jdennes/contribution-checker/compare/master...731e83d4abf1bd67ac6ab68d18387693482e47cf.patch",
7
+ "base_commit": {
8
+ "sha": "80072520cb4a9dc70dabbc61492d94c962abdc0b",
9
+ "commit": {
10
+ "author": {
11
+ "name": "James Dennes",
12
+ "email": "example@example.com",
13
+ "date": "2014-06-08T22:47:15Z"
14
+ },
15
+ "committer": {
16
+ "name": "James Dennes",
17
+ "email": "example@example.com",
18
+ "date": "2014-06-08T22:47:15Z"
19
+ },
20
+ "message": "Add ContributionChecker::InvalidAccessTokenError",
21
+ "tree": {
22
+ "sha": "bad7a5547a5b973d74492aba53adb1da02aecb9c",
23
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/git/trees/bad7a5547a5b973d74492aba53adb1da02aecb9c"
24
+ },
25
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/git/commits/80072520cb4a9dc70dabbc61492d94c962abdc0b",
26
+ "comment_count": 0
27
+ },
28
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/commits/80072520cb4a9dc70dabbc61492d94c962abdc0b",
29
+ "html_url": "https://github.com/jdennes/contribution-checker/commit/80072520cb4a9dc70dabbc61492d94c962abdc0b",
30
+ "comments_url": "https://api.github.com/repos/jdennes/contribution-checker/commits/80072520cb4a9dc70dabbc61492d94c962abdc0b/comments",
31
+ "author": {
32
+ "login": "jdennes",
33
+ "id": 65057,
34
+ "avatar_url": "https://avatars.githubusercontent.com/u/65057?",
35
+ "gravatar_id": "55fd031da91ef9af6e6ed88b101416a1",
36
+ "url": "https://api.github.com/users/jdennes",
37
+ "html_url": "https://github.com/jdennes",
38
+ "followers_url": "https://api.github.com/users/jdennes/followers",
39
+ "following_url": "https://api.github.com/users/jdennes/following{/other_user}",
40
+ "gists_url": "https://api.github.com/users/jdennes/gists{/gist_id}",
41
+ "starred_url": "https://api.github.com/users/jdennes/starred{/owner}{/repo}",
42
+ "subscriptions_url": "https://api.github.com/users/jdennes/subscriptions",
43
+ "organizations_url": "https://api.github.com/users/jdennes/orgs",
44
+ "repos_url": "https://api.github.com/users/jdennes/repos",
45
+ "events_url": "https://api.github.com/users/jdennes/events{/privacy}",
46
+ "received_events_url": "https://api.github.com/users/jdennes/received_events",
47
+ "type": "User",
48
+ "site_admin": true
49
+ },
50
+ "committer": {
51
+ "login": "jdennes",
52
+ "id": 65057,
53
+ "avatar_url": "https://avatars.githubusercontent.com/u/65057?",
54
+ "gravatar_id": "55fd031da91ef9af6e6ed88b101416a1",
55
+ "url": "https://api.github.com/users/jdennes",
56
+ "html_url": "https://github.com/jdennes",
57
+ "followers_url": "https://api.github.com/users/jdennes/followers",
58
+ "following_url": "https://api.github.com/users/jdennes/following{/other_user}",
59
+ "gists_url": "https://api.github.com/users/jdennes/gists{/gist_id}",
60
+ "starred_url": "https://api.github.com/users/jdennes/starred{/owner}{/repo}",
61
+ "subscriptions_url": "https://api.github.com/users/jdennes/subscriptions",
62
+ "organizations_url": "https://api.github.com/users/jdennes/orgs",
63
+ "repos_url": "https://api.github.com/users/jdennes/repos",
64
+ "events_url": "https://api.github.com/users/jdennes/events{/privacy}",
65
+ "received_events_url": "https://api.github.com/users/jdennes/received_events",
66
+ "type": "User",
67
+ "site_admin": true
68
+ },
69
+ "parents": [
70
+ {
71
+ "sha": "1a048d7745c5ea48eff015063f49369d6c7c3913",
72
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/commits/1a048d7745c5ea48eff015063f49369d6c7c3913",
73
+ "html_url": "https://github.com/jdennes/contribution-checker/commit/1a048d7745c5ea48eff015063f49369d6c7c3913"
74
+ }
75
+ ]
76
+ },
77
+ "merge_base_commit": {
78
+ "sha": "731e83d4abf1bd67ac6ab68d18387693482e47cf",
79
+ "commit": {
80
+ "author": {
81
+ "name": "James Dennes",
82
+ "email": "example@example.com",
83
+ "date": "2014-06-08T10:25:34Z"
84
+ },
85
+ "committer": {
86
+ "name": "James Dennes",
87
+ "email": "example@example.com",
88
+ "date": "2014-06-08T10:25:34Z"
89
+ },
90
+ "message": "Version 0.0.2",
91
+ "tree": {
92
+ "sha": "30d937ac96b77183e8df7f319acc1e4387516981",
93
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/git/trees/30d937ac96b77183e8df7f319acc1e4387516981"
94
+ },
95
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/git/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf",
96
+ "comment_count": 0
97
+ },
98
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf",
99
+ "html_url": "https://github.com/jdennes/contribution-checker/commit/731e83d4abf1bd67ac6ab68d18387693482e47cf",
100
+ "comments_url": "https://api.github.com/repos/jdennes/contribution-checker/commits/731e83d4abf1bd67ac6ab68d18387693482e47cf/comments",
101
+ "author": {
102
+ "login": "jdennes",
103
+ "id": 65057,
104
+ "avatar_url": "https://avatars.githubusercontent.com/u/65057?",
105
+ "gravatar_id": "55fd031da91ef9af6e6ed88b101416a1",
106
+ "url": "https://api.github.com/users/jdennes",
107
+ "html_url": "https://github.com/jdennes",
108
+ "followers_url": "https://api.github.com/users/jdennes/followers",
109
+ "following_url": "https://api.github.com/users/jdennes/following{/other_user}",
110
+ "gists_url": "https://api.github.com/users/jdennes/gists{/gist_id}",
111
+ "starred_url": "https://api.github.com/users/jdennes/starred{/owner}{/repo}",
112
+ "subscriptions_url": "https://api.github.com/users/jdennes/subscriptions",
113
+ "organizations_url": "https://api.github.com/users/jdennes/orgs",
114
+ "repos_url": "https://api.github.com/users/jdennes/repos",
115
+ "events_url": "https://api.github.com/users/jdennes/events{/privacy}",
116
+ "received_events_url": "https://api.github.com/users/jdennes/received_events",
117
+ "type": "User",
118
+ "site_admin": true
119
+ },
120
+ "committer": {
121
+ "login": "jdennes",
122
+ "id": 65057,
123
+ "avatar_url": "https://avatars.githubusercontent.com/u/65057?",
124
+ "gravatar_id": "55fd031da91ef9af6e6ed88b101416a1",
125
+ "url": "https://api.github.com/users/jdennes",
126
+ "html_url": "https://github.com/jdennes",
127
+ "followers_url": "https://api.github.com/users/jdennes/followers",
128
+ "following_url": "https://api.github.com/users/jdennes/following{/other_user}",
129
+ "gists_url": "https://api.github.com/users/jdennes/gists{/gist_id}",
130
+ "starred_url": "https://api.github.com/users/jdennes/starred{/owner}{/repo}",
131
+ "subscriptions_url": "https://api.github.com/users/jdennes/subscriptions",
132
+ "organizations_url": "https://api.github.com/users/jdennes/orgs",
133
+ "repos_url": "https://api.github.com/users/jdennes/repos",
134
+ "events_url": "https://api.github.com/users/jdennes/events{/privacy}",
135
+ "received_events_url": "https://api.github.com/users/jdennes/received_events",
136
+ "type": "User",
137
+ "site_admin": true
138
+ },
139
+ "parents": [
140
+ {
141
+ "sha": "5514532ab61216d1d7d242fd624a2f215d225a31",
142
+ "url": "https://api.github.com/repos/jdennes/contribution-checker/commits/5514532ab61216d1d7d242fd624a2f215d225a31",
143
+ "html_url": "https://github.com/jdennes/contribution-checker/commit/5514532ab61216d1d7d242fd624a2f215d225a31"
144
+ }
145
+ ]
146
+ },
147
+ "status": "ahead",
148
+ "ahead_by": 10,
149
+ "behind_by": 0,
150
+ "total_commits": 0,
151
+ "commits": [
152
+
153
+ ],
154
+ "files": [
155
+
156
+ ]
157
+ }