github_api 0.9.7 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/README.md +24 -14
  2. data/features/cassettes/media/get_default.yml +84 -0
  3. data/features/cassettes/media/get_full_json.yml +83 -0
  4. data/features/cassettes/media/get_html_json.yml +81 -0
  5. data/features/cassettes/media/get_raw_json.yml +80 -0
  6. data/features/cassettes/media/get_text_json.yml +80 -0
  7. data/features/cassettes/repos/stats/commits.yml +80 -0
  8. data/features/cassettes/repos/stats/contribs.yml +221 -0
  9. data/features/cassettes/repos/stats/frequency.yml +54 -0
  10. data/features/cassettes/repos/stats/participation.yml +68 -0
  11. data/features/cassettes/repos/stats/punch.yml +76 -0
  12. data/features/cassettes/search/users_keyword.yml +70 -0
  13. data/features/gitignore.feature +1 -1
  14. data/features/media_type.feature +76 -0
  15. data/features/repos/statistics.feature +60 -0
  16. data/features/search.feature +11 -0
  17. data/features/step_definitions/github_api_steps.rb +4 -0
  18. data/lib/github_api.rb +2 -0
  19. data/lib/github_api/arguments.rb +1 -1
  20. data/lib/github_api/authorization.rb +1 -1
  21. data/lib/github_api/connection.rb +5 -7
  22. data/lib/github_api/core_ext/deep_merge.rb +13 -0
  23. data/lib/github_api/git_data/trees.rb +1 -1
  24. data/lib/github_api/gitignore.rb +5 -4
  25. data/lib/github_api/markdown.rb +7 -5
  26. data/lib/github_api/mime_type.rb +19 -41
  27. data/lib/github_api/paged_request.rb +1 -1
  28. data/lib/github_api/parameter_filter.rb +1 -1
  29. data/lib/github_api/params_hash.rb +59 -22
  30. data/lib/github_api/repos.rb +9 -3
  31. data/lib/github_api/repos/pub_sub_hubbub.rb +4 -2
  32. data/lib/github_api/repos/statistics.rb +94 -0
  33. data/lib/github_api/request.rb +17 -28
  34. data/lib/github_api/response_wrapper.rb +8 -0
  35. data/lib/github_api/say.rb +2 -1
  36. data/lib/github_api/scopes.rb +3 -2
  37. data/lib/github_api/search.rb +3 -3
  38. data/lib/github_api/utils/url.rb +5 -2
  39. data/lib/github_api/version.rb +2 -2
  40. data/spec/fixtures/repos/commit_activity.json +15 -0
  41. data/spec/fixtures/repos/contribs.json +20 -0
  42. data/spec/fixtures/repos/frequency.json +7 -0
  43. data/spec/fixtures/repos/participation.json +110 -0
  44. data/spec/fixtures/repos/punch_card.json +17 -0
  45. data/spec/github/arguments/parse_spec.rb +2 -2
  46. data/spec/github/core_ext/deep_merge_spec.rb +23 -0
  47. data/spec/github/git_data/trees/create_spec.rb +6 -0
  48. data/spec/github/gitignore/get_spec.rb +1 -1
  49. data/spec/github/mime_type_spec.rb +24 -55
  50. data/spec/github/params_hash_spec.rb +64 -0
  51. data/spec/github/pull_requests/list_spec.rb +1 -1
  52. data/spec/github/repos/statistics/code_frequency_spec.rb +25 -0
  53. data/spec/github/repos/statistics/commit_activity_spec.rb +29 -0
  54. data/spec/github/repos/statistics/contributors_spec.rb +29 -0
  55. data/spec/github/repos/statistics/participation_spec.rb +25 -0
  56. data/spec/github/repos/statistics/punch_card_spec.rb +25 -0
  57. data/spec/github/request_spec.rb +10 -11
  58. data/spec/github/response_wrapper/overwrites_spec.rb +19 -0
  59. data/spec/github/users/keys/update_spec.rb +1 -1
  60. metadata +73 -34
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "author": {
4
+ "login": "octocat",
5
+ "id": 1,
6
+ "avatar_url": "https://github.com/images/error/octocat_happy.gif",
7
+ "gravatar_id": "somehexcode",
8
+ "url": "https://api.github.com/users/octocat"
9
+ },
10
+ "total": 135,
11
+ "weeks": [
12
+ {
13
+ "w": "1367712000",
14
+ "a": 6898,
15
+ "d": 77,
16
+ "c": 10
17
+ }
18
+ ]
19
+ }
20
+ ]
@@ -0,0 +1,7 @@
1
+ [
2
+ [
3
+ 1302998400,
4
+ 1124,
5
+ -435
6
+ ]
7
+ ]
@@ -0,0 +1,110 @@
1
+ {
2
+ "all": [
3
+ 11,
4
+ 21,
5
+ 15,
6
+ 2,
7
+ 8,
8
+ 1,
9
+ 8,
10
+ 23,
11
+ 17,
12
+ 21,
13
+ 11,
14
+ 10,
15
+ 33,
16
+ 91,
17
+ 38,
18
+ 34,
19
+ 22,
20
+ 23,
21
+ 32,
22
+ 3,
23
+ 43,
24
+ 87,
25
+ 71,
26
+ 18,
27
+ 13,
28
+ 5,
29
+ 13,
30
+ 16,
31
+ 66,
32
+ 27,
33
+ 12,
34
+ 45,
35
+ 110,
36
+ 117,
37
+ 13,
38
+ 8,
39
+ 18,
40
+ 9,
41
+ 19,
42
+ 26,
43
+ 39,
44
+ 12,
45
+ 20,
46
+ 31,
47
+ 46,
48
+ 91,
49
+ 45,
50
+ 10,
51
+ 24,
52
+ 9,
53
+ 29,
54
+ 7
55
+ ],
56
+ "owner": [
57
+ 3,
58
+ 2,
59
+ 3,
60
+ 0,
61
+ 2,
62
+ 0,
63
+ 5,
64
+ 14,
65
+ 7,
66
+ 9,
67
+ 1,
68
+ 5,
69
+ 0,
70
+ 48,
71
+ 19,
72
+ 2,
73
+ 0,
74
+ 1,
75
+ 10,
76
+ 2,
77
+ 23,
78
+ 40,
79
+ 35,
80
+ 8,
81
+ 8,
82
+ 2,
83
+ 10,
84
+ 6,
85
+ 30,
86
+ 0,
87
+ 2,
88
+ 9,
89
+ 53,
90
+ 104,
91
+ 3,
92
+ 3,
93
+ 10,
94
+ 4,
95
+ 7,
96
+ 11,
97
+ 21,
98
+ 4,
99
+ 4,
100
+ 22,
101
+ 26,
102
+ 63,
103
+ 11,
104
+ 2,
105
+ 14,
106
+ 1,
107
+ 10,
108
+ 3
109
+ ]
110
+ }
@@ -0,0 +1,17 @@
1
+ [
2
+ [
3
+ 0,
4
+ 0,
5
+ 5
6
+ ],
7
+ [
8
+ 0,
9
+ 1,
10
+ 43
11
+ ],
12
+ [
13
+ 0,
14
+ 2,
15
+ 21
16
+ ]
17
+ ]
@@ -17,7 +17,7 @@ describe Github::Arguments, '#parse' do
17
17
 
