beeper 0.0.1 → 0.0.2

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/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