beeper 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/beeper/client.rb CHANGED
@@ -3,28 +3,30 @@ require 'faraday_middleware'
3
3
 
4
4
  module Beeper
5
5
  class Client
6
+ COLLECTIONS = [:incidents, :services, :maintenance_windows].freeze
7
+
6
8
  attr_accessor :api_key, :subdomain, :requester_id
7
9
 
8
10
  def configured?
9
11
  !@api_key.nil? && !@subdomain.nil?
10
12
  end
11
13
 
12
- def incidents
13
- get(:incidents)
14
- end
15
-
16
- def services
17
- get(:services)
18
- end
19
-
20
- def maintenance_windows(options={})
21
- get(:maintenance_windows, options)
14
+ COLLECTIONS.each do |collection|
15
+ class_eval <<-RB
16
+ def #{collection}(options={})
17
+ get(:#{collection}, options)
18
+ end
19
+ RB
22
20
  end
23
21
 
24
22
  def create_maintenance_window(maintenance_window)
25
23
  post(:maintenance_windows, maintenance_window)
26
24
  end
27
25
 
26
+ def delete_maintenance_window(id)
27
+ delete(:maintenance_windows, { :id => id })
28
+ end
29
+
28
30
  private
29
31
 
30
32
  def get(collection, options={})
@@ -33,10 +35,17 @@ module Beeper
33
35
  end
34
36
 
35
37
  def post(collection, options={})
36
- options = authenticated_post_options.merge(collection.to_s[0..-2].to_sym => options)
38
+ single_collection = collection.to_s[0..-2]
39
+ options = authenticated_post_options.merge(single_collection.to_sym => options)
37
40
 
38
41
  results = connection.post(collection.to_s, options)
39
- results.body
42
+ results.body.send(single_collection.to_sym)
43
+ end
44
+
45
+ def delete(collection, options={})
46
+ id = options.delete(:id)
47
+ results = connection.delete("#{collection}/#{id}", options)
48
+ results.success?
40
49
  end
41
50
 
42
51
  def authenticated_post_options
@@ -1,3 +1,3 @@
1
1
  module Beeper
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
3
  describe Beeper::Client do
4
- use_vcr_cassette
4
+ use_vcr_cassette :record => :new_episodes
5
5
 
6
6
  let(:client) do
7
7
  Beeper.configure do |c|
@@ -40,47 +40,61 @@ describe Beeper::Client do
40
40
  :service_ids => ["POM55DP"]
41
41
  ).should == new_maintenance_window
42
42
  end
43
+
44
+ it "should be able to delete" do
45
+ client = Beeper.configure do |c|
46
+ c.api_key = Beeper::Test::API_KEY
47
+ c.subdomain = "outright"
48
+ c.requester_id = Beeper::Test::REQUESTER_ID
49
+ end
50
+
51
+ window = client.create_maintenance_window(
52
+ :start_time => Time.now,
53
+ :end_time => Time.now + 3600,
54
+ :service_ids => ["POM55DP"]
55
+ )
56
+
57
+ client.delete_maintenance_window(window.id).should == true
58
+ end
43
59
  end
44
60
  end
45
61
 
46
62
  def new_maintenance_window
