github_api 0.8.8 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/README.md +2 -1
  2. data/features/cassettes/orgs/members/list.yml +139 -0
  3. data/features/cassettes/orgs/members/list_public.yml +140 -0
  4. data/features/cassettes/orgs/members/member_false.yml +52 -0
  5. data/features/cassettes/orgs/members/member_public_false.yml +55 -0
  6. data/features/cassettes/orgs/members/member_public_true.yml +48 -0
  7. data/features/orgs/members.feature +57 -0
  8. data/lib/github_api/connection.rb +4 -4
  9. data/lib/github_api/orgs/members.rb +28 -35
  10. data/lib/github_api/orgs/teams.rb +14 -13
  11. data/lib/github_api/version.rb +1 -1
  12. data/spec/github/gists/create_spec.rb +64 -0
  13. data/spec/github/gists/delete_spec.rb +31 -0
  14. data/spec/github/gists/edit_spec.rb +60 -0
  15. data/spec/github/gists/fork_spec.rb +41 -0
  16. data/spec/github/gists/get_spec.rb +47 -0
  17. data/spec/github/gists/gists_spec.rb +7 -0
  18. data/spec/github/gists/is_starred_spec.rb +42 -0
  19. data/spec/github/gists/list_spec.rb +78 -0
  20. data/spec/github/gists/star_spec.rb +30 -0
  21. data/spec/github/gists/starred_spec.rb +44 -0
  22. data/spec/github/gists/unstar_spec.rb +30 -0
  23. data/spec/github/orgs/members/conceal_spec.rb +35 -0
  24. data/spec/github/orgs/members/delete_spec.rb +33 -0
  25. data/spec/github/orgs/members/list_spec.rb +82 -0
  26. data/spec/github/orgs/members/member_spec.rb +65 -0
  27. data/spec/github/orgs/members/publicize_spec.rb +35 -0
  28. data/spec/github/orgs/members_spec.rb +0 -277
  29. data/spec/github/orgs/teams/add_member_spec.rb +38 -0
  30. data/spec/github/orgs/teams/add_repo_spec.rb +39 -0
  31. data/spec/github/orgs/teams/create_spec.rb +58 -0
  32. data/spec/github/orgs/teams/delete_spec.rb +36 -0
  33. data/spec/github/orgs/teams/edit_spec.rb +57 -0
  34. data/spec/github/orgs/teams/get_spec.rb +45 -0
  35. data/spec/github/orgs/teams/list_members_spec.rb +49 -0
  36. data/spec/github/orgs/teams/list_repos_spec.rb +49 -0
  37. data/spec/github/orgs/teams/list_spec.rb +49 -0
  38. data/spec/github/orgs/teams/remove_member_spec.rb +40 -0
  39. data/spec/github/orgs/teams/remove_repo_spec.rb +40 -0
  40. data/spec/github/orgs/teams/team_member_spec.rb +40 -0
  41. data/spec/github/orgs/teams/team_repo_spec.rb +43 -0
  42. data/spec/github/orgs/teams_spec.rb +2 -566
  43. metadata +67 -33
  44. data/spec/github/gists_spec.rb +0 -470
@@ -26,10 +26,10 @@ module Github
26
26
  def default_options(options={})
