github_api 0.8.8 → 0.8.9

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.
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?