18
18
  it { should == object }
19
19
 
20
- its(:params) { should == params }
20
+ its(:params) { should == {"page" => 23} }
21
21
 
22
22
  context 'sets parameters' do
23
23
  it { subject.api.user.should == 'peter-murach' }
@@ -63,6 +63,6 @@ describe Github::Arguments, '#parse' do
63
63
  let(:required) { [] }
64
64
  let(:arguments) { [params] }
65
65
 
66
- its(:params) { should == params }
66
+ its(:params) { should == {"page" => 23} }
67
67
  end
68
68
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hash, 'deep_merge' do
6
+
7
+ let(:hash) { { :a => 'a', :b => "b", :c => {:c1 => "c1", :c2 => "c2", :c3 => {:d1 => "d1"} } } }
8
+ let(:other_hash) { { :a => 1, :b => "b", :c => {:c1 => 2, :c2 => "c2", :c3 => {:d1 => "d1", :d2 => "d2"} } } }
9
+
10
+ subject { hash.deep_merge(other_hash) }
11
+
12
+ it { expect(subject[:a]).to eql(1) }
13
+
14
+ it { expect(subject[:b]).to eql("b") }
15
+
16
+ it { expect(subject[:c][:c1]).to eql(2) }
17
+
18
+ it { expect(subject[:c][:c2]).to eql("c2") }
19
+
20
+ it { expect(subject[:c][:c3][:d1]).to eql("d1") }
21
+
22
+ it { expect(subject[:c][:c3][:d2]).to eql("d2") }
23
+ end
@@ -49,6 +49,12 @@ describe Github::GitData::Trees, '#create' do
49
49
  tree_sha.should be_a Github::ResponseWrapper
