github_api 0.3.6 → 0.3.7

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/README.rdoc CHANGED
@@ -26,6 +26,13 @@ At this stage you can also supply various configuration parameters, such as :use
26
26
 
27
27
  @github = Github.new :user => 'peter-murach', :repo => 'github-api'
28
28
 
29
+ or
30
+
31
+ @github = Github.new do |opts|
32
+ opts.user = 'peter-murach'
33
+ opts.repo = 'github-api'
34
+ end
35
+
29
36
  You can authenticate either using OAuth authentication convenience methods(see section OAuth) or through basic authentication by passing your login and password credentials
30
37
 
31
38
  @github = Github.new :login => 'peter-murach', :password => '...'
@@ -45,7 +52,7 @@ The code base is modular and allows for you to work specifically with a given pa
45
52
  @repos = Github::Repos.new
46
53
  @repos.branches 'peter-murach', 'github'
47
54
 
48
- or
55
+ or
49
56
 
50
57
  @repos = Github::Repos.new :user => 'peter-murach', :repo => 'github'
51
58
  @repos.branches
@@ -0,0 +1,6 @@
1
+ VCR.config do |conf|
2
+ conf.stub_with :webmock
3
+ conf.cassette_library_dir = 'features/cassettes'
4
+ conf.default_cassette_options = { :record => :new_episodes }
5
+ conf.filter_sensitive_data('<***>') { ''}
6
+ end
data/lib/github_api.rb CHANGED
@@ -11,8 +11,8 @@ module Github
11
11
  # Alias for Github::Client.new
12
12
  #
13
13
  # @return [Github::Client]
14
- def new(options = {})
15
- Github::Client.new(options)
14
+ def new(options = {}, &block)
15
+ Github::Client.new(options, &block)
16
16
  end
17
17
 
18
18
  # Delegate to Github::Client
@@ -36,13 +36,15 @@ module Github
36
36
  end
37
37
 
38
38
  # Creates new API
39
- def initialize(options = {})
39
+ def initialize(options = {}, &block)
40
40
  options = Github.options.merge(options)
41
41
  Configuration::VALID_OPTIONS_KEYS.each do |key|
42
42
  send("#{key}=", options[key])
43
43
  end
44
44
  _process_basic_auth(options[:basic_auth])
45
45
  client if client_id? && client_secret?
46
+
47
+ self.instance_eval(&block) if block_given?
46
48
  end
47
49
 
48
50
  private
@@ -4,7 +4,7 @@ module Github
4
4
  class Issues
5
5
  module Labels
6
6
 
7
- VALID_LABEL_INPUTS = %w[ name color ]
7
+ VALID_LABEL_INPUTS = %w[ name color ].freeze
8
8
 
9
9
  # List all labels for a repository
10
10
  #
@@ -22,6 +22,7 @@ module Github
22
22
  return response unless block_given?
23
23
  response.each { |el| yield el }
24
24
  end
25
+ alias :list_labels :labels
25
26
 
26
27
  # Get a single label
27
28
  #
@@ -32,10 +33,12 @@ module Github
32
33
  def label(user_name, repo_name, label_id, params={})
33
34
  _update_user_repo_params(user_name, repo_name)
34
35
  _validate_user_repo_params(user, repo) unless user? && repo?
36
+ _validate_presence_of label_id
35
37
  _normalize_params_keys(params)
36
38
 
37
39
  get("/repos/#{user}/#{repo}/labels/#{label_id}", params)
38
40
  end
41
+ alias :get_label :label
39
42
 
40
43
  # Create a label
41
44
  #
@@ -91,8 +94,9 @@ module Github
91
94
  def delete_label(user_name, repo_name, label_id, params={})
92
95
  _update_user_repo_params(user_name, repo_name)
93
96
  _validate_user_repo_params(user, repo) unless user? && repo?
94
- _validate_presence_of milestone_id
95
- _normalize_params_keys(params)
97
+
98
+ _validate_presence_of label_id
99
+ _normalize_params_keys params
96
100
 
97
101
  delete("/repos/#{user}/#{repo}/labels/#{label_id}", params)
