octopussy 0.1.4 → 0.2.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/Rakefile +5 -5
- data/VERSION +1 -1
- data/changelog.markdown +18 -5
- data/lib/octopussy.rb +32 -110
- data/lib/octopussy/client.rb +31 -66
- data/octopussy.gemspec +16 -13
- data/test/fixtures/list_branch_commits.json +48 -0
- data/test/fixtures/list_commits.json +824 -0
- data/test/fixtures/show_commit.json +37 -0
- data/test/helper.rb +9 -14
- data/test/{test_octopussy.rb → octopussy_test.rb} +129 -83
- data/test/{test_repo.rb → repo_test.rb} +3 -3
- metadata +69 -35
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'rake'
|
2
|
+
require 'shoulda/tasks'
|
3
3
|
|
4
4
|
begin
|
5
5
|
require 'jeweler'
|
@@ -14,9 +14,9 @@ begin
|
|
14
14
|
gem.add_dependency('hashie', '~> 0.1.3')
|
15
15
|
gem.add_dependency('httparty', '~> 0.4.5')
|
16
16
|
|
17
|
-
gem.add_development_dependency('
|
17
|
+
gem.add_development_dependency('shoulda', '>= 2.10.1')
|
18
18
|
gem.add_development_dependency('jnunemaker-matchy', '0.4.0')
|
19
|
-
gem.add_development_dependency('mocha', '0.9.4')
|
19
|
+
gem.add_development_dependency('mocha', '>= 0.9.4')
|
20
20
|
gem.add_development_dependency('fakeweb', '>= 1.2.5')
|
21
21
|
end
|
22
22
|
Jeweler::GemcutterTasks.new
|
@@ -26,9 +26,9 @@ end
|
|
26
26
|
|
27
27
|
require 'rake/testtask'
|
28
28
|
Rake::TestTask.new(:test) do |test|
|
29
|
+
test.ruby_opts = ['-rubygems'] if defined? Gem
|
29
30
|
test.libs << 'lib' << 'test'
|
30
|
-
test.pattern = 'test
|
31
|
-
test.verbose = true
|
31
|
+
test.pattern = 'test/**/*_test.rb'
|
32
32
|
end
|
33
33
|
|
34
34
|
begin
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/changelog.markdown
CHANGED
@@ -1,12 +1,25 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
3
|
+
## 0.2.0
|
4
|
+
* Commits API courtesy of @enricob
|
5
|
+
|
2
6
|
## 0.1.4
|
7
|
+
|
3
8
|
* Preserved links array and content for events parsed from feeds
|
9
|
+
|
4
10
|
## 0.1.3
|
5
|
-
|
11
|
+
|
12
|
+
* Added Download event
|
13
|
+
|
6
14
|
## 0.1.2
|
7
|
-
|
8
|
-
|
15
|
+
|
16
|
+
* Added Delete event type
|
17
|
+
* Added Public event type
|
18
|
+
|
9
19
|
## 0.1.1
|
10
|
-
|
20
|
+
|
21
|
+
* Added Comment event type
|
22
|
+
|
11
23
|
## 0.0.1 Initial version
|
12
|
-
|
24
|
+
|
25
|
+
* GitHub v2 API complete
|
data/lib/octopussy.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
-
require '
|
1
|
+
require 'forwardable'
|
2
2
|
|
3
|
-
gem 'hashie', '~> 0.1.3'
|
4
|
-
require 'hashie'
|
5
|
-
|
6
|
-
gem 'httparty', '~> 0.4.5'
|
7
3
|
require 'httparty'
|
8
|
-
|
9
|
-
directory = File.expand_path(File.dirname(__FILE__))
|
10
|
-
|
4
|
+
require 'hashie'
|
11
5
|
Hash.send :include, Hashie::HashExtensions
|
12
6
|
|
7
|
+
libdir = File.dirname(__FILE__)
|
8
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
9
|
+
|
10
|
+
require 'octopussy/repo'
|
11
|
+
require 'octopussy/event'
|
12
|
+
require 'octopussy/client'
|
13
13
|
|
14
14
|
module Octopussy
|
15
|
+
extend SingleForwardable
|
16
|
+
|
15
17
|
class OctopussyError < StandardError
|
16
18
|
attr_reader :data
|
17
19
|
|
@@ -21,115 +23,35 @@ module Octopussy
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
|
-
class
|
25
|
-
class
|
26
|
-
class General
|
26
|
+
class ClientError < StandardError; end
|
27
|
+
class ServerError < OctopussyError; end
|
28
|
+
class General < OctopussyError; end
|
29
|
+
|
30
|
+
class RateLimitExceeded < ClientError; end
|
31
|
+
class Unauthorized < ClientError; end
|
32
|
+
class NotFound < ClientError; end
|
27
33
|
|
28
34
|
class Unavailable < StandardError; end
|
29
35
|
class InformOctopussy < StandardError; end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def self.user(login)
|
38
|
-
Client.new.user(login)
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.followers(login)
|
42
|
-
Client.new.followers(login)
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.following(login)
|
46
|
-
Client.new.following(login)
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.follows?(username, target)
|
50
|
-
Client.new.follows?(username, target)
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.watched(login)
|
54
|
-
Client.new.watched(login)
|
55
|
-
end
|
56
|
-
|
36
|
+
|
37
|
+
def self.client; Client.new end
|
38
|
+
|
39
|
+
# Users
|
40
|
+
def_delegators :client, :search_users, :user, :followers, :following, :follows?, :watched
|
41
|
+
|
57
42
|
# Issues
|
58
|
-
|
59
|
-
|
60
|
-
Client.new.search_issues(repo, state, q)
|
61
|
-
end
|
62
|
-
|
63
|
-
# repo, state
|
64
|
-
def self.issues(repo, state)
|
65
|
-
Client.new.issues(repo, state)
|
66
|
-
end
|
67
|
-
|
68
|
-
# repo, id
|
69
|
-
def self.issue(repo, id)
|
70
|
-
Client.new.issue(repo, id)
|
71
|
-
end
|
72
|
-
|
43
|
+
def_delegators :client, :search_issues, :issues, :issue
|
44
|
+
|
73
45
|
# Repos
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.repo(repo)
|
80
|
-
Client.new.repo(repo)
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.list_repos(username)
|
84
|
-
Client.new.list_repos(username)
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.collaborators(repo)
|
88
|
-
Client.new.collaborators(repo)
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.network(repo)
|
92
|
-
Client.new.network(repo)
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.languages(repo)
|
96
|
-
Client.new.languages(repo)
|
97
|
-
end
|
98
|
-
|
99
|
-
def self.tags(repo)
|
100
|
-
Client.new.tags(repo)
|
101
|
-
end
|
102
|
-
|
103
|
-
def self.branches(repo)
|
104
|
-
Client.new.branches(repo)
|
105
|
-
end
|
106
|
-
|
46
|
+
def_delegators :client, :branches, :collaborators, :languages, :list_repos,
|
47
|
+
:network, :repo, :search_repos, :tags
|
48
|
+
|
107
49
|
# Network Meta
|
50
|
+
def_delegators :client, :network_meta, :network_data
|
108
51
|
|
109
|
-
def self.network_meta(repo)
|
110
|
-
Client.new.network_meta(repo)
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.network_data(repo, nethash)
|
114
|
-
Client.new.network_data(repo, nethash)
|
115
|
-
end
|
116
|
-
|
117
52
|
# Trees
|
118
|
-
|
119
|
-
def self.tree(repo, sha)
|
120
|
-
Client.new.tree(repo, sha)
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.blob(repo, sha, path)
|
124
|
-
Client.new.blob(repo, sha, path)
|
125
|
-
end
|
126
|
-
|
127
|
-
def self.raw(repo, sha)
|
128
|
-
Client.new.raw(repo, sha)
|
129
|
-
end
|
53
|
+
def_delegators :client, :tree, :blob, :raw
|
130
54
|
|
55
|
+
# Commits
|
56
|
+
def_delegators :client, :list_commits, :commit
|
131
57
|
end
|
132
|
-
|
133
|
-
require File.join(directory, 'octopussy', 'repo')
|
134
|
-
require File.join(directory, 'octopussy', 'event')
|
135
|
-
require File.join(directory, 'octopussy', 'client')
|
data/lib/octopussy/client.rb
CHANGED
@@ -16,44 +16,37 @@ module Octopussy
|
|
16
16
|
def search_users(q)
|
17
17
|
q = CGI.escape(q)
|
18
18
|
response = self.class.get("/user/search/#{q}")
|
19
|
-
handle_response(response)
|
20
19
|
Hashie::Mash.new(response).users
|
21
20
|
end
|
22
21
|
|
23
22
|
def user(login=self.login)
|
24
23
|
response = self.class.get("/user/show/#{login}", :query => auth_params)
|
25
|
-
handle_response(response)
|
26
24
|
Hashie::Mash.new(response).user
|
27
25
|
end
|
28
26
|
|
29
27
|
|
30
28
|
def update_user(values={})
|
31
29
|
response = self.class.post("/user/show/#{self.login}", :query => auth_params, :body => {:values => values})
|
32
|
-
handle_response(response)
|
33
30
|
Hashie::Mash.new(response).user
|
34
31
|
end
|
35
32
|
|
36
33
|
def followers(login=self.login)
|
37
34
|
response = self.class.get("/user/show/#{login}/followers")
|
38
|
-
handle_response(response)
|
39
35
|
Hashie::Mash.new(response).users
|
40
36
|
end
|
41
37
|
|
42
38
|
def following(login=self.login)
|
43
39
|
response = self.class.get("/user/show/#{login}/following")
|
44
|
-
handle_response(response)
|
45
40
|
Hashie::Mash.new(response).users
|
46
41
|
end
|
47
42
|
|
48
43
|
def follow!(username)
|
49
44
|
response = self.class.post("/user/follow/#{username}", :query => auth_params)
|
50
|
-
handle_response(response)
|
51
45
|
Hashie::Mash.new(response).users
|
52
46
|
end
|
53
47
|
|
54
48
|
def unfollow!(username)
|
55
49
|
response = self.class.post("/user/unfollow/#{username}", :query => auth_params)
|
56
|
-
handle_response(response)
|
57
50
|
Hashie::Mash.new(response).users
|
58
51
|
end
|
59
52
|
|
@@ -67,43 +60,36 @@ module Octopussy
|
|
67
60
|
|
68
61
|
def watched(login=self.login)
|
69
62
|
response = self.class.get("/repos/watched/#{login}")
|
70
|
-
handle_response(response)
|
71
63
|
Hashie::Mash.new(response).repositories
|
72
64
|
end
|
73
65
|
|
74
66
|
def emails
|
75
67
|
response = self.class.get("/user/emails", :query => auth_params)
|
76
|
-
handle_response(response)
|
77
68
|
Hashie::Mash.new(response).emails
|
78
69
|
end
|
79
70
|
|
80
71
|
def add_email(email)
|
81
72
|
response = self.class.post("/user/email/add", :query => auth_params, :body => {:email => email})
|
82
|
-
handle_response(response)
|
83
73
|
Hashie::Mash.new(response).emails
|
84
74
|
end
|
85
75
|
|
86
76
|
def remove_email(email)
|
87
77
|
response = self.class.post("/user/email/remove", :query => auth_params, :body => {:email => email})
|
88
|
-
handle_response(response)
|
89
78
|
Hashie::Mash.new(response).emails
|
90
79
|
end
|
91
80
|
|
92
81
|
def keys
|
93
82
|
response = self.class.get("/user/keys", :query => auth_params)
|
94
|
-
handle_response(response)
|
95
83
|
Hashie::Mash.new(response).public_keys
|
96
84
|
end
|
97
85
|
|
98
86
|
def add_key(title, key)
|
99
87
|
response = self.class.post("/user/key/add", :query => auth_params, :body => {:title => title, :key => key})
|
100
|
-
handle_response(response)
|
101
88
|
Hashie::Mash.new(response).public_keys
|
102
89
|
end
|
103
90
|
|
104
91
|
def remove_key(id)
|
105
92
|
response = self.class.post("/user/key/remove", :query => auth_params, :body => {:id => id})
|
106
|
-
handle_response(response)
|
107
93
|
Hashie::Mash.new(response).public_keys
|
108
94
|
end
|
109
95
|
|
@@ -112,77 +98,66 @@ module Octopussy
|
|
112
98
|
def search_issues(repo, state, q)
|
113
99
|
repo = Repo.new(repo)
|
114
100
|
response = self.class.get("/issues/search/#{repo.username}/#{repo.name}/#{state}/#{q}")
|
115
|
-
handle_response(response)
|
116
101
|
Hashie::Mash.new(response).issues
|
117
102
|
end
|
118
103
|
|
119
104
|
def issues(repo, state)
|
120
105
|
repo = Repo.new(repo)
|
121
106
|
response = self.class.get("/issues/list/#{repo.username}/#{repo.name}/#{state}")
|
122
|
-
handle_response(response)
|
123
107
|
Hashie::Mash.new(response).issues
|
124
108
|
end
|
125
109
|
|
126
110
|
def issue(repo, id)
|
127
111
|
repo = Repo.new(repo)
|
128
112
|
response = self.class.get("/issues/show/#{repo.username}/#{repo.name}/#{id}")
|
129
|
-
handle_response(response)
|
130
113
|
Hashie::Mash.new(response).issue
|
131
114
|
end
|
132
115
|
|
133
116
|
def open_issue(repo, title, body)
|
134
117
|
repo = Repo.new(repo)
|
135
118
|
response = self.class.post("/issues/open/#{repo.username}/#{repo.name}", :body => {:title => title, :body => body})
|
136
|
-
handle_response(response)
|
137
119
|
Hashie::Mash.new(response).issue
|
138
120
|
end
|
139
121
|
|
140
122
|
def close_issue(repo, number)
|
141
123
|
repo = Repo.new(repo)
|
142
124
|
response = self.class.post("/issues/close/#{repo.username}/#{repo.name}/#{number}")
|
143
|
-
handle_response(response)
|
144
125
|
Hashie::Mash.new(response).issue
|
145
126
|
end
|
146
127
|
|
147
128
|
def reopen_issue(repo, number)
|
148
129
|
repo = Repo.new(repo)
|
149
130
|
response = self.class.post("/issues/reopen/#{repo.username}/#{repo.name}/#{number}")
|
150
|
-
handle_response(response)
|
151
131
|
Hashie::Mash.new(response).issue
|
152
132
|
end
|
153
133
|
|
154
134
|
def update_issue(repo, number, title, body)
|
155
135
|
repo = Repo.new(repo)
|
156
136
|
response = self.class.post("/issues/edit/#{repo.username}/#{repo.name}/#{number}", :body => {:title => title, :body => body})
|
157
|
-
handle_response(response)
|
158
137
|
Hashie::Mash.new(response).issue
|
159
138
|
end
|
160
139
|
|
161
140
|
def labels(repo)
|
162
141
|
repo = Repo.new(repo)
|
163
142
|
response = self.class.get("/issues/labels/#{repo.username}/#{repo.name}")
|
164
|
-
handle_response(response)
|
165
143
|
Hashie::Mash.new(response).labels
|
166
144
|
end
|
167
145
|
|
168
146
|
def add_label(repo, number, label)
|
169
147
|
repo = Repo.new(repo)
|
170
148
|
response = self.class.post("/issues/label/add/#{repo.username}/#{repo.name}/#{label}/#{number}")
|
171
|
-
handle_response(response)
|
172
149
|
Hashie::Mash.new(response).labels
|
173
150
|
end
|
174
151
|
|
175
152
|
def remove_label(repo, number, label)
|
176
153
|
repo = Repo.new(repo)
|
177
154
|
response = self.class.post("/issues/label/remove/#{repo.username}/#{repo.name}/#{label}/#{number}")
|
178
|
-
handle_response(response)
|
179
155
|
Hashie::Mash.new(response).labels
|
180
156
|
end
|
181
157
|
|
182
158
|
def add_comment(repo, number, comment)
|
183
159
|
repo = Repo.new(repo)
|
184
160
|
response = self.class.post("/issues/comment/#{repo.username}/#{repo.name}/#{number}", :body => {:comment => comment})
|
185
|
-
handle_response(response)
|
186
161
|
Hashie::Mash.new(response).comment
|
187
162
|
end
|
188
163
|
|
@@ -191,42 +166,36 @@ module Octopussy
|
|
191
166
|
def search_repos(q)
|
192
167
|
q = CGI.escape(q)
|
193
168
|
response = self.class.get("/repos/search/#{q}")
|
194
|
-
handle_response(response)
|
195
169
|
Hashie::Mash.new(response).repositories
|
196
170
|
end
|
197
171
|
|
198
172
|
def watch(repo)
|
199
173
|
repo = Repo.new(repo)
|
200
174
|
response = self.class.post("/repos/watch/#{repo.username}/#{repo.name}", :query => auth_params)
|
201
|
-
handle_response(response)
|
202
175
|
Hashie::Mash.new(response).repository
|
203
176
|
end
|
204
177
|
|
205
178
|
def unwatch(repo)
|
206
179
|
repo = Repo.new(repo)
|
207
180
|
response = self.class.post("/repos/unwatch/#{repo.username}/#{repo.name}", :query => auth_params)
|
208
|
-
handle_response(response)
|
209
181
|
Hashie::Mash.new(response).repository
|
210
182
|
end
|
211
183
|
|
212
184
|
def fork(repo)
|
213
185
|
repo = Repo.new(repo)
|
214
186
|
response = self.class.post("/repos/fork/#{repo.username}/#{repo.name}", :query => auth_params)
|
215
|
-
handle_response(response)
|
216
187
|
Hashie::Mash.new(response).repository
|
217
188
|
end
|
218
189
|
|
219
190
|
# :name, :description, :homepage, :public
|
220
191
|
def create(options)
|
221
192
|
response = self.class.post("/repos/create", :query => auth_params, :body => options)
|
222
|
-
handle_response(response)
|
223
193
|
Hashie::Mash.new(response).repository
|
224
194
|
end
|
225
195
|
|
226
196
|
def delete(repo, delete_token={})
|
227
197
|
repo = Repo.new(repo)
|
228
198
|
response = self.class.post("/repos/delete/#{repo.name}", :query => auth_params, :body => {:delete_token => delete_token})
|
229
|
-
handle_response(response)
|
230
199
|
Hashie::Mash.new(response).repository
|
231
200
|
end
|
232
201
|
|
@@ -237,97 +206,83 @@ module Octopussy
|
|
237
206
|
def set_private(repo)
|
238
207
|
repo = Repo.new(repo)
|
239
208
|
response = self.class.post("/repos/set/private/#{repo.name}", :query => auth_params)
|
240
|
-
handle_response(response)
|
241
209
|
Hashie::Mash.new(response).repository
|
242
210
|
end
|
243
211
|
|
244
212
|
def set_public(repo)
|
245
213
|
repo = Repo.new(repo)
|
246
214
|
response = self.class.post("/repos/set/public/#{repo.name}", :query => auth_params)
|
247
|
-
handle_response(response)
|
248
215
|
Hashie::Mash.new(response).repository
|
249
216
|
end
|
250
217
|
|
251
218
|
def deploy_keys(repo)
|
252
219
|
repo = Repo.new(repo)
|
253
220
|
response = self.class.get("/repos/keys/#{repo.name}", :query => auth_params)
|
254
|
-
handle_response(response)
|
255
221
|
Hashie::Mash.new(response).public_keys
|
256
222
|
end
|
257
223
|
|
258
224
|
def add_deploy_key(repo, key, title='')
|
259
225
|
repo = Repo.new(repo)
|
260
226
|
response = self.class.post("/repos/key/#{repo.name}/add", :query => auth_params, :body => {:title => title, :key => key})
|
261
|
-
handle_response(response)
|
262
227
|
Hashie::Mash.new(response).public_keys
|
263
228
|
end
|
264
229
|
|
265
230
|
def remove_deploy_key(repo, id)
|
266
231
|
repo = Repo.new(repo)
|
267
232
|
response = self.class.post("/repos/key/#{repo.name}/remove", :query => auth_params, :body => {:id => id})
|
268
|
-
handle_response(response)
|
269
233
|
Hashie::Mash.new(response).public_keys
|
270
234
|
end
|
271
235
|
|
272
236
|
def collaborators(repo)
|
273
237
|
repo = Repo.new(repo)
|
274
238
|
response = self.class.post("/repos/show/#{repo.username}/#{repo.name}/collaborators", :query => auth_params)
|
275
|
-
handle_response(response)
|
276
239
|
Hashie::Mash.new(response).collaborators
|
277
240
|
end
|
278
241
|
|
279
242
|
def repo(repo)
|
280
243
|
repo = Repo.new(repo)
|
281
244
|
response = self.class.get("/repos/show/#{repo.username}/#{repo.name}")
|
282
|
-
handle_response(response)
|
283
245
|
Hashie::Mash.new(response).repository
|
284
246
|
end
|
285
247
|
|
286
248
|
def list_repos(username)
|
287
249
|
response = self.class.get("/repos/show/#{username}")
|
288
|
-
handle_response(response)
|
289
250
|
Hashie::Mash.new(response).repositories
|
290
251
|
end
|
291
252
|
|
292
253
|
def add_collaborator(repo, collaborator)
|
293
254
|
repo = Repo.new(repo)
|
294
255
|
response = self.class.post("/repos/collaborators/#{repo.name}/add/#{collaborator}", :query => auth_params)
|
295
|
-
handle_response(response)
|
296
256
|
Hashie::Mash.new(response).collaborators
|
297
257
|
end
|
298
258
|
|
299
259
|
def remove_collaborator(repo, collaborator)
|
300
260
|
repo = Repo.new(repo)
|
301
261
|
response = self.class.post("/repos/collaborators/#{repo.name}/remove/#{collaborator}", :query => auth_params)
|
302
|
-
handle_response(response)
|
303
262
|
Hashie::Mash.new(response).collaborators
|
304
263
|
end
|
305
264
|
|
306
265
|
def network(repo)
|
307
266
|
repo = Repo.new(repo)
|
308
267
|
response = self.class.get("/repos/show/#{repo.username}/#{repo.name}/network")
|
309
|
-
handle_response(response)
|
310
268
|
Hashie::Mash.new(response).network
|
311
269
|
end
|
312
270
|
|
313
271
|
def languages(repo)
|
314
272
|
repo = Repo.new(repo)
|
315
273
|
response = self.class.get("/repos/show/#{repo.username}/#{repo.name}/languages")
|
316
|
-
handle_response(response)
|
317
274
|
Hashie::Mash.new(response).languages
|
318
275
|
end
|
319
276
|
|
320
277
|
def tags(repo)
|
321
278
|
repo = Repo.new(repo)
|
322
279
|
response = self.class.get("/repos/show/#{repo.username}/#{repo.name}/tags")
|
323
|
-
handle_response(response)
|
324
280
|
Hashie::Mash.new(response).tags
|
325
281
|
end
|
326
282
|
|
327
283
|
def branches(repo)
|
328
284
|
repo = Repo.new(repo)
|
329
285
|
response = self.class.get("/repos/show/#{repo.username}/#{repo.name}/branches")
|
330
|
-
handle_response(response)
|
331
286
|
Hashie::Mash.new(response).branches
|
332
287
|
end
|
333
288
|
|
@@ -336,14 +291,12 @@ module Octopussy
|
|
336
291
|
def network_meta(repo)
|
337
292
|
repo = Repo.new(repo)
|
338
293
|
response = self.class.get("http://github.com/#{repo.username}/#{repo.name}/network_meta")
|
339
|
-
handle_response(response)
|
340
294
|
Hashie::Mash.new(response)
|
341
295
|
end
|
342
296
|
|
343
297
|
def network_data(repo, nethash)
|
344
298
|
repo = Repo.new(repo)
|
345
299
|
response = self.class.get("http://github.com/#{repo.username}/#{repo.name}/network_data_chunk", :query => {:nethash => nethash})
|
346
|
-
handle_response(response)
|
347
300
|
Hashie::Mash.new(response).commits
|
348
301
|
end
|
349
302
|
|
@@ -352,42 +305,54 @@ module Octopussy
|
|
352
305
|
def tree(repo, sha)
|
353
306
|
repo = Repo.new(repo)
|
354
307
|
response = self.class.get("http://github.com/api/v2/json/tree/show/#{repo.username}/#{repo.name}/#{sha}")
|
355
|
-
handle_response(response)
|
356
308
|
Hashie::Mash.new(response).tree
|
357
309
|
end
|
358
310
|
|
359
311
|
def blob(repo, sha, path)
|
360
312
|
repo = Repo.new(repo)
|
361
313
|
response = self.class.get("http://github.com/api/v2/json/blob/show/#{repo.username}/#{repo.name}/#{sha}/#{path}")
|
362
|
-
handle_response(response)
|
363
314
|
Hashie::Mash.new(response).blob
|
364
315
|
end
|
365
316
|
|
366
317
|
def raw(repo, sha)
|
367
318
|
repo = Repo.new(repo)
|
368
319
|
response = self.class.get("http://github.com/api/v2/yaml/blob/show/#{repo.username}/#{repo.name}/#{sha}")
|
369
|
-
handle_response(response)
|
370
320
|
response.body
|
371
321
|
end
|
372
322
|
|
373
|
-
|
323
|
+
# Commits
|
374
324
|
|
375
|
-
|
376
|
-
|
377
|
-
|
325
|
+
def list_commits(repo, branch="master")
|
326
|
+
repo = Repo.new(repo)
|
327
|
+
response = self.class.get("http://github.com/api/v2/json/commits/list/#{repo.username}/#{repo.name}/#{branch}")
|
328
|
+
Hashie::Mash.new(response).commits
|
329
|
+
end
|
330
|
+
|
331
|
+
def commit(repo, sha)
|
332
|
+
repo = Repo.new(repo)
|
333
|
+
response = self.class.get("http://github.com/api/v2/json/commits/show/#{repo.username}/#{repo.name}/#{sha}")
|
334
|
+
Hashie::Mash.new(response).commit
|
335
|
+
end
|
336
|
+
|
337
|
+
private
|
378
338
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
339
|
+
def auth_params
|
340
|
+
@login.nil? ? {} : {:login => @login, :token => @token}
|
341
|
+
end
|
342
|
+
|
343
|
+
def self.get(*args); handle_response super end
|
344
|
+
def self.post(*args); handle_response super end
|
345
|
+
|
346
|
+
def self.handle_response(response)
|
347
|
+
case response.code
|
348
|
+
when 401; raise Unauthorized.new
|
349
|
+
when 403; raise RateLimitExceeded.new
|
350
|
+
when 404; raise NotFound.new
|
351
|
+
when 400...500; raise ClientError.new
|
352
|
+
when 500...600; raise ServerError.new(response.code)
|
353
|
+
else; response
|
390
354
|
end
|
355
|
+
end
|
391
356
|
|
392
357
|
end
|
393
|
-
end
|
358
|
+
end
|