50
50
  end
51
51
 
52
+ it "should not erase the tree data while evaluating params" do
53
+ original_tree = inputs['tree'].dup
54
+ tree_sha = subject.create user, repo, inputs
55
+ inputs['tree'].should == original_tree
56
+ end
57
+
52
58
  it "should get the tree information" do
53
59
  tree_sha = subject.create user, repo, inputs
54
60
  tree_sha.sha.should == sha
@@ -42,7 +42,7 @@ describe Github::Gitignore, '#get' do
42
42
  let(:accept) { 'application/vnd.github.raw' }
43
43
 
44
44
  it "should get the resource" do
45
- subject.get template, 'mime' => 'application/vnd.github.raw'
45
+ subject.get template, 'accept' => 'application/vnd.github.raw'
46
46
  a_get(request_path).should have_been_made
47
47
  end
48
48
  end
@@ -2,69 +2,38 @@ require 'spec_helper'
2
2
 
3
3
  describe Github::MimeType do
4
4
 
5
- let(:github) { Github.new }
5
+ let(:object) { Class.new.extend(described_class) }
6
6
 
7
- it "should lookup mime type for :full" do
8
- github.lookup_mime(:full).should == 'full+json'
9
- end
10
-
11
- it "should lookup mime type for :html" do
12
- github.lookup_mime(:html).should == 'html+json'
13
- end
14
-
15
- it "should lookup mime type for :html" do
16
- github.lookup_mime(:text).should == 'text+json'
17
- end
7
+ context 'lookup' do
8
+ it 'retrieves media type' do
9
+ expect(object.lookup_media('text')).to eql('text+json')
10
+ end
18
11
 
19
- it "should lookup mime type for :raw" do
20
- github.lookup_mime(:raw).should == 'raw+json'
12
+ it 'raises error on unkonwn media type' do
13
+ expect { object.lookup_media('unknown') }.to raise_error(ArgumentError)
14
+ end
21
15
  end
22
16
 
23
- it "should default to json if no parameters given" do
24
- Github.should_receive(:parse).and_return 'application/json'
25
- Github.parse.should == 'application/json'
26
- end
17
+ context 'parse' do
18
+ it 'accepts text' do
19
+ expect(object.parse('text')).to eql('application/vnd.github.v3.text+json')
20
+ end
27
21
 
28
- it "should accept header for 'issue' request" do
29
- Github.should_receive(:parse).with(:issue, :full).
30
- and_return 'application/vnd.github-issue.full+json'
31
- Github.parse(:issue, :full).should == 'application/vnd.github-issue.full+json'
32
- end
22
+ it 'accepts text+json' do
23
+ expect(object.parse('text+json')).to eql('application/vnd.github.v3.text+json')
24
+ end
33
25
 
34
- it "should accept header for 'isssue comment' request" do
35
- Github.should_receive(:parse).with(:issue_comment, :full).
36
- and_return 'application/vnd.github-issuecomment.full+json'
37
- Github.parse(:issue_comment, :full).should == 'application/vnd.github-issuecomment.full+json'
38
- end
26
+ it 'accepts v3.text' do
27
+ expect(object.parse('v3.text')).to eql('application/vnd.github.v3.text+json')
28
+ end
39
29
 
40
- it "should accept header for 'commit comment' request" do
41
- Github.should_receive(:parse).with(:commit_comment, :full).
42
- and_return 'application/vnd.github-commitcomment.full+json'
43
- Github.parse(:commit_comment, :full).should == 'application/vnd.github-commitcomment.full+json'
44
- end
45
-
46
- it "should accept header for 'pull requst' request" do
47
- Github.should_receive(:parse).with(:pull_request, :full).
48
- and_return 'application/vnd.github-pull.full+json'
49
- Github.parse(:pull_request, :full).should == 'application/vnd.github-pull.full+json'
50
- end
51
-
52
- it "should accept header for 'pull comment' request" do
53
- Github.should_receive(:parse).with(:pull_comment, :full).
54
- and_return 'application/vnd.github-pullcomment.full+json'
55
- Github.parse(:pull_comment, :full).should == 'application/vnd.github-pullcomment.full+json'
56
- end
57
-
58
- it "should accept header for 'gist comment' request" do
59
- Github.should_receive(:parse).with(:gist_comment, :full).
60
- and_return 'application/vnd.github-gistcomment.full+json'
61
- Github.parse(:gist_comment, :full).should == 'application/vnd.github-gistcomment.full+json'
62
- end
30
+ it 'accepts v3.text+json' do
31
+ expect(object.parse('v3.text+json')).to eql('application/vnd.github.v3.text+json')
32
+ end
63
33
 