47
63
  {
48
- "maintenance_window" => {
49
- "id"=>"P89LAYQ",
50
- "sequence_number"=>1,
51
- "start_time"=>"2012-12-18T14:34:16-08:00",
52
- "end_time"=>"2012-12-18T15:34:15-08:00",
53
- "description"=>nil,
54
- "created_by"=>{
55
- "id"=>"#{Beeper::Test::REQUESTER_ID}",
56
- "name"=>"Bob Smith",
57
- "email"=>"bob@example.com",
58
- "time_zone"=>"Pacific Time (US & Canada)",
59
- "color"=>"green",
60
- "role"=>"admin",
61
- "avatar_url"=>"https://secure.gravatar.com/avatar/71c3bbda60a46a241bf9a2d68e41cbec.png?d=mm&r=PG",
62
- "user_url"=>"/users/#{Beeper::Test::REQUESTER_ID}",
63
- "invitation_sent"=>false,
64
- "marketing_opt_out"=>false
65
- },
66
- "services"=>[
67
- {
68
- "id"=>"POM55DP",
69
- "name"=>"Application",
70
- "service_url"=>"/services/POM55DP",
71
- "service_key"=>"application@outright.pagerduty.com",
72
- "auto_resolve_timeout"=>14400,
73
- "acknowledgement_timeout"=>600,
74
- "created_at"=>"2012-12-01T13:59:54-08:00",
75
- "status"=>"maintenance",
76
- "last_incident_timestamp"=>nil,
77
- "email_incident_creation"=>"on_new_email_subject",
78
- "incident_counts"=>{"triggered"=>0, "acknowledged"=>0, "resolved"=>0, "total"=>0},
79
- "email_filter_mode"=>"all-email",
80
- "type"=>"pingdom"
81
- }
82
- ]
83
- }
64
+ "id"=>"PO7EV8B",
65
+ "sequence_number"=>2,
66
+ "start_time"=>"2012-12-18T15:53:55-08:00",
67
+ "end_time"=>"2012-12-18T16:53:54-08:00",
68
+ "description"=>nil,
69
+ "created_by"=>{
70
+ "id"=>"#{Beeper::Test::REQUESTER_ID}",
71
+ "name"=>"Bob Smith",
72
+ "email"=>"bob@example.com",
73
+ "time_zone"=>"Pacific Time (US & Canada)",
74
+ "color"=>"green",
75
+ "role"=>"admin",
76
+ "avatar_url"=>"https://secure.gravatar.com/avatar/71c3bbda60a46a241bf9a2d68e41cbec.png?d=mm&r=PG",
77
+ "user_url"=>"/users/#{Beeper::Test::REQUESTER_ID}",
78
+ "invitation_sent"=>false,
79
+ "marketing_opt_out"=>false
80
+ },
81
+ "services"=>[
82
+ {
83
+ "id"=>"POM55DP",
84
+ "name"=>"Application",
85
+ "service_url"=>"/services/POM55DP",
86
+ "service_key"=>"application@outright.pagerduty.com",
87
+ "auto_resolve_timeout"=>14400,
88
+ "acknowledgement_timeout"=>600,
89
+ "created_at"=>"2012-12-01T13:59:54-08:00",
90
+ "status"=>"maintenance",
91
+ "last_incident_timestamp"=>nil,
92
+ "email_incident_creation"=>"on_new_email_subject",
93
+ "incident_counts"=>{"triggered"=>0, "acknowledged"=>0, "resolved"=>0, "total"=>0},
94
+ "email_filter_mode"=>"all-email",
95
+ "type"=>"pingdom"
96
+ }
97
+ ]
84
98
  }
85
99
  end
86
100
 
@@ -200,7 +200,7 @@ http_interactions:
200
200
  body:
201
201
  encoding: UTF-8
202
202
  string: ! '{"requester_id":"REQUESTER_ID","maintenance_window":{"start_time":"2012-12-18
203
- 14:34:15 -0800","end_time":"2012-12-18 15:34:15 -0800","service_ids":["POM55DP"]}}'
203
+ 15:53:54 -0800","end_time":"2012-12-18 16:53:54 -0800","service_ids":["POM55DP"]}}'
204
204
  headers:
205
205
  Authorization:
206
206
  - Token token="API_KEY"
@@ -214,7 +214,7 @@ http_interactions:
214
214
  server:
215
215
  - nginx/1.0.14
216
216
  date:
217
- - Tue, 18 Dec 2012 22:34:16 GMT
217
+ - Tue, 18 Dec 2012 23:53:55 GMT
218
218
  content-type:
219
219
  - application/json; charset=utf-8
220
220
  transfer-encoding:
@@ -226,24 +226,65 @@ http_interactions:
226
226
  x-ua-compatible:
227
227
  - IE=Edge,chrome=1
228
228
  etag:
229
- - ! '"e4ddc778f459f50c19db8ae8b5369253"'
229
+ - ! '"85f0ed1364f971210f88f800c05731b5"'
230
230
  cache-control:
231
231
  - max-age=0, private, must-revalidate
232
232
  set-cookie:
233
- - _pagerduty_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTU5NmNmNzRjMDZjOWY2YjdhOTEzYWIxMmQxNWU2NjZkBjsAVEkiHHdhcmRlbi51c2VyLmFwaV9rZXkua2V5BjsAVFsISSILQXBpS2V5BjsARlsGaQKUATA%3D--d6cb585a9c5d9b16cfbac15ab9543cd056a0060e;
234
- path=/; HttpOnly, uid=CvgRmlDQ72jBtCi9WZLHAg==; expires=Thu, 31-Dec-37 23:55:55
233
+ - _pagerduty_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTgwNGMxMzA5YTg5NzRhZTFlMTNjY2ViMzQ4YmFkZDhjBjsAVEkiHHdhcmRlbi51c2VyLmFwaV9rZXkua2V5BjsAVFsISSILQXBpS2V5BjsARlsGaQKUATA%3D--bfb27f246317ea47199d087d8cd2d7435fb3a2e6;
234
+ path=/; HttpOnly, uid=CvgRmlDRAhPBtCi9Wd+bAg==; expires=Thu, 31-Dec-37 23:55:55
235
235
  GMT; domain=pagerduty.com; path=/