98
102
  end
@@ -111,6 +115,7 @@ module Github
111
115
 
112
116
  get("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params)
113
117
  end
118
+ alias :issue_labels :labels_for
114
119
 
115
120
  # Add labels to an issue
116
121
  #
@@ -120,7 +125,8 @@ module Github
120
125
  #
121
126
  def add_labels(user_name, repo_name, issue_id, *args)
122
127
  params = args.last.is_a?(Hash) ? args.pop : {}
123
- params['data'] = [args].flatten unless args.nil?
128
+ params['data'] = args unless args.empty?
129
+
124
130
  _update_user_repo_params(user_name, repo_name)
125
131
  _validate_user_repo_params(user, repo) unless user? && repo?
126
132
  _validate_presence_of(issue_id)
@@ -128,6 +134,7 @@ module Github
128
134
 
129
135
  post("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params)
130
136
  end
137
+ alias :add_issue_labels :add_labels
131
138
 
132
139
  # Remove a label from an issue
133
140
  #
@@ -143,8 +150,8 @@ module Github
143
150
  def remove_label(user_name, repo_name, issue_id, label_id=nil, params={})
144
151
  _update_user_repo_params(user_name, repo_name)
145
152
  _validate_user_repo_params(user, repo) unless user? && repo?
146
- _validate_presence_of(issue_id)
147
- _normalize_params_keys(params)
153
+ _validate_presence_of issue_id
154
+ _normalize_params_keys params
148
155
 
149
156
  if label_id
150
157
  delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels/#{label_id}", params)
@@ -152,13 +159,14 @@ module Github
152
159
  delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params)
153
160
  end
154
161
  end
162
+ alias :remove_label_from_issue :remove_label
155
163
 
156
164
  # Replace all labels for an issue
157
165
  #
158
166
  # Sending an empty array ([]) will remove all Labels from the Issue.
159
167
  #
160
168
  # = Examples
161
- # @github = Github.new
169
+ # @github = Github.new
162
170
  # @github.issues.replace_labels 'user-name', 'repo-name', 'issue-id', 'label1', 'label2', ...
163
171
  #
164
172
  def replace_labels(user_name, repo_name, issue_id, *args)
@@ -178,13 +186,17 @@ module Github
178
186
  # @github = Github.new
179
187
  # @github.issues.get_label 'user-name', 'repo-name', 'milestone-id'
180
188
  #
181
- def get_label(user_name, repo_name, milestone_id, params={})
189
+ def milestone_labels(user_name, repo_name, milestone_id, params={})
182
190
  _update_user_repo_params(user_name, repo_name)
183
191
  _validate_user_repo_params(user, repo) unless user? && repo?
184
- _validate_presence_of(issue_id)
192
+ _validate_presence_of milestone_id
185
193
 
186
- get("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels", params)
194
+ response = get("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels", params)
195
+ return response unless block_given?
196
+ response.each { |el| yield el }
187
197
  end
198
+ alias :milestone_issues_labels :milestone_labels
199
+ alias :list_milestone_labels :milestone_labels
188
200
 
189
201
  end # Labels
190
202
  end # Issues
@@ -58,7 +58,7 @@ module Github
58
58
  private
59
59
 
60
60
  def _process_params(params) # :nodoc:
61
- return params['data'] if params.has_key?('data')
61
+ return params['data'] if params.has_key?('data') && !params['data'].nil?
62
62
  return params
63
63
  end
64
64
 
@@ -4,7 +4,7 @@ module Github
4
4
  module VERSION
5
5
  MAJOR = 0
6
6
  MINOR = 3
7
- PATCH = 6
7
+ PATCH = 7
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
@@ -0,0 +1,5 @@
1
+ {
2
+ "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug",
3
+ "name": "bug",
4
+ "color": "f29513"
5
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug",
4
+ "name": "bug",
5
+ "color": "f29513"
6
+ }
7
+ ]
@@ -1,5 +1,535 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Github::Issues::Labels do
4
- pending
5
- end
4
+ include SpecHelpers::Base
5
+
6
+ it { described_class::VALID_LABEL_INPUTS.should_not be_nil }
7
+
8
+ describe 'labels' do
9
+ it { github.issues.should respond_to :labels }
10
+ it { github.issues.should respond_to :list_labels }
11
+
12
+ context "resource found" do
13
+ before do
14
+ stub_get("/repos/#{user}/#{repo}/labels").
15
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
16
+ end
17
+
18
+ it "should fail to get resource without username" do
19
+ github.user, github.repo = nil, nil
20
+ expect { github.issues.labels nil, repo }.to raise_error(ArgumentError)
21
+ end
22
+
23
+ it "should get the resources" do
24
+ github.issues.labels user, repo
25
+ a_get("/repos/#{user}/#{repo}/labels").should have_been_made
26
+ end
27
+
28
+ it "should return array of resources" do
29
+ labels = github.issues.labels user, repo
30
+ labels.should be_an Array
31
+ labels.should have(1).items
32
+ end
33
+
34
+ it "should be a mash type" do
35
+ labels = github.issues.labels user, repo
36
+ labels.first.should be_a Hashie::Mash
37
+ end
38
+
39
+ it "should get issue information" do
40
+ labels = github.issues.labels user, repo
41
+ labels.first.name.should == 'bug'
42
+ end
43
+
44
+ it "should yield to a block" do
45
+ github.issues.should_receive(:labels).with(user, repo).and_yield('web')
46
+ github.issues.labels(user, repo) { |param| 'web' }.should == 'web'
47
+ end
48
+ end
49
+
50
+ context "resource not found" do
51
+ before do
52
+ stub_get("/repos/#{user}/#{repo}/labels").
53
+ to_return(:body => "", :status => [404, "Not Found"])
54
+ end
55
+
56
+ it "should return 404 with a message 'Not Found'" do
57
+ expect {
58
+ github.issues.labels user, repo
59
+ }.to raise_error(Github::ResourceNotFound)
60
+ end
61
+ end
62
+ end # labels
63
+
64
+ describe "label" do
65
+ let(:label_id) { 1 }
66
+
67
+ it { github.issues.should respond_to :label }
68
+ it { github.issues.should respond_to :get_label }
69
+
70
+ context "resource found" do
71
+ before do
72
+ stub_get("/repos/#{user}/#{repo}/labels/#{label_id}").
73
+ to_return(:body => fixture('issues/label.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
74
+ end
75
+
76
+ it "should fail to get resource without label id" do
77
+ expect { github.issues.label(user, repo, nil)}.to raise_error(ArgumentError)
78
+ end
79
+
80
+ it "should get the resource" do
81
+ github.issues.label user, repo, label_id
82
+ a_get("/repos/#{user}/#{repo}/labels/#{label_id}").should have_been_made
83
+ end
84
+
85
+ it "should get label information" do
86
+ label = github.issues.label user, repo, label_id
87
+ label.name.should == 'bug'
88
+ end
89
+
90
+ it "should return mash" do
91
+ label = github.issues.label user, repo, label_id
92
+ label.should be_a Hashie::Mash
93
+ end
94
+ end
95
+
96
+ context "resource not found" do
97
+ before do
98
+ stub_get("/repos/#{user}/#{repo}/labels/#{label_id}").
99
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
100
+ end
101
+
102
+ it "should fail to retrive resource" do
103
+ expect {
104
+ github.issues.label user, repo, label_id
105
+ }.to raise_error(Github::ResourceNotFound)
106
+ end
107
+ end
108
+ end # label
109
+
110
+ describe "create_label" do
111
+ let(:inputs) {
112
+ {
113
+ "name" => "API",
114
+ "color" => "FFFFFF",
115
+ }
116
+ }
117
+
118
+ context "resouce created" do
119
+ before do
120
+ stub_post("/repos/#{user}/#{repo}/labels").with(inputs).
121
+ to_return(:body => fixture('issues/label.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
122
+ end
123
+
124
+ it "should fail to create resource if 'name' input is missing" do
125
+ expect {
126
+ github.issues.create_label user, repo, inputs.except('name')
127
+ }.to raise_error(ArgumentError)
128
+ end
129
+
130
+ it "should fail to create resource if 'color' input is missing" do
131
+ expect {
132
+ github.issues.create_label user, repo, inputs.except('color')
133
+ }.to raise_error(ArgumentError)
134
+ end
135
+
136
+ it "should create resource successfully" do
137
+ github.issues.create_label user, repo, inputs
138
+ a_post("/repos/#{user}/#{repo}/labels").with(inputs).should have_been_made
139
+ end
140
+
141
+ it "should return the resource" do
142
+ label = github.issues.create_label user, repo, inputs
143
+ label.should be_a Hashie::Mash
144
+ end
145
+
146
+ it "should get the label information" do
147
+ label = github.issues.create_label user, repo, inputs
148
+ label.name.should == 'bug'
149
+ end
150
+ end
151
+
152
+ context "failed to create resource" do
153
+ before do
154
+ stub_post("/repos/#{user}/#{repo}/labels").with(inputs).
155
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
156
+
157
+ end
158
+
159
+ it "should faile to retrieve resource" do
160
+ expect {
161
+ github.issues.create_label user, repo, inputs
162
+ }.to raise_error(Github::ResourceNotFound)
163
+ end
164
+ end
165
+ end # create_label
166
+
167
+ describe "update_label" do
168
+ let(:label_id) { 1 }
169
+ let(:inputs) {
170
+ {
171
+ "name" => "API",
172
+ "color" => "FFFFFF",
173
+ }
174
+ }
175
+
176
+ context "resouce updated" do
177
+ before do
178
+ stub_patch("/repos/#{user}/#{repo}/labels/#{label_id}").with(inputs).
179
+ to_return(:body => fixture('issues/label.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
180
+ end
181
+
182
+ it "should fail to create resource if 'name' input is missing" do
183
+ expect {
184
+ github.issues.update_label user, repo, label_id, inputs.except('name')
185
+ }.to raise_error(ArgumentError)
186
+ end
187
+
188
+ it "should fail to create resource if 'color' input is missing" do
189
+ expect {
190
+ github.issues.update_label user, repo, label_id, inputs.except('color')
191
+ }.to raise_error(ArgumentError)
192
+ end
193
+
194
+ it "should update resource successfully" do
195
+ github.issues.update_label user, repo, label_id, inputs
196
+ a_patch("/repos/#{user}/#{repo}/labels/#{label_id}").with(inputs).should have_been_made
197
+ end
198
+
199
+ it "should return the resource" do
200
+ label = github.issues.update_label user, repo, label_id, inputs
201
+ label.should be_a Hashie::Mash
202
+ end
203
+
204
+ it "should get the label information" do
205
+ label = github.issues.update_label user, repo, label_id, inputs
206
+ label.name.should == 'bug'
207
+ end
208
+ end
209
+
210
+ context "failed to create resource" do
211
+ before do
212
+ stub_patch("/repos/#{user}/#{repo}/labels/#{label_id}").with(inputs).
213
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
214
+
215
+ end
216
+
217
+ it "should faile to retrieve resource" do
218
+ expect {
219
+ github.issues.update_label user, repo, label_id, inputs
220
+ }.to raise_error(Github::ResourceNotFound)
221
+ end
222
+ end
223
+ end # update_label
224
+
225
+ describe "delete_label" do
226
+ let(:label_id) { 1 }
227
+
228
+ context "resouce removed" do
229
+ before do
230
+ stub_delete("/repos/#{user}/#{repo}/labels/#{label_id}").
231
+ to_return(:body => fixture('issues/label.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
232
+ end
233
+
234
+ it "should remove resource successfully" do
235
+ github.issues.delete_label user, repo, label_id
236
+ a_delete("/repos/#{user}/#{repo}/labels/#{label_id}").should have_been_made
237
+ end
238
+
239
+ it "should return the resource" do
240
+ label = github.issues.delete_label user, repo, label_id
241
+ label.should be_a Hashie::Mash
242
+ end
243
+
244
+ it "should get the label information" do
245
+ label = github.issues.delete_label user, repo, label_id
246
+ label.name.should == 'bug'
247
+ end
248
+ end
249
+
250
+ context "failed to remove resource" do
251
+ before do
252
+ stub_delete("/repos/#{user}/#{repo}/labels/#{label_id}").
253
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
254
+ end
255
+
256
+ it "should faile to retrieve resource" do
257
+ expect {
258
+ github.issues.delete_label user, repo, label_id
259
+ }.to raise_error(Github::ResourceNotFound)
260
+ end
261
+ end
262
+ end # delete_label
263
+
264
+ describe 'labels_for' do
265
+ let(:issue_id) { 1 }
266
+
267
+ it { github.issues.should respond_to :labels_for }
268
+ it { github.issues.should respond_to :issue_labels }
269
+
270
+ context "resource found" do
271
+ before do
272
+ stub_get("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
273
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
274
+ end
275
+
276
+ it "should fail to get resource without issue_id" do
277
+ expect {
278
+ github.issues.labels_for user, repo, nil
279
+ }.to raise_error(ArgumentError)
280
+ end
281
+
282
+ it "should get the resources" do
283
+ github.issues.labels_for user, repo, issue_id
284
+ a_get("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").should have_been_made
285
+ end
286
+
287
+ it "should return array of resources" do
288
+ labels = github.issues.labels_for user, repo, issue_id
289
+ labels.should be_an Array
290
+ labels.should have(1).items
291
+ end
292
+
293
+ it "should be a mash type" do
294
+ labels = github.issues.labels_for user, repo, issue_id
295
+ labels.first.should be_a Hashie::Mash
296
+ end
297
+
298
+ it "should get issue information" do
299
+ labels = github.issues.labels_for user, repo, issue_id
300
+ labels.first.name.should == 'bug'
301
+ end
302
+
303
+ it "should yield to a block" do
304
+ github.issues.should_receive(:labels_for).with(user, repo, issue_id).and_yield('web')
305
+ github.issues.labels_for(user, repo, issue_id) { |param| 'web' }.should == 'web'
306
+ end
307
+ end
308
+
309
+ context "resource not found" do
310
+ before do
311
+ stub_get("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
312
+ to_return(:body => "", :status => [404, "Not Found"])
313
+ end
314
+
315
+ it "should return 404 with a message 'Not Found'" do
316
+ expect {
317
+ github.issues.labels_for user, repo, issue_id
318
+ }.to raise_error(Github::ResourceNotFound)
319
+ end
320
+ end
321
+ end # labels_for
322
+
323
+ describe "add_labels" do
324
+ let(:issue_id) { 1 }
325
+ let(:labels) { "Label 1" }
326
+
327
+ context "labels added" do
328
+ before do
329
+ stub_post("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
330
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
331
+ end
332
+
333
+ it "should fail to add labels if issue-id is missing" do
334
+ expect {
335
+ github.issues.add_labels user, repo, nil, labels
336
+ }.to raise_error(ArgumentError)
337
+ end
338
+
339
+ it "should create resource successfully" do
340
+ github.issues.add_labels user, repo, issue_id, labels
341
+ a_post("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").should have_been_made
342
+ end
343
+
344
+ it "should return the resource" do
345
+ labels = github.issues.add_labels user, repo, issue_id, labels
346
+ labels.first.should be_a Hashie::Mash
347
+ end
348
+
349
+ it "should get the label information" do
350
+ labels = github.issues.add_labels user, repo, issue_id, labels
351
+ labels.first.name.should == 'bug'
352
+ end
353
+ end
354
+
355
+ context "failed to add labels" do
356
+ before do
357
+ stub_post("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
358
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
359
+
360
+ end
361
+
362
+ it "should fail to retrieve resource" do
363
+ expect {
364
+ github.issues.add_labels user, repo, issue_id, labels
365
+ }.to raise_error(Github::ResourceNotFound)
366
+ end
367
+ end
368
+ end # add_labels
369
+
370
+ describe "remove_label" do
371
+ let(:issue_id) { 1 }
372
+ let(:label_id) { 1 }
373
+
374
+ context "remove a label from an issue" do
375
+ before do
376
+ stub_delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels/#{label_id}").
377
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
378
+ end
379
+
380
+ it "should throw exception if issue-id not present" do
381
+ expect {
382
+ github.issues.remove_label user, repo, nil
383
+ }.to raise_error(ArgumentError)
384
+ end
385
+
386
+ it "should remove label successfully" do
387
+ github.issues.remove_label user, repo, issue_id, label_id
388
+ a_delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels/#{label_id}").should have_been_made
389
+ end
390
+
391
+ it "should return the resource" do
392
+ labels = github.issues.remove_label user, repo, issue_id, label_id
393
+ labels.first.should be_a Hashie::Mash
394
+ end
395
+
396
+ it "should get the label information" do
397
+ labels = github.issues.remove_label user, repo, issue_id, label_id
398
+ labels.first.name.should == 'bug'
399
+ end
400
+ end
401
+
402
+ context "remove all labels from an issue" do
403
+ before do
404
+ stub_delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
405
+ to_return(:body => "", :status => 204, :headers => {:content_type => "application/json; charset=utf-8"})
406
+ end
407
+
408
+ it "should remove labels successfully" do
409
+ github.issues.remove_label user, repo, issue_id
410
+ a_delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").should have_been_made
411
+ end
412
+ end
413
+
414
+ context "failed to remove label from an issue" do
415
+ before do
416
+ stub_delete("/repos/#{user}/#{repo}/issues/#{issue_id}/labels/#{label_id}").
417
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
418
+ end
419
+
420
+ it "should faile to retrieve resource" do
421
+ expect {
422
+ github.issues.remove_label user, repo, issue_id, label_id
423
+ }.to raise_error(Github::ResourceNotFound)
424
+ end
425
+ end
426
+ end # remove_label
427
+
428
+ describe "replace_labels" do
429
+ let(:issue_id) { 1 }
430
+ let(:labels) { "Label 1" }
431
+
432
+ context "labels added" do
433
+ before do
434
+ stub_put("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
435
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
436
+ end
437
+
438
+ it "should fail to add labels if issue-id is missing" do
439
+ expect {
440
+ github.issues.replace_labels user, repo, nil, labels
441
+ }.to raise_error(ArgumentError)
442
+ end
443
+
444
+ it "should create resource successfully" do
445
+ github.issues.replace_labels user, repo, issue_id, labels
446
+ a_put("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").should have_been_made
447
+ end
448
+
449
+ it "should return the resource" do
450
+ labels = github.issues.replace_labels user, repo, issue_id, labels
451
+ labels.first.should be_a Hashie::Mash
452
+ end
453
+
454
+ it "should get the label information" do
455
+ labels = github.issues.replace_labels user, repo, issue_id, labels
456
+ labels.first.name.should == 'bug'
457
+ end
458
+ end
459
+
460
+ context "failed to add labels" do
461
+ before do
462
+ stub_put("/repos/#{user}/#{repo}/issues/#{issue_id}/labels").
463
+ to_return(:body => fixture('issues/label.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
464
+
465
+ end
466
+
467
+ it "should fail to retrieve resource" do
468
+ expect {
469
+ github.issues.replace_labels user, repo, issue_id, labels
470
+ }.to raise_error(Github::ResourceNotFound)
471
+ end
472
+ end
473
+ end # add_labels
474
+
475
+ describe 'milestone_labels' do
476
+ let(:milestone_id) { 1 }
477
+
478
+ it { github.issues.should respond_to :milestone_labels }
479
+ it { github.issues.should respond_to :milestone_issues_labels }
480
+ it { github.issues.should respond_to :list_milestone_labels }
481
+
482
+ context "resource found" do
483
+ before do
484
+ stub_get("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels").
485
+ to_return(:body => fixture('issues/labels.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
486
+ end
487
+
488
+ it "should throw exception if milestone-id not present" do
489
+ expect {
490
+ github.issues.remove_label user, repo, nil
491
+ }.to raise_error(ArgumentError)
492
+ end
493
+
494
+ it "should get the resources" do
495
+ github.issues.milestone_labels user, repo, milestone_id
496
+ a_get("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels").should have_been_made
497
+ end
498
+
499
+ it "should return array of resources" do
500
+ labels = github.issues.milestone_labels user, repo, milestone_id
501
+ labels.should be_an Array
502
+ labels.should have(1).items
503
+ end
504
+
505
+ it "should be a mash type" do
506
+ labels = github.issues.milestone_labels user, repo, milestone_id
507
+ labels.first.should be_a Hashie::Mash
508
+ end
509
+
510
+ it "should get issue information" do
511
+ labels = github.issues.milestone_labels user, repo, milestone_id
512
+ labels.first.name.should == 'bug'
513
+ end
514
+
515
+ it "should yield to a block" do
516
+ github.issues.should_receive(:milestone_labels).with(user, repo, milestone_id).and_yield('web')
517
+ github.issues.milestone_labels(user, repo, milestone_id) { |param| 'web' }.should == 'web'
518
+ end
519
+ end
520
+
521
+ context "resource not found" do
522
+ before do
523
+ stub_get("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels").
524
+ to_return(:body => "", :status => [404, "Not Found"])
525
+ end
526
+
527
+ it "should return 404 with a message 'Not Found'" do
528
+ expect {
529
+ github.issues.milestone_labels user, repo, milestone_id
530
+ }.to raise_error(Github::ResourceNotFound)
531
+ end
532
+ end
533
+ end # milestone_labels
534
+
535
+ end # Github::Issues::Labels
@@ -0,0 +1,40 @@
1
+ shared_examples_for "collection of resources" do
2
+
3
+ context "resource found" do
4
+ before do
5
+ stub_get(resource_path).
6
+ to_return(:body => fixture(fixture_dir), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
7
+ end
8
+
9
+ it "should fail to get resource without username" do
10
+ github.user, github.repo = nil, nil
11
+ expect { github.issues.milestones nil, repo }.to raise_error(ArgumentError)
12
+ end
13
+
14
+ it "should get the resources" do
15
+ github.send *method_chain, user, repo
16
+ a_get(resource_path).should have_been_made
17
+ end
18
+
19
+ it "should return array of resources" do
20
+ milestones = github.issues.milestones user, repo
21
+ milestones.should be_an Array
22
+ milestones.should have(1).items
23
+ end
24
+
25
+ it "should be a mash type" do
26
+ milestones = github.issues.milestones user, repo
27
+ milestones.first.should be_a Hashie::Mash
28
+ end
29
+
30
+ it "should get issue information" do
31
+ milestones = github.issues.milestones user, repo
32
+ milestones.first.title.should == 'v1.0'
33
+ end
34
+
35
+ it "should yield to a block" do
36
+ github.issues.should_receive(:milestones).with(user, repo).and_yield('web')
37
+ github.issues.milestones(user, repo) { |param| 'web' }.should == 'web'
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: github_api
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.6
5
+ version: 0.3.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Piotr Murach
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-12-26 00:00:00 +00:00
13
+ date: 2012-01-01 00:00:00 +00:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -171,6 +171,7 @@ files:
171
171
  - features/pagination.feature
172
172
  - features/step_definitions/github_api_steps.rb
173
173
  - features/support/env.rb
174
+ - features/support/vcr.rb
174
175
  - lib/github_api/api/utils.rb
175
176
  - lib/github_api/api.rb
176
177
  - lib/github_api/authorization.rb
@@ -238,6 +239,8 @@ files:
238
239
  - spec/fixtures/issues/events.json
239
240
  - spec/fixtures/issues/issue.json
240
241
  - spec/fixtures/issues/issues.json
242
+ - spec/fixtures/issues/label.json
243
+ - spec/fixtures/issues/labels.json
241
244
  - spec/fixtures/issues/milestone.json
242
245
  - spec/fixtures/issues/milestones.json
243
246
  - spec/fixtures/orgs/members.json
@@ -309,6 +312,7 @@ files:
309
312
  - spec/README.rdoc
310
313
  - spec/spec_helper.rb
311
314
  - spec/support/base.rb
315
+ - spec/support/github_api_shared_examples.rb
312
316
  - README.rdoc
313
317
  - LICENSE.txt
314
318
  has_rdoc: true