64
- it "should accept header for 'blog' request" do
65
- Github.should_receive(:parse).with(:blob, :blob).
66
- and_return 'application/vnd.github-blob.raw'
67
- Github.parse(:blob, :blob).should == 'application/vnd.github-blob.raw'
34
+ it 'accpets .v3.text' do
35
+ expect(object.parse('.v3.text')).to eql('application/vnd.github.v3.text+json')
36
+ end
68
37
  end
69
38
 
70
39
  end # Github::MimeType
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::ParamsHash do
6
+ let(:object) { described_class }
7
+
8
+ subject { object.new(hash) }
9
+
10
+ context 'converts key to string' do
11
+ let(:hash) { {:foo => 123 }}
12
+
13
+ it { expect(subject).to be_a(Github::ParamsHash)}
14
+
15
+ it { expect(subject['foo']).to eql(123) }
16
+
17
+ it { expect(subject.data).to eql({"foo" => 123}) }
18
+ end
19
+
20
+ context 'media' do
21
+ let(:hash) { {:media => "raw"} }
22
+
23
+ it 'parses media key' do
24
+ expect(subject.media).to eql('application/vnd.github.v3.raw+json')
25
+ end
26
+ end
27
+
28
+ context 'with accept' do
29
+ let(:hash) { {:accept => "application/json"} }
30
+
31
+ it 'overwrites media key' do
32
+ expect(subject.accept).to eql('application/json')
33
+ end
34
+ end
35
+
36
+ context 'without accept' do
37
+ let(:hash) { {} }
38
+
39
+ it 'overwrites media key' do
40
+ expect(subject.accept).to be_nil
41
+ end
42
+ end
43
+
44
+ context 'extract data' do
45
+ let(:hash) { {:data => 'foobar'} }
46
+
47
+ it { expect(subject.data).to eql('foobar') }
48
+ end
49
+
50
+ context 'merges defaults' do
51
+ let(:hash) { { :homepage => "https://tty.github.io" }}
52
+ let(:defaults) {
53
+ { "homepage" => "https://github.com",
54
+ "private" => false}
55
+ }
56
+
57
+ it 'correctly updates values' do
58
+ subject.merge_default(defaults)
59
+ expect(subject['homepage']).to eql("https://tty.github.io")
60
+ expect(subject['private']).to be_false
61
+ end
62
+ end
63
+
64
+ end
@@ -28,7 +28,7 @@ describe Github::PullRequests, '#list' do
28
28
 
29
29
  it "should get the resources" do
30
30
  subject.list user, repo, inputs
31
- a_get(request_path).with(:query => inputs).should have_been_made
31
+ a_get(request_path).with(:query => inputs.except('unrelated')).should have_been_made
32
32
  end
33
33
 
34
34
  it_should_behave_like 'an array of resources' do
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos::Statistics, '#code_frequency' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:request_path) { "/repos/#{user}/#{repo}/stats/code_frequency" }
9
+
10
+ before {
11
+ stub_get(request_path).to_return(:body => body)
12
+ }
13
+
14
+ context "resource found" do
15
+ let(:body) { fixture('repos/frequency.json') }
16
+ let(:status) { 200 }
17
+
18
+ it { expect { subject.code_frequency }.to raise_error(ArgumentError) }
19
+
20
+ it "should get the resources" do
21
+ subject.code_frequency user, repo
22
+ a_get(request_path).should have_been_made
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos::Statistics, '#commit_activity' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:request_path) { "/repos/#{user}/#{repo}/stats/commit_activity" }
9
+
10
+ before {
11
+ stub_get(request_path).to_return(:body => body)
12
+ }
13
+
14
+ context "resource found" do
15
+ let(:body) { fixture('repos/commit_activity.json') }
16
+ let(:status) { 200 }
17
+
18
+ it { expect { subject.commit_activity }.to raise_error(ArgumentError) }
19
+
20
+ it "should get the resources" do
21
+ subject.commit_activity user, repo
22
+ a_get(request_path).should have_been_made
23
+ end
24
+
25
+ it_should_behave_like 'an array of resources' do
26
+ let(:requestable) { subject.commit_activity user, repo }
27
+ end
28
+ end
29
+ end