octokit 0.4.0
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/.document +4 -0
- data/.gitignore +24 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.markdown +69 -0
- data/Rakefile +14 -0
- data/changelog.markdown +34 -0
- data/lib/faraday/raise_error.rb +41 -0
- data/lib/octokit.rb +49 -0
- data/lib/octokit/client.rb +30 -0
- data/lib/octokit/client/authentication.rb +19 -0
- data/lib/octokit/client/commits.rb +16 -0
- data/lib/octokit/client/connection.rb +32 -0
- data/lib/octokit/client/issues.rb +60 -0
- data/lib/octokit/client/network.rb +15 -0
- data/lib/octokit/client/objects.rb +33 -0
- data/lib/octokit/client/organizations.rb +89 -0
- data/lib/octokit/client/pulls.rb +19 -0
- data/lib/octokit/client/repositories.rb +130 -0
- data/lib/octokit/client/request.rb +41 -0
- data/lib/octokit/client/timelines.rb +20 -0
- data/lib/octokit/client/users.rb +77 -0
- data/lib/octokit/configuration.rb +45 -0
- data/lib/octokit/event.rb +76 -0
- data/lib/octokit/repository.rb +39 -0
- data/lib/octokit/version.rb +3 -0
- data/octokit.gemspec +33 -0
- data/test/fixtures/blob.json +10 -0
- data/test/fixtures/branch_commits.json +48 -0
- data/test/fixtures/branches.json +6 -0
- data/test/fixtures/close_issue.json +1 -0
- data/test/fixtures/collaborators.json +1 -0
- data/test/fixtures/comment.json +1 -0
- data/test/fixtures/commits.json +824 -0
- data/test/fixtures/contributors.json +6 -0
- data/test/fixtures/emails.json +1 -0
- data/test/fixtures/followers.json +3 -0
- data/test/fixtures/full_user.json +27 -0
- data/test/fixtures/issue.json +14 -0
- data/test/fixtures/issues.json +50 -0
- data/test/fixtures/keys.json +1 -0
- data/test/fixtures/labels.json +1 -0
- data/test/fixtures/languages.json +1 -0
- data/test/fixtures/network.json +26 -0
- data/test/fixtures/network_data.json +1 -0
- data/test/fixtures/network_meta.json +109 -0
- data/test/fixtures/open_issue.json +1 -0
- data/test/fixtures/raw_git_data.yaml +7 -0
- data/test/fixtures/reopen_issue.json +1 -0
- data/test/fixtures/repo.json +14 -0
- data/test/fixtures/repo_search.json +452 -0
- data/test/fixtures/repos.json +830 -0
- data/test/fixtures/search.json +44 -0
- data/test/fixtures/show_commit.json +37 -0
- data/test/fixtures/tags.json +8 -0
- data/test/fixtures/timeline.json +1018 -0
- data/test/fixtures/trees.json +140 -0
- data/test/fixtures/user.json +16 -0
- data/test/helper.rb +57 -0
- data/test/octokit_test.rb +765 -0
- data/test/repository_test.rb +45 -0
- metadata +377 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Objects
|
4
|
+
|
5
|
+
def tree(repo, tree_sha, options={})
|
6
|
+
get("tree/show/#{Repository.new(repo)}/#{tree_sha}", options)['tree']
|
7
|
+
end
|
8
|
+
|
9
|
+
def blob(repo, tree_sha, path, options={})
|
10
|
+
get("blob/show/#{Repository.new(repo)}/#{tree_sha}/#{path}", options)['blob']
|
11
|
+
end
|
12
|
+
|
13
|
+
def blobs(repo, tree_sha, options={})
|
14
|
+
get("blob/all/#{Repository.new(repo)}/#{tree_sha}", options)['blobs']
|
15
|
+
end
|
16
|
+
|
17
|
+
def blob_metadata(repo, tree_sha, options={})
|
18
|
+
get("blob/full/#{Repository.new(repo)}/#{tree_sha}", options)['blobs']
|
19
|
+
end
|
20
|
+
alias :blob_meta :blob_metadata
|
21
|
+
|
22
|
+
def tree_metadata(repo, tree_sha, options={})
|
23
|
+
get("tree/full/#{Repository.new(repo)}/#{tree_sha}", options)['blobs']
|
24
|
+
end
|
25
|
+
alias :tree_meta :tree_metadata
|
26
|
+
|
27
|
+
def raw(repo, sha, options={})
|
28
|
+
get("blob/show/#{Repository.new(repo)}/#{sha}", options)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Organizations
|
4
|
+
|
5
|
+
def organization(org, options={})
|
6
|
+
get("organizations/#{org}", options)['organization']
|
7
|
+
end
|
8
|
+
alias :org :organization
|
9
|
+
|
10
|
+
def update_organization(org, values, options={})
|
11
|
+
put("organizations/#{org}", options.merge({:organization => values}))['organization']
|
12
|
+
end
|
13
|
+
alias :update_org :update_organization
|
14
|
+
|
15
|
+
def organizations(user=nil, options={})
|
16
|
+
if user
|
17
|
+
get("user/show/#{user}/organizations", options)
|
18
|
+
else
|
19
|
+
get("organizations", options)
|
20
|
+
end['organizations']
|
21
|
+
end
|
22
|
+
alias :list_organizations :organizations
|
23
|
+
alias :list_orgs :organizations
|
24
|
+
alias :orgs :organizations
|
25
|
+
|
26
|
+
def organization_repositories(org, options={})
|
27
|
+
if org
|
28
|
+
get("organizations/#{org}/public_repositories", options)
|
29
|
+
else
|
30
|
+
get("organizations/repositories", options)
|
31
|
+
end['repositories']
|
32
|
+
end
|
33
|
+
alias :org_repositories :organization_repositories
|
34
|
+
alias :org_repos :organization_repositories
|
35
|
+
|
36
|
+
def organization_members(org, options={})
|
37
|
+
get("organizations/#{org}/public_members", options)['users']
|
38
|
+
end
|
39
|
+
alias :org_members :organization_members
|
40
|
+
|
41
|
+
def teams(org, options={})
|
42
|
+
get("organizations/#{org}/teams", options)['teams']
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_team(org, values, options={})
|
46
|
+
post("organizations/#{org}/teams", options.merge({:team => values}))['team']
|
47
|
+
end
|
48
|
+
|
49
|
+
def team(team_id, options={})
|
50
|
+
get("teams/#{team_id}", options)['team']
|
51
|
+
end
|
52
|
+
|
53
|
+
def update_team(team_id, values, options={})
|
54
|
+
put("teams/#{team_id}", options.merge({:team => values}))['team']
|
55
|
+
end
|
56
|
+
|
57
|
+
def delete_team(team_id, options={})
|
58
|
+
delete("teams/#{team_id}", options)['team']
|
59
|
+
end
|
60
|
+
|
61
|
+
def team_members(team_id, options={})
|
62
|
+
get("teams/#{team_id}/members", options)['users']
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_team_member(team_id, user, options={})
|
66
|
+
post("teams/#{team_id}/members", options.merge({:name => user}))['user']
|
67
|
+
end
|
68
|
+
|
69
|
+
def remove_team_member(team_id, user, options={})
|
70
|
+
delete("teams/#{team_id}/members", options.merge({:name => user}))['user']
|
71
|
+
end
|
72
|
+
|
73
|
+
def team_repositories(team_id, options={})
|
74
|
+
get("teams/#{team_id}/repositories", options)['repositories']
|
75
|
+
end
|
76
|
+
alias :team_repos :team_repositories
|
77
|
+
|
78
|
+
def add_team_repository(team_id, repo, options={})
|
79
|
+
post("teams/#{team_id}/repositories", options.merge(:name => Repository.new(repo)))['repositories']
|
80
|
+
end
|
81
|
+
alias :add_team_repo :add_team_repository
|
82
|
+
|
83
|
+
def remove_team_repository(team_id, repo, options={})
|
84
|
+
delete("teams/#{team_id}/repositories", options.merge(:name => Repository.new(repo)))['repositories']
|
85
|
+
end
|
86
|
+
alias :remove_team_repo :remove_team_repository
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Pulls
|
4
|
+
def create_pull_request(repo, options={})
|
5
|
+
post("pulls/#{Repository.new(repo)}", options)['pulls']
|
6
|
+
end
|
7
|
+
|
8
|
+
def pull_requests(repo, state='open', options={})
|
9
|
+
get("pulls/#{Repository.new(repo)}/#{state}", options)['pulls']
|
10
|
+
end
|
11
|
+
alias :pulls :pull_requests
|
12
|
+
|
13
|
+
def pull_request(repo, number, options={})
|
14
|
+
get("pulls/#{Repository.new(repo)}/#{number}", options)['pulls']
|
15
|
+
end
|
16
|
+
alias :pull :pull_request
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Repositories
|
4
|
+
|
5
|
+
def search_repositories(q, options={})
|
6
|
+
get("repos/search/#{q}", options)['repositories']
|
7
|
+
end
|
8
|
+
alias :search_repos :search_repositories
|
9
|
+
|
10
|
+
def repository(repo, options={})
|
11
|
+
get("repos/show/#{Repository.new(repo)}", options)['repository']
|
12
|
+
end
|
13
|
+
alias :repo :repository
|
14
|
+
|
15
|
+
def update_repository(repo, values, options={})
|
16
|
+
post("repos/show/#{Repository.new(repo)}", options.merge({:values => values}))['repository']
|
17
|
+
end
|
18
|
+
alias :update_repo :update_repository
|
19
|
+
|
20
|
+
def repositories(username=nil, options={})
|
21
|
+
get(["repos/show", username].compact.join('/'), options)['repositories']
|
22
|
+
end
|
23
|
+
alias :list_repositories :repositories
|
24
|
+
alias :list_repos :repositories
|
25
|
+
alias :repos :repositories
|
26
|
+
|
27
|
+
def watch!(repo, options={})
|
28
|
+
post("repos/watch/#{Repository.new(repo)}", options)['repository']
|
29
|
+
end
|
30
|
+
alias :watch :watch!
|
31
|
+
|
32
|
+
def unwatch!(repo, options={})
|
33
|
+
post("repos/unwatch/#{Repository.new(repo)}", options)['repository']
|
34
|
+
end
|
35
|
+
alias :unwatch :unwatch!
|
36
|
+
|
37
|
+
def fork!(repo, options={})
|
38
|
+
post("repos/fork/#{Repository.new(repo)}", options)['repository']
|
39
|
+
end
|
40
|
+
alias :fork :fork!
|
41
|
+
|
42
|
+
def create_repository(options={})
|
43
|
+
post("repos/create", options)['repository']
|
44
|
+
end
|
45
|
+
alias :create_repo :create_repository
|
46
|
+
alias :create :create_repository
|
47
|
+
|
48
|
+
def delete_repository(repo, options={})
|
49
|
+
post("repos/delete/#{Repository.new(repo)}", options)['repository']
|
50
|
+
end
|
51
|
+
alias :delete_repo :delete_repository
|
52
|
+
|
53
|
+
def set_private!(repo, options={})
|
54
|
+
post("repos/set/private/#{Repository.new(repo)}", options)['repository']
|
55
|
+
end
|
56
|
+
alias :set_private :set_private!
|
57
|
+
|
58
|
+
def set_public!(repo, options={})
|
59
|
+
post("repos/set/public/#{Repository.new(repo)}", options)['repository']
|
60
|
+
end
|
61
|
+
alias :set_public :set_public!
|
62
|
+
|
63
|
+
def deploy_keys(repo, options={})
|
64
|
+
get("repos/keys/#{Repository.new(repo)}", options)['public_keys']
|
65
|
+
end
|
66
|
+
alias :list_deploy_keys :deploy_keys
|
67
|
+
|
68
|
+
def add_deploy_key(repo, options={})
|
69
|
+
post("repos/key/#{Repository.new(repo)}/add", options)['public_keys']
|
70
|
+
end
|
71
|
+
|
72
|
+
def remove_deploy_key(repo, id, options={})
|
73
|
+
post("repos/key/#{Repository.new(repo)}/remove", options.merge(:id => id))['public_keys']
|
74
|
+
end
|
75
|
+
|
76
|
+
def collaborators(repo, options={})
|
77
|
+
get("repos/show/#{Repository.new(repo)}/collaborators", options)['collaborators']
|
78
|
+
end
|
79
|
+
alias :collabs :collaborators
|
80
|
+
|
81
|
+
def add_collaborator(repo, collaborator, options={})
|
82
|
+
post("repos/collaborators/#{Repository.new(repo)}/add/#{collaborator}")['collaborators']
|
83
|
+
end
|
84
|
+
alias :add_collab :add_collaborator
|
85
|
+
|
86
|
+
def remove_collaborator(repo, collaborator, options={})
|
87
|
+
post("repos/collaborators/#{Repository.new(repo)}/remove/#{collaborator}")['collaborators']
|
88
|
+
end
|
89
|
+
alias :remove_collab :remove_collaborator
|
90
|
+
|
91
|
+
def pushable(options={})
|
92
|
+
get("repos/pushable", options)['repositories']
|
93
|
+
end
|
94
|
+
|
95
|
+
def teams(repo, options={})
|
96
|
+
get("repos/show/#{Repository.new(repo)}/teams", options)['repositories']
|
97
|
+
end
|
98
|
+
|
99
|
+
def contributors(repo, anon=true, options={})
|
100
|
+
if anon
|
101
|
+
get("repos/show/#{Repository.new(repo)}/contributors", options)
|
102
|
+
else
|
103
|
+
get("repos/show/#{Repository.new(repo)}/contributors/anon", options)
|
104
|
+
end['contributors']
|
105
|
+
end
|
106
|
+
alias :contribs :contributors
|
107
|
+
|
108
|
+
def watchers(repo, options={})
|
109
|
+
get("repos/show/#{Repository.new(repo)}/watchers", options)['watchers']
|
110
|
+
end
|
111
|
+
|
112
|
+
def network(repo, options={})
|
113
|
+
get("repos/show/#{Repository.new(repo)}/network", options)['network']
|
114
|
+
end
|
115
|
+
|
116
|
+
def languages(repo, options={})
|
117
|
+
get("repos/show/#{Repository.new(repo)}/languages", options)['languages']
|
118
|
+
end
|
119
|
+
|
120
|
+
def tags(repo, options={})
|
121
|
+
get("repos/show/#{Repository.new(repo)}/tags", options)['tags']
|
122
|
+
end
|
123
|
+
|
124
|
+
def branches(repo, options={})
|
125
|
+
get("repos/show/#{Repository.new(repo)}/branches", options)['branches']
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Request
|
4
|
+
def get(path, options={}, raw=false, format_path=true)
|
5
|
+
request(:get, path, options, raw, format_path)
|
6
|
+
end
|
7
|
+
|
8
|
+
def post(path, options={}, raw=false, format_path=true)
|
9
|
+
request(:post, path, options, raw, format_path)
|
10
|
+
end
|
11
|
+
|
12
|
+
def put(path, options={}, raw=false, format_path=true)
|
13
|
+
request(:put, path, options, raw, format_path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete(path, options={}, raw=false, format_path=true)
|
17
|
+
request(:delete, path, options, raw, format_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def request(method, path, options, raw, format_path)
|
23
|
+
response = connection(raw).send(method) do |request|
|
24
|
+
path = formatted_path(path) if format_path
|
25
|
+
case method
|
26
|
+
when :get, :delete
|
27
|
+
request.url(path, options)
|
28
|
+
when :post, :put
|
29
|
+
request.path = path
|
30
|
+
request.body = options unless options.empty?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
raw ? response : response.body
|
34
|
+
end
|
35
|
+
|
36
|
+
def formatted_path(path)
|
37
|
+
['api', ['v', version].join, format, path].compact.join('/')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Timelines
|
4
|
+
|
5
|
+
def public_timeline(username=login, options={})
|
6
|
+
if username.nil?
|
7
|
+
path = "timeline.json"
|
8
|
+
else
|
9
|
+
path = "#{username}.json"
|
10
|
+
end
|
11
|
+
get(path, options, false, false)
|
12
|
+
end
|
13
|
+
|
14
|
+
def timeline(options={})
|
15
|
+
get("#{login}.private.json", options, false, false)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module Users
|
4
|
+
EMAIL_RE = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/
|
5
|
+
|
6
|
+
def search_users(search, options={})
|
7
|
+
if search.match(EMAIL_RE)
|
8
|
+
get("user/email/#{search}", options)
|
9
|
+
else
|
10
|
+
get("user/search/#{search}", options)
|
11
|
+
end['users']
|
12
|
+
end
|
13
|
+
|
14
|
+
def user(username=nil, options={})
|
15
|
+
get(["user/show", username].compact.join('/'), options)['user']
|
16
|
+
end
|
17
|
+
|
18
|
+
def update_user(values, options={})
|
19
|
+
post("user/show/#{login}", options.merge({:values => values}))['user']
|
20
|
+
end
|
21
|
+
|
22
|
+
def followers(user=login, options={})
|
23
|
+
get("user/show/#{user}/followers", options)['users']
|
24
|
+
end
|
25
|
+
|
26
|
+
def following(user=login, options={})
|
27
|
+
get("user/show/#{user}/following", options)['users']
|
28
|
+
end
|
29
|
+
|
30
|
+
def follows?(*args)
|
31
|
+
target = args.pop
|
32
|
+
user = args.first
|
33
|
+
user ||= login
|
34
|
+
return if user.nil?
|
35
|
+
following(user).include?(target)
|
36
|
+
end
|
37
|
+
|
38
|
+
def follow!(user, options={})
|
39
|
+
post("user/follow/#{user}", options)['users']
|
40
|
+
end
|
41
|
+
alias :follow :follow!
|
42
|
+
|
43
|
+
def unfollow!(user, options={})
|
44
|
+
post("user/unfollow/#{user}", options)['users']
|
45
|
+
end
|
46
|
+
alias :unfollow :unfollow!
|
47
|
+
|
48
|
+
def watched(user=login, options={})
|
49
|
+
get("repos/watched/#{user}", options)['repositories']
|
50
|
+
end
|
51
|
+
|
52
|
+
def keys(options={})
|
53
|
+
get("user/keys", options)['public_keys']
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_key(title, key, options={})
|
57
|
+
post("user/key/add", options.merge({:title => title, :key => key}))['public_keys']
|
58
|
+
end
|
59
|
+
|
60
|
+
def remove_key(id, options={})
|
61
|
+
post("user/key/remove", options.merge({:id => id}))['public_keys']
|
62
|
+
end
|
63
|
+
|
64
|
+
def emails(options={})
|
65
|
+
get("user/emails", options)['emails']
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_email(email, options={})
|
69
|
+
post("user/email/add", options.merge({:email => email}))['emails']
|
70
|
+
end
|
71
|
+
|
72
|
+
def remove_email(email, options={})
|
73
|
+
post("user/email/remove", options.merge({:email => email}))['emails']
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require File.expand_path('../version', __FILE__)
|
3
|
+
|
4
|
+
module Octokit
|
5
|
+
module Configuration
|
6
|
+
VALID_OPTIONS_KEYS = [:adapter, :endpoint, :format, :login, :password, :proxy, :token, :user_agent, :version].freeze
|
7
|
+
VALID_FORMATS = [:json, :xml, :yaml].freeze
|
8
|
+
|
9
|
+
DEFAULT_ADAPTER = Faraday.default_adapter.freeze
|
10
|
+
DEFAULT_ENDPOINT = 'https://github.com/'.freeze
|
11
|
+
DEFAULT_FORMAT = :json.freeze
|
12
|
+
DEFAULT_LOGIN = nil.freeze
|
13
|
+
DEFAULT_PASSWORD = nil.freeze
|
14
|
+
DEFAULT_PROXY = nil.freeze
|
15
|
+
DEFAULT_TOKEN = nil.freeze
|
16
|
+
DEFAULT_USER_AGENT = "Octokit Ruby Gem #{Octokit::VERSION}".freeze
|
17
|
+
DEFAULT_VERSION = 2
|
18
|
+
|
19
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
20
|
+
|
21
|
+
def self.extended(base)
|
22
|
+
base.reset
|
23
|
+
end
|
24
|
+
|
25
|
+
def configure
|
26
|
+
yield self
|
27
|
+
end
|
28
|
+
|
29
|
+
def options
|
30
|
+
VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => send(k)) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def reset
|
34
|
+
self.adapter = DEFAULT_ADAPTER
|
35
|
+
self.endpoint = DEFAULT_ENDPOINT
|
36
|
+
self.format = DEFAULT_FORMAT
|
37
|
+
self.login = DEFAULT_LOGIN
|
38
|
+
self.password = DEFAULT_PASSWORD
|
39
|
+
self.proxy = DEFAULT_PROXY
|
40
|
+
self.token = DEFAULT_TOKEN
|
41
|
+
self.user_agent = DEFAULT_USER_AGENT
|
42
|
+
self.version = DEFAULT_VERSION
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|