236
236
  x-request-id:
237
- - e6c239f2048e99d5a2b12315cceccc34
237
+ - a05701e5a910ce5848a5b45a9b5943eb
238
238
  x-runtime:
239
- - '0.331142'
239
+ - '0.204289'
240
240
  x-rack-cache:
241
241
  - invalidate, pass
242
242
  body:
243
243
  encoding: US-ASCII
244
- string: ! '{"maintenance_window":{"id":"P89LAYQ","sequence_number":1,"start_time":"2012-12-18T14:34:16-08:00","end_time":"2012-12-18T15:34:15-08:00","description":null,"created_by":{"id":"REQUESTER_ID","name":"Bob
244
+ string: ! '{"maintenance_window":{"id":"PO7EV8B","sequence_number":2,"start_time":"2012-12-18T15:53:55-08:00","end_time":"2012-12-18T16:53:54-08:00","description":null,"created_by":{"id":"REQUESTER_ID","name":"Bob
245
245
  Smith","email":"bob@example.com","time_zone":"Pacific Time (US & Canada)","color":"green","role":"admin","avatar_url":"https://secure.gravatar.com/avatar/71c3bbda60a46a241bf9a2d68e41cbec.png?d=mm&r=PG","user_url":"/users/REQUESTER_ID","invitation_sent":false,"marketing_opt_out":false},"services":[{"id":"POM55DP","name":"Application",
246
246
  "service_url":"/services/POM55DP","service_key":"application@outright.pagerduty.com","auto_resolve_timeout":14400,"acknowledgement_timeout":600,"created_at":"2012-12-01T13:59:54-08:00","status":"maintenance","last_incident_timestamp":null,"email_incident_creation":"on_new_email_subject","incident_counts":{"triggered":0,"acknowledged":0,"resolved":0,"total":0},"email_filter_mode":"all-email","type":"pingdom"}]}}'
247
247
  http_version:
248
- recorded_at: Tue, 18 Dec 2012 22:34:16 GMT
248
+ recorded_at: Tue, 18 Dec 2012 23:53:55 GMT
249
+ - request:
250
+ method: delete
251
+ uri: https://outright.pagerduty.com/api/v1/maintenance_windows/PO7EV8B
252
+ body:
253
+ encoding: US-ASCII
254
+ string: ''
255
+ headers:
256
+ Authorization:
257
+ - Token token="API_KEY"
258
+ response:
259
+ status:
260
+ code: 204
261
+ message:
262
+ headers:
263
+ server:
264
+ - nginx/1.0.14
265
+ date:
266
+ - Tue, 18 Dec 2012 23:53:55 GMT
267
+ connection:
268
+ - keep-alive
269
+ status:
270
+ - 204 No Content
271
+ x-ua-compatible:
272
+ - IE=Edge,chrome=1
273
+ cache-control:
274
+ - no-cache
275
+ set-cookie:
276
+ - _pagerduty_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTdhYjU0ZjAxODlhOWQ1NmU0NDQ3MGMwMzJlNDc5YWU5BjsAVEkiHHdhcmRlbi51c2VyLmFwaV9rZXkua2V5BjsAVFsISSILQXBpS2V5BjsARlsGaQKUATA%3D--8a7a1fbad07f05003f61ec0a930004dbedda4203;
277
+ path=/; HttpOnly, uid=CvgRmlDRAhPBtCi9Wd+iAg==; expires=Thu, 31-Dec-37 23:55:55
278
+ GMT; domain=pagerduty.com; path=/
279
+ x-request-id:
280
+ - dd3377e85640482f418d70dca8b3aed4
281
+ x-runtime:
282
+ - '0.140999'
283
+ x-rack-cache:
284
+ - invalidate, pass
285
+ body:
286
+ encoding: US-ASCII
287
+ string: ''
288
+ http_version:
289
+ recorded_at: Tue, 18 Dec 2012 23:53:55 GMT
249
290
  recorded_with: VCR 2.3.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
12
+ date: 2012-12-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -191,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
191
  version: '0'
192
192
  segments:
193
193
  - 0
194
- hash: -2184976759273684924
194
+ hash: -2152703981749921555
195
195
  required_rubygems_version: !ruby/object:Gem::Requirement
196
196
  none: false
197
197
  requirements:
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  version: '0'
201
201
  segments:
202
202
  - 0
203
- hash: -2184976759273684924
203
+ hash: -2152703981749921555
204
204
  requirements: []
205
205
  rubyforge_project:
206
206
  rubygems_version: 1.8.24