github_api 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/features/cassettes/{repos → issues}/assignees/ckeck.yml +0 -0
- data/features/cassettes/{repos → issues}/assignees/ckeck_not.yml +0 -0
- data/features/cassettes/{repos → issues}/assignees/list.yml +0 -0
- data/features/cassettes/repos/starring/list.yml +98 -0
- data/features/cassettes/repos/starring/star.yml +48 -0
- data/features/cassettes/repos/starring/starred.yml +195 -0
- data/features/cassettes/repos/starring/starring.yml +56 -0
- data/features/cassettes/repos/starring/unstar.yml +46 -0
- data/features/cassettes/repos/statuses/create.yml +52 -0
- data/features/cassettes/repos/statuses/list.yml +64 -0
- data/features/cassettes/repos/watching/list.yml +76 -0
- data/features/cassettes/repos/watching/unwatch.yml +46 -0
- data/features/cassettes/repos/watching/watch.yml +48 -0
- data/features/cassettes/repos/watching/watched.yml +166 -0
- data/features/cassettes/repos/watching/watching.yml +56 -0
- data/features/{repos → issues}/assignees.feature +5 -5
- data/features/repos/starring.feature +50 -0
- data/features/repos/statuses.feature +27 -0
- data/features/repos/watching.feature +50 -0
- data/lib/github_api/error/service_error.rb +5 -2
- data/lib/github_api/issues.rb +6 -0
- data/lib/github_api/{repos → issues}/assignees.rb +2 -2
- data/lib/github_api/jsonable.rb +17 -0
- data/lib/github_api/orgs/teams.rb +45 -45
- data/lib/github_api/repos.rb +23 -11
- data/lib/github_api/repos/commits.rb +4 -3
- data/lib/github_api/repos/merging.rb +40 -0
- data/lib/github_api/repos/starring.rb +97 -0
- data/lib/github_api/repos/statuses.rb +64 -0
- data/lib/github_api/repos/watching.rb +16 -13
- data/lib/github_api/response.rb +1 -0
- data/lib/github_api/response/jsonize.rb +4 -5
- data/lib/github_api/version.rb +2 -2
- data/spec/fixtures/repos/merge.json +48 -0
- data/spec/fixtures/repos/stargazers.json +9 -0
- data/spec/fixtures/repos/starred.json +34 -0
- data/spec/fixtures/repos/status.json +16 -0
- data/spec/fixtures/repos/statuses.json +18 -0
- data/spec/github/{repos → issues}/assignees_spec.rb +2 -2
- data/spec/github/repos/merging_spec.rb +71 -0
- data/spec/github/repos/starring_spec.rb +203 -0
- data/spec/github/repos/statuses_spec.rb +124 -0
- data/spec/github/repos/watching_spec.rb +37 -35
- metadata +66 -39
data/lib/github_api/repos.rb
CHANGED
@@ -6,7 +6,6 @@ module Github
|
|
6
6
|
|
7
7
|
# Load all the modules after initializing Repos to avoid superclass mismatch
|
8
8
|
autoload_all 'github_api/repos',
|
9
|
-
:Assignees => 'assignees',
|
10
9
|
:Collaborators => 'collaborators',
|
11
10
|
:Commits => 'commits',
|
12
11
|
:Contents => 'contents',
|
@@ -14,8 +13,11 @@ module Github
|
|
14
13
|
:Forks => 'forks',
|
15
14
|
:Hooks => 'hooks',
|
16
15
|
:Keys => 'keys',
|
17
|
-
:
|
18
|
-
:PubSubHubbub => 'pub_sub_hubbub'
|
16
|
+
:Merging => 'merging',
|
17
|
+
:PubSubHubbub => 'pub_sub_hubbub',
|
18
|
+
:Starring => 'starring',
|
19
|
+
:Statuses => 'statuses',
|
20
|
+
:Watching => 'watching'
|
19
21
|
|
20
22
|
DEFAULT_REPO_OPTIONS = {
|
21
23
|
"homepage" => "https://github.com",
|
@@ -43,11 +45,6 @@ module Github
|
|
43
45
|
super(options)
|
44
46
|
end
|
45
47
|
|
46
|
-
# Access to Repos::Collaborators API
|
47
|
-
def assignees
|
48
|
-
@assignees ||= ApiFactory.new 'Repos::Assignees'
|
49
|
-
end
|
50
|
-
|
51
48
|
# Access to Repos::Collaborators API
|
52
49
|
def collaborators
|
53
50
|
@collaborators ||= ApiFactory.new 'Repos::Collaborators'
|
@@ -83,9 +80,9 @@ module Github
|
|
83
80
|
@keys ||= ApiFactory.new 'Repos::Keys'
|
84
81
|
end
|
85
82
|
|
86
|
-
# Access to Repos::
|
87
|
-
def
|
88
|
-
@
|
83
|
+
# Access to Repos::Merging API
|
84
|
+
def merging
|
85
|
+
@mergin ||= ApiFactory.new 'Repos::Merging'
|
89
86
|
end
|
90
87
|
|
91
88
|
# Access to Repos::Watchin API
|
@@ -93,6 +90,21 @@ module Github
|
|
93
90
|
@pubsubhubbub ||= ApiFactory.new 'Repos::PubSubHubbub'
|
94
91
|
end
|
95
92
|
|
93
|
+
# Access to Repos::Starring API
|
94
|
+
def starring
|
95
|
+
@starring ||= ApiFactory.new 'Repos::Starring'
|
96
|
+
end
|
97
|
+
|
98
|
+
# Access to Repos::Statuses API
|
99
|
+
def statuses
|
100
|
+
@statuses ||= ApiFactory.new 'Repos::Statuses'
|
101
|
+
end
|
102
|
+
|
103
|
+
# Access to Repos::Watching API
|
104
|
+
def watching
|
105
|
+
@watching ||= ApiFactory.new 'Repos::Watching'
|
106
|
+
end
|
107
|
+
|
96
108
|
# List branches
|
97
109
|
#
|
98
110
|
# = Examples
|
@@ -77,8 +77,9 @@ module Github
|
|
77
77
|
# List commits on a repository
|
78
78
|
#
|
79
79
|
# = Parameters
|
80
|
-
# * <tt>:sha</tt>
|
81
|
-
# * <tt>:path</tt>
|
80
|
+
# * <tt>:sha</tt> Optional string. Sha or branch to start listing commits from.
|
81
|
+
# * <tt>:path</tt> Optional string. Only commits containing this file path will be returned.
|
82
|
+
# * <tt>:author</tt> GitHub login, name, or email by which to filter by commit author.
|
82
83
|
#
|
83
84
|
# = Examples
|
84
85
|
# github = Github.new
|
@@ -89,7 +90,7 @@ module Github
|
|
89
90
|
_update_user_repo_params(user_name, repo_name)
|
90
91
|
_validate_user_repo_params(user, repo) unless user? && repo?
|
91
92
|
normalize! params
|
92
|
-
filter! %w[
|
93
|
+
filter! %w[sha path author], params
|
93
94
|
|
94
95
|
response = get_request("/repos/#{user}/#{repo}/commits", params)
|
95
96
|
return response unless block_given?
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
# The Repo Merging API supports merging branches in a repository. This
|
5
|
+
# accomplishes essentially the same thing as merging one branch into another
|
6
|
+
# in a local repository and then pushing to GitHub.
|
7
|
+
class Repos::Merging < API
|
8
|
+
|
9
|
+
VALID_MERGE_PARAM_NAMES = %w[
|
10
|
+
base
|
11
|
+
head
|
12
|
+
commit_message
|
13
|
+
].freeze # :nodoc:
|
14
|
+
|
15
|
+
REQUIRED_MERGE_PARAMS = %w[ base head ].freeze # :nodoc:
|
16
|
+
|
17
|
+
# Perform a merge
|
18
|
+
#
|
19
|
+
# = Inputs
|
20
|
+
# * <tt>:base</tt> - Required String - The name of the base branch that the head will be merged into.
|
21
|
+
# * <tt>:head</tt> - Required String - The head to merge. This can be a branch name or a commit SHA1.
|
22
|
+
# * <tt>:commit_message</tt> - Optional String - Commit message to use for the merge commit. If omitted, a default message will be used.
|
23
|
+
#
|
24
|
+
# = Examples
|
25
|
+
# github = Github.new
|
26
|
+
# github.repos.merging.merge 'user', 'repo',
|
27
|
+
# "base": "master",
|
28
|
+
# "head": "cool_feature",
|
29
|
+
# "commit_message": "Shipped cool_feature!"
|
30
|
+
#
|
31
|
+
def merge(user_name, repo_name, params={})
|
32
|
+
normalize! params
|
33
|
+
filter! VALID_MERGE_PARAM_NAMES, params
|
34
|
+
assert_required_keys REQUIRED_MERGE_PARAMS, params
|
35
|
+
|
36
|
+
post_request("/repos/#{user_name}/#{repo_name}/merges", params)
|
37
|
+
end
|
38
|
+
|
39
|
+
end # Repos::Merging
|
40
|
+
end # Github
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
# Repository Starring is a feature that lets users bookmark repositories.
|
5
|
+
# Stars are shown next to repositories to show an approximate level of interest. # Stars have no effect on notifications or the activity feed.
|
6
|
+
class Repos::Starring < API
|
7
|
+
|
8
|
+
# List stargazers
|
9
|
+
#
|
10
|
+
# = Examples
|
11
|
+
# github = Github.new :user => 'user-name', :repo => 'repo-name'
|
12
|
+
# github.repos.starring.list
|
13
|
+
# github.repos.starring.list { |star| ... }
|
14
|
+
#
|
15
|
+
def list(user_name, repo_name, params={})
|
16
|
+
_update_user_repo_params(user_name, repo_name)
|
17
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
18
|
+
normalize! params
|
19
|
+
|
20
|
+
response = get_request("/repos/#{user}/#{repo}/stargazers", params)
|
21
|
+
return response unless block_given?
|
22
|
+
response.each { |el| yield el }
|
23
|
+
end
|
24
|
+
alias :all :list
|
25
|
+
|
26
|
+
# List repos being starred by a user
|
27
|
+
#
|
28
|
+
# = Examples
|
29
|
+
# github = Github.new
|
30
|
+
# github.repos.starring.starred :user => 'user-name'
|
31
|
+
#
|
32
|
+
# List repos being starred by the authenticated user
|
33
|
+
#
|
34
|
+
# = Examples
|
35
|
+
# github = Github.new :oauth_token => '...'
|
36
|
+
# github.repos.starring.starred
|
37
|
+
#
|
38
|
+
def starred(*args)
|
39
|
+
params = args.extract_options!
|
40
|
+
normalize! params
|
41
|
+
|
42
|
+
response = if (user_name = params.delete('user'))
|
43
|
+
get_request("/users/#{user_name}/starred", params)
|
44
|
+
else
|
45
|
+
get_request("/user/starred", params)
|
46
|
+
end
|
47
|
+
return response unless block_given?
|
48
|
+
response.each { |el| yield el }
|
49
|
+
end
|
50
|
+
|
51
|
+
# Check if you are starring a repository
|
52
|
+
#
|
53
|
+
# Returns <tt>true</tt> if this repo is starred by you,<tt>false</tt> otherwise
|
54
|
+
#
|
55
|
+
# = Examples
|
56
|
+
# github = Github.new
|
57
|
+
# github.repos.starring.starring? 'user-name', 'repo-name'
|
58
|
+
#
|
59
|
+
def starring?(user_name, repo_name, params={})
|
60
|
+
_validate_presence_of user_name, repo_name
|
61
|
+
normalize! params
|
62
|
+
get_request("/user/starred/#{user_name}/#{repo_name}", params)
|
63
|
+
true
|
64
|
+
rescue Github::Error::NotFound
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
# Star a repository
|
69
|
+
#
|
70
|
+
# You need to be authenticated to star a repository
|
71
|
+
#
|
72
|
+
# = Examples
|
73
|
+
# github = Github.new
|
74
|
+
# github.repos.starring.star 'user-name', 'repo-name'
|
75
|
+
#
|
76
|
+
def star(user_name, repo_name, params={})
|
77
|
+
_validate_presence_of user_name, repo_name
|
78
|
+
normalize! params
|
79
|
+
put_request("/user/starred/#{user_name}/#{repo_name}", params)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Unstar a repository
|
83
|
+
#
|
84
|
+
# You need to be authenticated to unstar a repository.
|
85
|
+
#
|
86
|
+
# = Examples
|
87
|
+
# github = Github.new
|
88
|
+
# github.repos.starring.unstar 'user-name', 'repo-name'
|
89
|
+
#
|
90
|
+
def unstar(user_name, repo_name, params={})
|
91
|
+
_validate_presence_of user_name, repo_name
|
92
|
+
normalize! params
|
93
|
+
delete_request("/user/starred/#{user_name}/#{repo_name}", params)
|
94
|
+
end
|
95
|
+
|
96
|
+
end # Repos::Starring
|
97
|
+
end # Github
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Repos::Statuses < API
|
5
|
+
# The Status API allows external services to mark commits with a success,
|
6
|
+
# failure, error, or pending state, which is then reflected in pull requests
|
7
|
+
# involving those commits.
|
8
|
+
|
9
|
+
VALID_STATUS_PARAM_NAMES = %w[
|
10
|
+
state
|
11
|
+
target_url
|
12
|
+
description
|
13
|
+
].freeze # :nodoc:
|
14
|
+
|
15
|
+
REQUIRED_PARAMS = %w[ state ].freeze # :nodoc:
|
16
|
+
|
17
|
+
# List Statuses for a specific SHA
|
18
|
+
#
|
19
|
+
# = Examples
|
20
|
+
# github = Github.new
|
21
|
+
# github.repos.statuses.list 'user-name', 'repo-name', 'sha'
|
22
|
+
# github.repos.statuses.list 'user-name', 'repo-name', 'sha' { |status| ... }
|
23
|
+
#
|
24
|
+
def list(user_name, repo_name, sha, params={})
|
25
|
+
_update_user_repo_params(user_name, repo_name)
|
26
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
27
|
+
normalize! params
|
28
|
+
|
29
|
+
response = get_request("/repos/#{user}/#{repo}/statuses/#{sha}", params)
|
30
|
+
return response unless block_given?
|
31
|
+
response.each { |el| yield el }
|
32
|
+
end
|
33
|
+
alias :all :list
|
34
|
+
|
35
|
+
# Create a status
|
36
|
+
#
|
37
|
+
# = Inputs
|
38
|
+
# * <tt>:state</tt> - Required string - State of the status - can be one of
|
39
|
+
# pending, success, error, or failure.
|
40
|
+
# * <tt>:target_url</tt> - Optional string - Target url to associate with this
|
41
|
+
# status. This URL will be linked from the GitHub UI to allow users
|
42
|
+
# to easily see the ‘source’ of the Status.
|
43
|
+
# * <tt>:description</tt> - Optional string - Short description of the status
|
44
|
+
#
|
45
|
+
# = Examples
|
46
|
+
# github = Github.new
|
47
|
+
# github.repos.statuses.create 'user-name', 'repo-name', 'sha',
|
48
|
+
# "state" => "success",
|
49
|
+
# "target_url" => "http://ci.example.com/johndoe/my-repo/builds/sha",
|
50
|
+
# "description" => "Successful build #3 from origin/master"
|
51
|
+
#
|
52
|
+
def create(user_name, repo_name, sha, params={})
|
53
|
+
_update_user_repo_params(user_name, repo_name)
|
54
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
55
|
+
|
56
|
+
normalize! params
|
57
|
+
filter! VALID_STATUS_PARAM_NAMES, params, :recursive => false
|
58
|
+
assert_required_keys(REQUIRED_PARAMS, params)
|
59
|
+
|
60
|
+
post_request("/repos/#{user}/#{repo}/statuses/#{sha}", params)
|
61
|
+
end
|
62
|
+
|
63
|
+
end # Repos::Statuses
|
64
|
+
end # Github
|
@@ -1,24 +1,27 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module Github
|
4
|
+
# Watching a Repository registers the user to receive notificactions on new
|
5
|
+
# discussions, as well as events in the user’s activity feed.
|
4
6
|
class Repos::Watching < API
|
5
7
|
|
6
8
|
# List repo watchers
|
7
9
|
#
|
8
10
|
# = Examples
|
9
11
|
# github = Github.new :user => 'user-name', :repo => 'repo-name'
|
10
|
-
# github.repos.watching.
|
11
|
-
# github.repos.watching.
|
12
|
+
# github.repos.watching.list
|
13
|
+
# github.repos.watching.list { |watcher| ... }
|
12
14
|
#
|
13
|
-
def
|
15
|
+
def list(user_name, repo_name, params={})
|
14
16
|
_update_user_repo_params(user_name, repo_name)
|
15
17
|
_validate_user_repo_params(user, repo) unless user? && repo?
|
16
18
|
normalize! params
|
17
19
|
|
18
|
-
response = get_request("/repos/#{user}/#{repo}/
|
20
|
+
response = get_request("/repos/#{user}/#{repo}/subscribers", params)
|
19
21
|
return response unless block_given?
|
20
22
|
response.each { |el| yield el }
|
21
23
|
end
|
24
|
+
alias :all :list
|
22
25
|
|
23
26
|
# List repos being watched by a user
|
24
27
|
#
|
@@ -37,9 +40,9 @@ module Github
|
|
37
40
|
normalize! params
|
38
41
|
|
39
42
|
response = if (user_name = params.delete('user'))
|
40
|
-
get_request("/users/#{user_name}/
|
43
|
+
get_request("/users/#{user_name}/subscriptions", params)
|
41
44
|
else
|
42
|
-
get_request("/user/
|
45
|
+
get_request("/user/subscriptions", params)
|
43
46
|
end
|
44
47
|
return response unless block_given?
|
45
48
|
response.each { |el| yield el }
|
@@ -55,7 +58,7 @@ module Github
|
|
55
58
|
def watching?(user_name, repo_name, params={})
|
56
59
|
_validate_presence_of user_name, repo_name
|
57
60
|
normalize! params
|
58
|
-
get_request("/user/
|
61
|
+
get_request("/user/subscriptions/#{user_name}/#{repo_name}", params)
|
59
62
|
true
|
60
63
|
rescue Github::Error::NotFound
|
61
64
|
false
|
@@ -67,12 +70,12 @@ module Github
|
|
67
70
|
#
|
68
71
|
# = Examples
|
69
72
|
# github = Github.new
|
70
|
-
# github.repos.watching.
|
73
|
+
# github.repos.watching.watch 'user-name', 'repo-name'
|
71
74
|
#
|
72
|
-
def
|
75
|
+
def watch(user_name, repo_name, params={})
|
73
76
|
_validate_presence_of user_name, repo_name
|
74
77
|
normalize! params
|
75
|
-
put_request("/user/
|
78
|
+
put_request("/user/subscriptions/#{user_name}/#{repo_name}", params)
|
76
79
|
end
|
77
80
|
|
78
81
|
# Stop watching a repository
|
@@ -80,12 +83,12 @@ module Github
|
|
80
83
|
# You need to be authenticated to stop watching a repository.
|
81
84
|
# = Examples
|
82
85
|
# github = Github.new
|
83
|
-
# github.repos.watching.
|
86
|
+
# github.repos.watching.unwatch 'user-name', 'repo-name'
|
84
87
|
#
|
85
|
-
def
|
88
|
+
def unwatch(user_name, repo_name, params={})
|
86
89
|
_validate_presence_of user_name, repo_name
|
87
90
|
normalize! params
|
88
|
-
delete_request("/user/
|
91
|
+
delete_request("/user/subscriptions/#{user_name}/#{repo_name}", params)
|
89
92
|
end
|
90
93
|
|
91
94
|
end # Repos::Watching
|
data/lib/github_api/response.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'faraday'
|
4
|
+
require 'github_api/jsonable'
|
4
5
|
|
5
6
|
module Github
|
6
7
|
class Response::Jsonize < Response
|
8
|
+
include Github::Jsonable
|
9
|
+
|
7
10
|
dependency 'multi_json'
|
8
11
|
|
9
12
|
define_parser do |body|
|
10
|
-
|
11
|
-
MultiJson.load body
|
12
|
-
else
|
13
|
-
MultiJson.decode body
|
14
|
-
end
|
13
|
+
Github::Jsonable.decode body
|
15
14
|
end
|
16
15
|
|
17
16
|
def parse(body)
|
data/lib/github_api/version.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
{
|
2
|
+
"commit": {
|
3
|
+
"sha": "7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
|
4
|
+
"commit": {
|
5
|
+
"author": {
|
6
|
+
"name": "The Octocat",
|
7
|
+
"date": "2012-03-06T15:06:50-08:00",
|
8
|
+
"email": "octocat@nowhere.com"
|
9
|
+
},
|
10
|
+
"url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
|
11
|
+
"message": "Shipped cool_feature!",
|
12
|
+
"tree": {
|
13
|
+
"sha": "b4eecafa9be2f2006ce1b709d6857b07069b4608",
|
14
|
+
"url": "https://api.github.com/repos/octocat/Hello-World/git/trees/b4eecafa9be2f2006ce1b709d6857b07069b4608"
|
15
|
+
},
|
16
|
+
"committer": {
|
17
|
+
"name": "The Octocat",
|
18
|
+
"date": "2012-03-06T15:06:50-08:00",
|
19
|
+
"email": "octocat@nowhere.com"
|
20
|
+
}
|
21
|
+
},
|
22
|
+
"author": {
|
23
|
+
"gravatar_id": "7ad39074b0584bc555d0417ae3e7d974",
|
24
|
+
"avatar_url": "https://secure.gravatar.com/avatar/7ad39074b0584bc555d0417ae3e7d974?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
|
25
|
+
"url": "https://api.github.com/users/octocat",
|
26
|
+
"id": 583231,
|
27
|
+
"login": "octocat"
|
28
|
+
},
|
29
|
+
"parents": [
|
30
|
+
{
|
31
|
+
"sha": "553c2077f0edc3d5dc5d17262f6aa498e69d6f8e",
|
32
|
+
"url": "https://api.github.com/repos/octocat/Hello-World/commits/553c2077f0edc3d5dc5d17262f6aa498e69d6f8e"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"sha": "762941318ee16e59dabbacb1b4049eec22f0d303",
|
36
|
+
"url": "https://api.github.com/repos/octocat/Hello-World/commits/762941318ee16e59dabbacb1b4049eec22f0d303"
|
37
|
+
}
|
38
|
+
],
|
39
|
+
"url": "https://api.github.com/repos/octocat/Hello-World/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
|
40
|
+
"committer": {
|
41
|
+
"gravatar_id": "7ad39074b0584bc555d0417ae3e7d974",
|
42
|
+
"avatar_url": "https://secure.gravatar.com/avatar/7ad39074b0584bc555d0417ae3e7d974?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
|
43
|
+
"url": "https://api.github.com/users/octocat",
|
44
|
+
"id": 583231,
|
45
|
+
"login": "octocat"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|