27
27
  {
28
28
  :headers => {
29
- ACCEPT => "application/json" \
30
- "application/vnd.github+json;q=0.7" \
31
- "application/vnd.github.v3.raw+json;q=0.5" \
32
- "application/vnd.github.beta.raw+json;q=0.1",
29
+ ACCEPT => "application/vnd.github.v3.full+json," \
30
+ "application/vnd.github.beta.full+json;q=0.7," \
31
+ "application/vnd.github+json;q=0.5," \
32
+ "application/json;q=0.1",
33
33
  ACCEPT_CHARSET => "utf-8",
34
34
  USER_AGENT => user_agent,
35
35
  CONTENT_TYPE => 'application/json'
@@ -16,26 +16,50 @@ module Github
16
16
  # github.orgs.members.list 'org-name'
17
17
  # github.orgs.members.list 'org-name' { |memb| ... }
18
18
  #
19
+ # List public members
20
+ #
21
+ # Members of an organization can choose to have their membership publicized or not.
22
+ # = Examples
23
+ # github = Github.new
24
+ # github.orgs.members.list 'org-name', :public => true
25
+ # github.orgs.members.list 'org-name', :public => true { |memb| ... }
26
+ #
19
27
  def list(org_name, params={})
20
28
  assert_presence_of org_name
21
29
  normalize! params
22
- response = get_request("/orgs/#{org_name}/members", params)
30
+
31
+ response = if params.delete('public')
32
+ get_request("/orgs/#{org_name}/public_members", params)
33
+ else
34
+ get_request("/orgs/#{org_name}/members", params)
35
+ end
23
36
  return response unless block_given?
24
37
  response.each { |el| yield el }
25
38
  end
26
39
  alias :all :list
27
40
 
28
- # Check if user is a member of an organization
41
+ # Check if user is, publicly or privately, a member of an organization
29
42
  #
30
43
  # = Examples
31
44
  # github = Github.new
32
45
  # github.orgs.members.member? 'org-name', 'member-name'
33
46
  #
47
+ # Check if a user is a public member of an organization
48
+ #
49
+ # = Examples
50
+ # github = Github.new
51
+ # github.orgs.members.member? 'org-name', 'member-name', :public => true
52
+ #
34
53
  def member?(org_name, member_name, params={})
35
54
  assert_presence_of org_name, member_name
36
55
  normalize! params
37
- get_request("/orgs/#{org_name}/members/#{member_name}", params)
38
- true
56
+
57
+ response = if params.delete('public')
58
+ get_request("/orgs/#{org_name}/public_members/#{member_name}", params)
59
+ else
60
+ get_request("/orgs/#{org_name}/members/#{member_name}", params)
61
+ end
62
+ response.status == 204
39
63
  rescue Github::Error::NotFound
40
64
  false
41
65
  end
@@ -55,37 +79,6 @@ module Github
55
79
  end
56
80
  alias :remove :delete
57
81
 
58
- # List public members
59
- # Members of an organization can choose to have their membership publicized or not.
60
- # = Examples
61
- # github = Github.new
62
- # github.orgs.members.list_public 'org-name'
63
- # github.orgs.members.list_public 'org-name' { |memb| ... }
64
- #
65
- def list_public(org_name, params={})
66
- assert_presence_of org_name
67
- normalize! params
68
- response = get_request("/orgs/#{org_name}/public_members", params)
69
- return response unless block_given?
70
- response.each { |el| yield el }
71
- end
72
- alias :public_members :list_public
73
-
74
- # Get if a user is a public member of an organization
75
- #
76
- # = Examples
77
- # github = Github.new
78
- # github.orgs.members.public_member? 'org-name', 'member-name'
79
- #
80
- def public_member?(org_name, member_name, params={})
81
- assert_presence_of org_name, member_name
82
- normalize! params
83
- get_request("/orgs/#{org_name}/public_members/#{member_name}", params)
84
- true
85
- rescue Github::Error::NotFound
86
- false
87
- end
88
-
89
82
  # Publicize a user’s membership
90
83
  #
91
84
  # = Examples
@@ -135,11 +135,11 @@ module Github
135
135
  # github = Github.new :oauth_token => '...'
136
136
  # github.orgs.teams.team_member? 'team-id', 'user-name'
137
137
  #
138
- def team_member?(team_id, member_name, params={})
139
- assert_presence_of team_id, member_name
138
+ def team_member?(team_id, user_name, params={})
139
+ assert_presence_of team_id, user_name
140
140
  normalize! params
141
- get_request("/teams/#{team_id}/members/#{member_name}", params)
142
- true
141
+ response = get_request("/teams/#{team_id}/members/#{user_name}", params)
142
+ response.status == 204
143
143
  rescue Github::Error::NotFound
144
144
  false
145
145
  end
@@ -151,14 +151,15 @@ module Github
151
151
  # github = Github.new :oauth_token => '...'
152
152
  # github.orgs.teams.add_member 'team-id', 'user-name'
153
153
  #
154
- def add_member(team_id, member_name, params={})
155
- assert_presence_of team_id, member_name
154
+ def add_member(team_id, user_name, params={})
155
+ assert_presence_of team_id, user_name
156
156
  normalize! params
157
- put_request("/teams/#{team_id}/members/#{member_name}", params)
157
+ put_request("/teams/#{team_id}/members/#{user_name}", params)
158
158
  end
159
159
  alias :add_team_member :add_member
160
160
 
161
161
  # Remove a team member
162
+ #
162
163
  # In order to remove a user from a team, the authenticated user must
163
164
  # have ‘admin’ permissions to the team or be an owner of the org that
164
165
  # the team is associated with.
@@ -166,12 +167,12 @@ module Github
166
167
  #
167
168
  # = Examples
168
169
  # github = Github.new :oauth_token => '...'
169
- # github.orgs.teams.remove_member 'team-id', 'member-name'
170
+ # github.orgs.teams.remove_member 'team-id', 'user-name'
170
171
  #
171
- def remove_member(team_id, member_name, params={})
172
- assert_presence_of team_id, member_name
172
+ def remove_member(team_id, user_name, params={})
173
+ assert_presence_of team_id, user_name
173
174
  normalize! params
174
- delete_request("/teams/#{team_id}/members/#{member_name}", params)
175
+ delete_request("/teams/#{team_id}/members/#{user_name}", params)
175
176
  end
176
177
  alias :remove_team_member :remove_member
177
178
 
@@ -200,8 +201,8 @@ module Github
200
201
  def team_repo?(team_id, user_name, repo_name, params={})
201
202
  assert_presence_of team_id, user_name, repo_name
202
203
  normalize! params
203
- get_request("/teams/#{team_id}/repos/#{user_name}/#{repo_name}", params)
204
- true
204
+ response = get_request("/teams/#{team_id}/repos/#{user_name}/#{repo_name}", params)
205
+ response.status == 204
205
206
  rescue Github::Error::NotFound
206
207
  false
207
208
  end
@@ -4,7 +4,7 @@ module Github
4
4
  module VERSION
5
5
  MAJOR = 0
6
6
  MINOR = 8
7
- PATCH = 8
7
+ PATCH = 9
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#create' do
6
+ let(:request_path) { "/gists" }
7
+
8
+ let(:inputs) {
9
+ {
10
+ "description" => "the description for this gist",
11
+ "public" => true,
12
+ "files" => {
13
+ "file1.txt" => {
14
+ "content" => "String file contents"
15
+ }
16
+ },
17
+ }
18
+ }
19
+
20
+ before {
21
+ stub_post(request_path).with(inputs).
22
+ to_return(:body => body, :status => status,
23
+ :headers => {:content_type => "application/json; charset=utf-8"})
24
+ }
25
+
26
+ after { reset_authentication_for(subject) }
27
+
28
+ context "resouce created" do
29
+ let(:body) { fixture('gists/gist.json') }
30
+ let(:status) { 201 }
31
+
32
+ it "should fail to create resource if 'files' input is missing" do
33
+ expect {
34
+ subject.create inputs.except('files')
35
+ }.to raise_error(Github::Error::RequiredParams)
36
+ end
37
+
38
+ it "should fail to create resource if 'public' input is missing" do
39
+ expect {
40
+ subject.create inputs.except('public')
41
+ }.to raise_error(Github::Error::RequiredParams)
42
+ end
43
+
44
+ it "should create resource successfully" do
45
+ subject.create inputs
46
+ a_post(request_path).with(inputs).should have_been_made
47
+ end
48
+
49
+ it "should return the resource" do
50
+ gist = subject.create inputs
51
+ gist.should be_a Hashie::Mash
52
+ end
53
+
54
+ it "should get the gist information" do
55
+ gist = subject.create inputs
56
+ gist.user.login.should == 'octocat'
57
+ end
58
+ end
59
+
60
+ it_should_behave_like 'request failure' do
61
+ let(:requestable) { subject.create inputs }
62
+ end
63
+
64
+ end # create
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#delete' do
6
+ let(:gist_id) { 1 }
7
+ let(:request_path) { "/gists/#{gist_id}" }
8
+ let(:body) { fixture('gists/gist.json') }
9
+ let(:status) { 204 }
10
+
11
+ before {
12
+ stub_delete(request_path).to_return(:body => body, :status => status,
13
+ :headers => {:content_type => "application/json; charset=utf-8"})
14
+ }
15
+
16
+ after { reset_authentication_for(subject) }
17
+
18
+ it 'should raise error if gist id not present' do
19
+ expect { subject.delete nil }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should remove resource successfully" do
23
+ subject.delete gist_id
24
+ a_delete(request_path).should have_been_made
25
+ end
26
+
27
+ it_should_behave_like 'request failure' do
28
+ let(:requestable) { subject.delete gist_id }
29
+ end
30
+
31
+ end # delete
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#edit' do
6
+ let(:gist_id) { 1 }
7
+ let(:request_path) { "/gists/#{gist_id}" }
8
+
9
+ let(:inputs) {
10
+ {
11
+ "description" => "the description for this gist",
12
+ "files" => {
13
+ "file1.txt" => {
14
+ "content" => "updated file contents"
15
+ },
16
+ "old_name.txt" => {
17
+ "filename" => "new_name.txt",
18
+ "content" => "modified contents"
19
+ },
20
+ "new_file.txt" => {
21
+ "content" => "a new file"
22
+ },
23
+ "delete_this_file.txt" => nil
24
+ }
25
+ }
26
+ }
27
+
28
+ before {
29
+ stub_patch(request_path).with(inputs).
30
+ to_return(:body => body, :status => status,
31
+ :headers => {:content_type => "application/json; charset=utf-8"})
32
+ }
33
+
34
+ after { reset_authentication_for(subject) }
35
+
36
+ context "resouce edited" do
37
+ let(:body) { fixture('gists/gist.json') }
38
+ let(:status) { 200 }
39
+
40
+ it "should edit resource successfully" do
41
+ subject.edit gist_id, inputs
42
+ a_patch(request_path).with(inputs).should have_been_made
43
+ end
44
+
45
+ it "should return the resource" do
46
+ gist = subject.edit gist_id, inputs
47
+ gist.should be_a Hashie::Mash
48
+ end
49
+
50
+ it "should get the gist information" do
51
+ gist = subject.edit gist_id, inputs
52
+ gist.user.login.should == 'octocat'
53
+ end
54
+ end
55
+
56
+ it_should_behave_like 'request failure' do
57
+ let(:requestable) { subject.edit gist_id, inputs }
58
+ end
59
+
60
+ end # edit
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#star' do
6
+ let(:gist_id) { 1 }
7
+ let(:request_path) { "/gists/#{gist_id}/fork" }
8
+ let(:body) { fixture('gists/gist.json') }
9
+ let(:status) { 201 }
10
+
11
+ before {
12
+ stub_post(request_path).to_return(:body => body, :status => status,
13
+ :headers => {:content_type => "application/json; charset=utf-8"})
14
+ }
15
+
16
+ after { reset_authentication_for(subject) }
17
+
18
+ it "should fail to fork gist without gist id" do
19
+ expect { subject.fork(nil) }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should fork resource successfully" do
23
+ subject.fork gist_id
24
+ a_post(request_path).should have_been_made
25
+ end
26
+
27
+ it "should return the resource" do
28
+ gist = subject.fork gist_id
29
+ gist.should be_a Hashie::Mash
30
+ end
31
+
32
+ it "should get the gist information" do
33
+ gist = subject.fork gist_id
34
+ gist.user.login.should == 'octocat'
35
+ end
36
+
37
+ it_should_behave_like 'request failure' do
38
+ let(:requestable) { subject.fork gist_id }
39
+ end
40
+
41
+ end # fork
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#get' do
6
+ let(:gist_id) { 1 }
7
+ let(:request_path) { "/gists/#{gist_id}" }
8
+
9
+ before {
10
+ stub_get(request_path).to_return(:body => body, :status => status,
11
+ :headers => {:content_type => "application/json; charset=utf-8"})
12
+ }
13
+
14
+ after { reset_authentication_for(subject) }
15
+
16
+ context "resource found" do
17
+ let(:body) { fixture('gists/gist.json') }
18
+ let(:status) { 200 }
19
+
20
+ it { should respond_to :find }
21
+
22
+ it "should fail to get resource without gist id" do
23
+ expect { subject.get nil }.to raise_error(ArgumentError)
24
+ end
25
+
26
+ it "should get the resource" do
27
+ subject.get gist_id
28
+ a_get(request_path).should have_been_made
29
+ end
30
+
31
+ it "should get gist information" do
32
+ gist = subject.get gist_id
33
+ gist.id.to_i.should eq gist_id
34
+ gist.user.login.should == 'octocat'
35
+ end
36
+
37
+ it "should return mash" do
38
+ gist = subject.get gist_id
39
+ gist.should be_a Hashie::Mash
40
+ end
41
+ end
42
+
43
+ it_should_behave_like 'request failure' do
44
+ let(:requestable) { subject.get gist_id }
45
+ end
46
+
47
+ end # get
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists do
6
+
7
+ end # Github::Gists
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Gists, '#unstar' do
6
+ let(:gist_id) { 1 }
7
+ let(:request_path) { "/gists/#{gist_id}/star" }
8
+ let(:body) { '' }
9
+ let(:status) { 204 }
10
+
11
+ before {
12
+ stub_get(request_path).to_return(:body => body, :status => status,
13
+ :headers => {:content_type => "application/json; charset=utf-8"})
14
+ }
15
+
16
+ after { reset_authentication_for(subject) }
17
+
18
+ context 'when gist is starred' do
19
+ let(:status) { 204 }
20
+
21
+ it 'should raise error if gist id not present' do
22
+ expect { subject.starred? nil }.to raise_error(ArgumentError)
23
+ end
24
+
25
+ it 'should perform request' do
26
+ subject.starred? gist_id
27
+ a_get(request_path).should have_been_made
28
+ end
29
+
30
+ it 'should return true if gist is already starred' do
31
+ subject.starred?(gist_id).should be_true
32
+ end
33
+ end
34
+
35
+ context 'when gist is not starred' do
36
+ let(:status) { 404 }
37
+
38
+ it 'should return false if gist is not starred' do
39
+ subject.starred?(gist_id).should be_false
40
+ end
41
+ end
42
+ end # starred?