github_api 0.1.0.pre
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.
- data/LICENSE.txt +20 -0
- data/README.rdoc +159 -0
- data/Rakefile +52 -0
- data/features/github.feature +9 -0
- data/features/step_definitions/github_steps.rb +0 -0
- data/features/support/env.rb +13 -0
- data/lib/github_api.rb +55 -0
- data/lib/github_api/api.rb +133 -0
- data/lib/github_api/api/extract_options.rb +17 -0
- data/lib/github_api/api/mime.rb +5 -0
- data/lib/github_api/api/utils.rb +9 -0
- data/lib/github_api/client.rb +35 -0
- data/lib/github_api/configuration.rb +84 -0
- data/lib/github_api/connection.rb +91 -0
- data/lib/github_api/error.rb +35 -0
- data/lib/github_api/gists.rb +199 -0
- data/lib/github_api/gists/comments.rb +74 -0
- data/lib/github_api/git_data.rb +26 -0
- data/lib/github_api/git_data/blobs.rb +9 -0
- data/lib/github_api/git_data/commits.rb +9 -0
- data/lib/github_api/git_data/references.rb +9 -0
- data/lib/github_api/git_data/tags.rb +9 -0
- data/lib/github_api/git_data/trees.rb +9 -0
- data/lib/github_api/issues.rb +201 -0
- data/lib/github_api/issues/comments.rb +98 -0
- data/lib/github_api/issues/events.rb +50 -0
- data/lib/github_api/issues/labels.rb +191 -0
- data/lib/github_api/issues/milestones.rb +119 -0
- data/lib/github_api/orgs.rb +90 -0
- data/lib/github_api/orgs/members.rb +109 -0
- data/lib/github_api/orgs/teams.rb +236 -0
- data/lib/github_api/pull_requests.rb +210 -0
- data/lib/github_api/pull_requests/comments.rb +134 -0
- data/lib/github_api/repos.rb +256 -0
- data/lib/github_api/repos/collaborators.rb +59 -0
- data/lib/github_api/repos/commits.rb +115 -0
- data/lib/github_api/repos/downloads.rb +77 -0
- data/lib/github_api/repos/forks.rb +29 -0
- data/lib/github_api/repos/hooks.rb +67 -0
- data/lib/github_api/repos/keys.rb +53 -0
- data/lib/github_api/repos/watching.rb +50 -0
- data/lib/github_api/request.rb +75 -0
- data/lib/github_api/request/oauth2.rb +33 -0
- data/lib/github_api/response.rb +10 -0
- data/lib/github_api/response/jsonize.rb +22 -0
- data/lib/github_api/response/mashify.rb +26 -0
- data/lib/github_api/response/raise_error.rb +33 -0
- data/lib/github_api/users.rb +82 -0
- data/lib/github_api/users/emails.rb +49 -0
- data/lib/github_api/users/followers.rb +98 -0
- data/lib/github_api/users/keys.rb +84 -0
- data/lib/github_api/version.rb +12 -0
- data/spec/fixtures/collaborators_list.json +6 -0
- data/spec/fixtures/commits_list.json +25 -0
- data/spec/fixtures/repos_branches_list.json +7 -0
- data/spec/fixtures/repos_list.json +27 -0
- data/spec/github/api_spec.rb +6 -0
- data/spec/github/client_spec.rb +6 -0
- data/spec/github/gists/comments_spec.rb +5 -0
- data/spec/github/gists_spec.rb +5 -0
- data/spec/github/git_data/blobs_spec.rb +5 -0
- data/spec/github/git_data/commits_spec.rb +5 -0
- data/spec/github/git_data/references_spec.rb +5 -0
- data/spec/github/git_data/tags_spec.rb +5 -0
- data/spec/github/git_data/trees_spec.rb +5 -0
- data/spec/github/git_data_spec.rb +5 -0
- data/spec/github/issues/comments_spec.rb +5 -0
- data/spec/github/issues/events_spec.rb +5 -0
- data/spec/github/issues/labels_spec.rb +5 -0
- data/spec/github/issues/milestones_spec.rb +5 -0
- data/spec/github/issues_spec.rb +5 -0
- data/spec/github/orgs/members_spec.rb +5 -0
- data/spec/github/orgs/teams_spec.rb +5 -0
- data/spec/github/orgs_spec.rb +5 -0
- data/spec/github/repos/collaborators_spec.rb +6 -0
- data/spec/github/repos/commits_spec.rb +5 -0
- data/spec/github/repos/downloads_spec.rb +5 -0
- data/spec/github/repos/forks_spec.rb +5 -0
- data/spec/github/repos/hooks_spec.rb +5 -0
- data/spec/github/repos/keys_spec.rb +5 -0
- data/spec/github/repos/watching_spec.rb +5 -0
- data/spec/github/repos_spec.rb +35 -0
- data/spec/github_spec.rb +5 -0
- data/spec/spec_helper.rb +15 -0
- metadata +284 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Github
|
6
|
+
module Request
|
7
|
+
class OAuth2 < Faraday::Middleware
|
8
|
+
dependency 'oauth2'
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
puts "ENV: #{env.inspect}"
|
12
|
+
puts "TOKEN : #{@token}"
|
13
|
+
puts "APP: #{@app}"
|
14
|
+
|
15
|
+
# Extract parameters from the query
|
16
|
+
params = env[:url].query_values || {}
|
17
|
+
|
18
|
+
env[:url].query_values = { 'access_token' => @token }.merge(params)
|
19
|
+
|
20
|
+
token = env[:url].query_values['access_token']
|
21
|
+
|
22
|
+
env[:request_headers].merge!('Authorization' => "Token token=\"#{token}\"")
|
23
|
+
|
24
|
+
@app.call env
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(app, *args)
|
28
|
+
@app = app
|
29
|
+
@token = args.shift
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end # Github
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Github
|
6
|
+
class Response::Jsonize < Faraday::Response::Middleware
|
7
|
+
dependency 'multi_json'
|
8
|
+
|
9
|
+
def parse(body)
|
10
|
+
case body
|
11
|
+
when ''
|
12
|
+
nil
|
13
|
+
when 'true'
|
14
|
+
true
|
15
|
+
when 'false'
|
16
|
+
false
|
17
|
+
else
|
18
|
+
::MultiJson.decode(body)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end # Github
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module Github
|
6
|
+
class Response::Mashify < Faraday::Response::Middleware
|
7
|
+
dependency 'hashie/mash'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_accessor :mash_class
|
11
|
+
end
|
12
|
+
|
13
|
+
self.mash_class = ::Hashie::Mash
|
14
|
+
|
15
|
+
def parse(body)
|
16
|
+
case body
|
17
|
+
when Hash
|
18
|
+
self.class.mash_class.new(body)
|
19
|
+
when Array
|
20
|
+
body.map { |item| item.is_a?(Hash) ? self.class.mash_class.new(item) : item }
|
21
|
+
else
|
22
|
+
body
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end # Github
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'github_api/error'
|
5
|
+
|
6
|
+
module Github
|
7
|
+
class Response::RaiseError < Faraday::Response::Middleware
|
8
|
+
|
9
|
+
def on_complete(env)
|
10
|
+
case env[:status].to_i
|
11
|
+
when 400
|
12
|
+
raise Github::BadRequest.new(response_message(env), env[:response_headers])
|
13
|
+
when 401
|
14
|
+
raise Github::Unauthorised.new(response_message(env), env[:response_headers])
|
15
|
+
when 403
|
16
|
+
raise Github::Forbidden.new(response_message(env), env[:response_headers])
|
17
|
+
when 404
|
18
|
+
raise Github::ResourceNotFound.new(response_message(env), env[:response_headers])
|
19
|
+
when 500
|
20
|
+
raise Github::InternalServerError.new(response_message(env), env[:response_headers])
|
21
|
+
when 503
|
22
|
+
raise Github::ServiceUnavailable.new(response_message(env), env[:response_headers])
|
23
|
+
when 400...600
|
24
|
+
raise Github::Error.new(response_message(env), env[:response_headers])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def response_message(env)
|
29
|
+
"#{env[:method].to_s.upcase} #{env[:url].to_s}: #{env[:status]}#{env[:body]}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end # Response::RaiseError
|
33
|
+
end # Github
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Users < API
|
5
|
+
extend AutoloadHelper
|
6
|
+
|
7
|
+
# Load all the modules after initializing Repos to avoid superclass mismatch
|
8
|
+
autoload_all 'github_api/users',
|
9
|
+
:Emails => 'emails',
|
10
|
+
:Followers => 'followers',
|
11
|
+
:Keys => 'keys'
|
12
|
+
|
13
|
+
include Github::Users::Emails
|
14
|
+
include Github::Users::Followers
|
15
|
+
include Github::Users::Keys
|
16
|
+
|
17
|
+
VALID_USER_PARAMS_NAMES = %w[
|
18
|
+
name
|
19
|
+
email
|
20
|
+
blog
|
21
|
+
company
|
22
|
+
location
|
23
|
+
hireable
|
24
|
+
bio
|
25
|
+
].freeze
|
26
|
+
|
27
|
+
# Creates new Repos API
|
28
|
+
def initialize(options = {})
|
29
|
+
super(options)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get a single unauthenticated user
|
33
|
+
#
|
34
|
+
# = Examples
|
35
|
+
# @github = Github.new
|
36
|
+
# @github.users.get_user 'user-name'
|
37
|
+
#
|
38
|
+
# Get the authenticated user
|
39
|
+
#
|
40
|
+
# = Examples
|
41
|
+
# @github = Github.new :oauth_token => '...'
|
42
|
+
# @github.users.get_user
|
43
|
+
#
|
44
|
+
def get_user(user_name=nil, params={})
|
45
|
+
_normalize_params_keys(params)
|
46
|
+
if user_name
|
47
|
+
get("/users/#{user}", params)
|
48
|
+
else
|
49
|
+
get("/user", params)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Update the authenticated user
|
54
|
+
#
|
55
|
+
# = Inputs
|
56
|
+
# * <tt>:name</tt> - Optional string
|
57
|
+
# * <tt>:email</tt> - Optional string - publically visible email address
|
58
|
+
# * <tt>:blog</tt> - Optional string
|
59
|
+
# * <tt>:company</tt> - Optional string
|
60
|
+
# * <tt>:location</tt> - Optional string
|
61
|
+
# * <tt>:hireable</tt> - Optional boolean
|
62
|
+
# * <tt>:bio</tt> - Optional string
|
63
|
+
#
|
64
|
+
# = Examples
|
65
|
+
# @github = Github.new :oauth_token => '..'
|
66
|
+
# @github.users.update_user
|
67
|
+
# "name" => "monalisa octocat",
|
68
|
+
# "email" => "octocat@github.com",
|
69
|
+
# "blog" => "https://github.com/blog",
|
70
|
+
# "company" => "GitHub",
|
71
|
+
# "location" => "San Francisco",
|
72
|
+
# "hireable" => true,
|
73
|
+
# "bio" => "There once..."
|
74
|
+
#
|
75
|
+
def update_user(params={})
|
76
|
+
_normalize_params_keys(params)
|
77
|
+
_filter_params_keys(VALID_USER_PARAMS_NAMES, params)
|
78
|
+
patch("/user", params)
|
79
|
+
end
|
80
|
+
|
81
|
+
end # Users
|
82
|
+
end # Github
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Users
|
5
|
+
module Emails
|
6
|
+
|
7
|
+
# List email addresses for the authenticated user
|
8
|
+
#
|
9
|
+
# = Examples
|
10
|
+
# @github = Github.new :oauth_token => '...'
|
11
|
+
# @github.users.emails
|
12
|
+
#
|
13
|
+
def emails(params={})
|
14
|
+
get("/user/emails", params)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Add email address(es) for the authenticated user
|
18
|
+
#
|
19
|
+
# = Inputs
|
20
|
+
# You can include a single email address or an array of addresses
|
21
|
+
#
|
22
|
+
# = Examples
|
23
|
+
# @github = Github.new :oauth_token => '...'
|
24
|
+
# @github.users.add_email "octocat@github.com", "support@github.com"
|
25
|
+
#
|
26
|
+
def add_email(*args)
|
27
|
+
params = _extract_parameters(args)
|
28
|
+
params['data'] = [args].flatten
|
29
|
+
post("/user/emails", params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Delete email address(es) for the authenticated user
|
33
|
+
#
|
34
|
+
# = Inputs
|
35
|
+
# You can include a single email address or an array of addresses
|
36
|
+
#
|
37
|
+
# = Examples
|
38
|
+
# @github = Github.new :oauth_token => '...'
|
39
|
+
# @github.users.delete_email "octocat@github.com", "support@github.com"
|
40
|
+
#
|
41
|
+
def add_email(*args)
|
42
|
+
params = _extract_parameters(args)
|
43
|
+
params['data'] = [args].flatten
|
44
|
+
delete("/user/emails", params)
|
45
|
+
end
|
46
|
+
|
47
|
+
end # Emails
|
48
|
+
end # Users
|
49
|
+
end # Github
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Users
|
5
|
+
module Followers
|
6
|
+
|
7
|
+
# List a user's followers
|
8
|
+
#
|
9
|
+
# = Examples
|
10
|
+
# @github = Github.new
|
11
|
+
# @github.users.followers 'user-name'
|
12
|
+
# @github.users.followers 'user-name' { |user| ... }
|
13
|
+
#
|
14
|
+
# List the authenticated user's followers
|
15
|
+
#
|
16
|
+
# = Examples
|
17
|
+
# @github = Github.new :oauth_token => '...'
|
18
|
+
# @github.users.following
|
19
|
+
# @github.users.following { |user| ... }
|
20
|
+
#
|
21
|
+
def followers(user_name=nil, params={})
|
22
|
+
_normalize_params_keys(params)
|
23
|
+
response = if user_name
|
24
|
+
get("/users/#{user_name}/followers", params)
|
25
|
+
else
|
26
|
+
get("/user/followers", params)
|
27
|
+
end
|
28
|
+
return response unless block_given?
|
29
|
+
response.each { |el| yield el }
|
30
|
+
end
|
31
|
+
|
32
|
+
# List who a user is following
|
33
|
+
#
|
34
|
+
# = Examples
|
35
|
+
# @github = Github.new
|
36
|
+
# @github.users.following 'user-name'
|
37
|
+
# @github.users.following 'user-name' { |user| ... }
|
38
|
+
#
|
39
|
+
# List who the authenicated user is following
|
40
|
+
#
|
41
|
+
# = Examples
|
42
|
+
#
|
43
|
+
# @github = Github.new :oauth_token => '...'
|
44
|
+
# @github.users.following
|
45
|
+
#
|
46
|
+
def following(user_name=nil, params={})
|
47
|
+
_normalize_params_keys(params)
|
48
|
+
response = if user_name
|
49
|
+
get("/users/#{user_name}/following", params)
|
50
|
+
else
|
51
|
+
get("/user/following", params)
|
52
|
+
end
|
53
|
+
return response unless block_given?
|
54
|
+
response.each { |el| yield el }
|
55
|
+
end
|
56
|
+
|
57
|
+
# Check if you are following a user
|
58
|
+
#
|
59
|
+
# = Examples
|
60
|
+
# @github = Github.new :oauth_token => '...'
|
61
|
+
# @github.users.following? 'user-name'
|
62
|
+
#
|
63
|
+
def following?(user_name, params={})
|
64
|
+
_validate_presence_of user_name
|
65
|
+
_normalize_params_keys(params)
|
66
|
+
get("/user/following/#{user_name}", params)
|
67
|
+
true
|
68
|
+
rescue Github::ResourceNotFound
|
69
|
+
false
|
70
|
+
end
|
71
|
+
|
72
|
+
# Follow a user
|
73
|
+
#
|
74
|
+
# = Examples
|
75
|
+
# @github = Github.new :oauth_token => '...'
|
76
|
+
# @github.users.follow 'user-name'
|
77
|
+
#
|
78
|
+
def follow(user_name, params={})
|
79
|
+
_validate_presence_of user_name
|
80
|
+
_normalize_params_keys(params)
|
81
|
+
put("/user/following/#{user_name}", params)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Unfollow a user
|
85
|
+
#
|
86
|
+
# = Examples
|
87
|
+
# @github = Github.new :oauth_token => '...'
|
88
|
+
# @github.users.unfollow 'user-name'
|
89
|
+
#
|
90
|
+
def unfollow(user_name, params={})
|
91
|
+
_validate_presence_of user_name
|
92
|
+
_normalize_params_keys(params)
|
93
|
+
delete("/user/following/#{user_name}", params)
|
94
|
+
end
|
95
|
+
|
96
|
+
end # Followers
|
97
|
+
end # Users
|
98
|
+
end # Github
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Users
|
5
|
+
module Keys
|
6
|
+
|
7
|
+
VALID_KEY_PARAM_NAMES = %w[ title key ].freeze
|
8
|
+
|
9
|
+
# List public keys for the authenticated user
|
10
|
+
#
|
11
|
+
# = Examples
|
12
|
+
# @github = Github.new :oauth_token => '...'
|
13
|
+
# @github.users.public_keys
|
14
|
+
# @github.users.public_keys { |key| ... }
|
15
|
+
#
|
16
|
+
def public_keys(params={})
|
17
|
+
_normalize_params_keys(params)
|
18
|
+
response = get("/user/keys", params)
|
19
|
+
return response unless block_given?
|
20
|
+
response.each { |el| yield el }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get a single pulic key for the authenticated user
|
24
|
+
#
|
25
|
+
# = Examples
|
26
|
+
# @github = Github.new :oauth_token => '...'
|
27
|
+
# @github.users.public_key 'key-id'
|
28
|
+
#
|
29
|
+
def public_key(key_id, params={})
|
30
|
+
_validate_presence_of key_id
|
31
|
+
_normalize_params_keys(params)
|
32
|
+
get("/user/keys/#{key_id}", params)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create a public key for the authenticated user
|
36
|
+
#
|
37
|
+
# = Inputs
|
38
|
+
# * <tt>:title</tt> - Required string
|
39
|
+
# * <tt>:key</tt> - Required string. sha key
|
40
|
+
#
|
41
|
+
# = Examples
|
42
|
+
# @github = Github.new :oauth_token => '...'
|
43
|
+
# @github.users.create_key "title" => "octocat@octomac",
|
44
|
+
# "key" => "ssh-rsa AAA..."
|
45
|
+
#
|
46
|
+
def create_key(params={})
|
47
|
+
_normalize_params_keys(params)
|
48
|
+
_filter_params_keys(VALID_KEY_PARAM_NAMES, params)
|
49
|
+
post("/user/keys", params)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Update a public key for the authenticated user
|
53
|
+
#
|
54
|
+
# = Inputs
|
55
|
+
# * <tt>:title</tt> - Required string
|
56
|
+
# * <tt>:key</tt> - Required string. sha key
|
57
|
+
#
|
58
|
+
# = Examples
|
59
|
+
# @github = Github.new :oauth_token => '...'
|
60
|
+
# @github.users.update_key 'key-id', "title" => "octocat@octomac",
|
61
|
+
# "key" => "ssh-rsa AAA..."
|
62
|
+
#
|
63
|
+
def update_key(key_id, params={})
|
64
|
+
_validate_presence_of key_id
|
65
|
+
_normalize_params_keys(params)
|
66
|
+
_filter_params_keys(VALID_KEY_PARAM_NAMES, params)
|
67
|
+
patch("/user/keys/#{key_id}", params)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Delete a public key for the authenticated user
|
71
|
+
#
|
72
|
+
# = Examples
|
73
|
+
# @github = Github.new :oauth_token => '...'
|
74
|
+
# @github.users.delete_key 'key-id'
|
75
|
+
#
|
76
|
+
def delete_key(key_id, params={})
|
77
|
+
_validate_presence_of key_id
|
78
|
+
_normalize_params_keys(params)
|
79
|
+
delete("/user/keys/#{key_id}", params)
|
80
|
+
end
|
81
|
+
|
82
|
+
end # Keys
|
83
|
+
end # Users
|
84
|
+
end # Github
|