flapjack-diner 1.0.0.rc1 → 1.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3ddc9c0739401a0d4921a4ea116fa31f2da5076
4
- data.tar.gz: 81598f05516e999be2dbb4b0617e04e72f6d77f2
3
+ metadata.gz: 39c4b55ae7da90b7fb53ee8cf79933c4498aa587
4
+ data.tar.gz: 8d2e64a0e3d18884c4d88f871400ff5b1dcca9f3
5
5
  SHA512:
6
- metadata.gz: 6ff59adc22d994f71fb78b1b7e4632d5699801f9c65456de550b82bcf6e30066de614a122ac9c6847435a06017b3c85001419ae9d1ddbc2cbbcae9f8aad13538
7
- data.tar.gz: 1edc4fe8320350c7ec36b82d5abb6d3686e85c23a2454c54943e5fd823fb219b689513d5bb792f4e3504fd90b2372bd1ab4f868c0cc4d8c77a1c1a14d094883f
6
+ metadata.gz: 904a7a6940342b64c01e61de9bbdc5798ab1931012ee0c5cc381c8382461850964312e0c13d951cd3ce2a6c8720d6a57657b0824521f64f8534f94bace1324bc
7
+ data.tar.gz: a6280e173fc280e609e8444480dcac2a2bbd772f3afdc30aa9577b0151b87390f8a0050a62dd589553ea57b05f5dd47c0813a15a59dee2df5019283d59bc2ffa
data/README.md CHANGED
@@ -2,21 +2,26 @@
2
2
 
3
3
  [![Travis CI Status][id_travis_img]][id_travis_link]
4
4
 
5
- [id_travis_link]: https://secure.travis-ci.org/#!/flpjck/flapjack-diner
6
- [id_travis_img]: https://secure.travis-ci.org/flpjck/flapjack-diner.png
5
+ [id_travis_link]: https://travis-ci.org/flapjack/flapjack-diner
6
+ [id_travis_img]: https://travis-ci.org/flapjack/flapjack-diner.png
7
+
8
+ Access the JSON API of a [Flapjack](http://flapjack.io/) system monitoring server.
9
+
10
+ Note that flapjack-diner [releases](https://github.com/flapjack/flapjack-diner/releases) after [1.0.0.rc1](https://github.com/flapjack/flapjack-diner/releases/tag/v1.0.0.rc1) require the [JSONAPI](http://flapjack.io/docs/jsonapi) gateway of Flapjack to connect to. All previous releases (0.x) require the older [API](http://flapjack.io/docs/0.9/API) Flapjack gateway.
7
11
 
8
- Access the API of a [Flapjack](http://flapjack-project.com/) system monitoring server.
9
12
 
10
13
  ## Installation
11
14
 
12
15
  Add this line to your application's Gemfile:
13
16
 
14
- gem 'flapjack-diner', :git => 'git://github.com/flpjck/flapjack-diner.git'
17
+ gem 'flapjack-diner', :github => 'flapjack/flapjack-diner'
15
18
 
16
19
  And then execute:
17
20
 
18
21
  $ bundle
19
22
 
23
+ Note, you can also install from [RubyGems.org](https://rubygems.org/gems/flapjack-diner) as usual.
24
+
20
25
  ## Usage
21
26
 
22
27
  Set the URI of the Flapjack server:
@@ -31,6 +36,12 @@ Optionally, set a logger to log requests & responses:
31
36
  Flapjack::Diner.logger = Logger.new('logs/flapjack_diner.log')
32
37
  ```
33
38
 
39
+ If you want the old behaviour wrt returning hashes with keys as strings (they're now symbols by default) then:
40
+
41
+ ```ruby
42
+ Flapjack::Diner.return_keys_as_strings = true
43
+ ```
44
+
34
45
  ## Functions
35
46
 
36
47
  Parameters for all of **flapjack-diner**'s functions are organised into three categories:
@@ -87,6 +98,8 @@ If any operation fails, `Flapjack::Diner.last_error` will contain an error messa
87
98
 
88
99
  ### Checks
89
100
 
101
+ * [checks](#checks)
102
+
90
103
  * [create_scheduled_maintenances_checks](#create_scheduled_maintenances_checks)
91
104
  * [delete_scheduled_maintenances_checks](#delete_scheduled_maintenances_checks)
92
105
 
@@ -539,6 +552,19 @@ Returns true if creation succeeded or false if creation failed.
539
552
 
540
553
  ---
541
554
 
555
+ <a name="checks">&nbsp;</a>
556
+ ### checks
557
+
558
+ Return basic identity data for one, some or all checks. (Check ids are composed by joining together the check's entity's name, the character ':' and the check's name.)
559
+
560
+ ```ruby
561
+ check = Flapjack::Diner.check(ID)
562
+ some_checks = Flapjack::Diner.checks(ID1, ID2, ...)
563
+ all_checks = Flapjack::Diner.checks
564
+ ```
565
+
566
+ ---
567
+
542
568
  <a name="create_scheduled_maintenances_checks">&nbsp;</a>
543
569
  ### create_scheduled_maintenances_checks
544
570
 
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["ali.graham@bulletproof.net"]
7
7
  gem.summary = %q{Access the API of a Flapjack system monitoring server}
8
8
  gem.description = %q{Wraps raw API calls to a Flapjack server API with friendlier ruby methods.}
9
- gem.homepage = 'https://github.com/flpjck/flapjack-diner'
9
+ gem.homepage = 'https://github.com/flapjack/flapjack-diner'
10
10
 
11
11
  gem.files = `git ls-files`.split($\) - ['Gemfile.lock']
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
 
21
21
  gem.add_development_dependency('bundler')
22
22
  gem.add_development_dependency('rake')
23
- gem.add_development_dependency('rspec', '>= 2.0.0')
23
+ gem.add_development_dependency('rspec', '~> 2.0')
24
24
  gem.add_development_dependency('simplecov')
25
25
  gem.add_development_dependency('webmock')
26
26
  end
@@ -1,7 +1,6 @@
1
1
  require 'httparty'
2
2
  require 'json'
3
3
  require 'uri'
4
- require 'cgi'
5
4
 
6
5
  require 'flapjack-diner/version'
7
6
  require 'flapjack-diner/argument_validator'
@@ -16,7 +15,7 @@ module Flapjack
16
15
 
17
16
  class << self
18
17
 
19
- attr_accessor :logger
18
+ attr_accessor :logger, :return_keys_as_strings
20
19
 
21
20
  # NB: clients will need to handle any exceptions caused by,
22
21
  # e.g., network failures or non-parseable JSON data.
@@ -237,6 +236,10 @@ module Flapjack
237
236
  extract_get('entities', perform_get('/entities', ids))
238
237
  end
239
238
 
239
+ def checks(*ids)
240
+ extract_get('checks', perform_get('/checks', ids))
241
+ end
242
+
240
243
  def update_entities(*args)
241
244
  ids, params, data = unwrap_ids_and_params(*args)
242
245
  raise "'update_entities' requires at least one entity id parameter" if ids.nil? || ids.empty?
@@ -264,6 +267,25 @@ module Flapjack
264
267
  perform_patch("/entities/#{escaped_ids(ids)}", nil, ops)
265
268
  end
266
269
 
270
+ def update_checks(*args)
271
+ ids, params, data = unwrap_ids_and_params(*args)
272
+ raise "'update_checks' requires at least one check id parameter" if ids.nil? || ids.empty?
273
+ validate_params(params) do
274
+ validate :query => :enabled, :as => :boolean
275
+ end
276
+ ops = params.inject([]) do |memo, (k,v)|
277
+ case k
278
+ when :enabled
279
+ memo << {:op => 'replace',
280
+ :path => "/checks/0/#{k.to_s}",
281
+ :value => v}
282
+ end
283
+ memo
284
+ end
285
+ raise "'update_checks' did not find any valid update fields" if ops.empty?
286
+ perform_patch("/checks/#{escaped_ids(ids)}", nil, ops)
287
+ end
288
+
267
289
  ['entities', 'checks'].each do |data_type|
268
290
 
269
291
  define_method("create_scheduled_maintenances_#{data_type}") do |*args|
@@ -360,8 +382,14 @@ module Flapjack
360
382
 
361
383
  private
362
384
 
363
- def extract_get(name, result)
364
- (result.nil? || result.is_a?(TrueClass)) ? result : result[name]
385
+ def extract_get(name, response)
386
+ result = (response.nil? || response.is_a?(TrueClass)) ? response : response[name]
387
+
388
+ if return_keys_as_strings.is_a?(TrueClass)
389
+ return result
390
+ else
391
+ return symbolize(result)
392
+ end
365
393
  end
366
394
 
367
395
  def perform_get(path, ids = [], data = [])
@@ -449,7 +477,7 @@ module Flapjack
449
477
  end
450
478
 
451
479
  def escaped_ids(ids = [])
452
- ids.collect{|id| CGI.escape(id.to_s)}.join(',')
480
+ ids.collect{|id| URI.escape(id.to_s)}.join(',')
453
481
  end
454
482
 
455
483
  def escape(s)
@@ -526,6 +554,13 @@ module Flapjack
526
554
  def last_error=(error)
527
555
  @last_error = error
528
556
  end
557
+
558
+ def symbolize(obj)
559
+ return obj.inject({}){|memo,(k,v)| memo[k.to_sym] = symbolize(v); memo} if obj.is_a? Hash
560
+ return obj.inject([]){|memo,v | memo << symbolize(v); memo} if obj.is_a? Array
561
+ return obj
562
+ end
563
+
529
564
  end
530
565
  end
531
566
  end
@@ -1,5 +1,5 @@
1
1
  module Flapjack
2
2
  module Diner
3
- VERSION = "1.0.0.rc1"
3
+ VERSION = "1.0.0.rc2"
4
4
  end
5
5
  end
@@ -12,21 +12,21 @@ describe Flapjack::ArgumentValidator do
12
12
  subject { Flapjack::ArgumentValidator.new(query) }
13
13
 
14
14
  it 'does not raise an exception when query entity is valid' do
15
- lambda { subject.validate(:query => :entity, :as => :required) }.should_not raise_exception(ArgumentError)
15
+ lambda { subject.validate(:query => :entity, :as => :required) }.should_not raise_exception
16
16
  end
17
17
 
18
18
  it 'raises ArgumentError when query entity is invalid' do
19
19
  query[:entity] = nil
20
- lambda { subject.validate(:query => :entity, :as => :required) }.should raise_exception(ArgumentError)
20
+ lambda { subject.validate(:query => :entity, :as => :required) }.should raise_exception
21
21
  end
22
22
 
23
23
  it 'handles arrays as query values valid' do
24
- lambda { subject.validate(:query => [:entity, :check], :as => :required) }.should_not raise_exception(ArgumentError)
24
+ lambda { subject.validate(:query => [:entity, :check], :as => :required) }.should_not raise_exception
25
25
  end
26
26
 
27
27
  it 'handles arrays as query values invalid' do
28
28
  query[:check] = nil
29
- lambda { subject.validate(:query => [:entity, :check], :as => :required) }.should raise_exception(ArgumentError)
29
+ lambda { subject.validate(:query => [:entity, :check], :as => :required) }.should raise_exception
30
30
  end
31
31
  end
32
32
 
@@ -39,37 +39,37 @@ describe Flapjack::ArgumentValidator do
39
39
  subject { Flapjack::ArgumentValidator.new(query) }
40
40
 
41
41
  it 'does not raise an exception when query start_time is valid' do
42
- lambda { subject.validate(:query => :start_time, :as => :time) }.should_not raise_exception(ArgumentError)
42
+ lambda { subject.validate(:query => :start_time, :as => :time) }.should_not raise_exception
43
43
  end
44
44
 
45
45
  it 'raises an exception when query start_time is invalid' do
46
46
  query[:start_time] = 1234
47
- lambda { subject.validate(:query => :start_time, :as => :time) }.should raise_exception(ArgumentError)
47
+ lambda { subject.validate(:query => :start_time, :as => :time) }.should raise_exception
48
48
  end
49
49
 
50
50
  it 'handles arrays as query values valid' do
51
51
  query[:end_time] = Time.now
52
- lambda { subject.validate(:query => [:start_time, :end_time], :as => :time) }.should_not raise_exception(ArgumentError)
52
+ lambda { subject.validate(:query => [:start_time, :end_time], :as => :time) }.should_not raise_exception
53
53
  end
54
54
 
55
55
  it 'handles arrays as query values invalid' do
56
56
  query[:end_time] = 3904
57
- lambda { subject.validate(:query => [:start_time, :end_time], :as => :time) }.should raise_exception(ArgumentError)
57
+ lambda { subject.validate(:query => [:start_time, :end_time], :as => :time) }.should raise_exception
58
58
  end
59
59
 
60
60
  it 'handles dates as query values' do
61
61
  query[:end_time] = Date.today
62
- lambda { subject.validate(:query => :end_time, :as => :time) }.should_not raise_exception(ArgumentError)
62
+ lambda { subject.validate(:query => :end_time, :as => :time) }.should_not raise_exception
63
63
  end
64
64
 
65
65
  it 'handles ISO 8601 strings as query values' do
66
66
  query[:end_time] = Time.now.iso8601
67
- lambda { subject.validate(:query => :end_time, :as => :time) }.should_not raise_exception(ArgumentError)
67
+ lambda { subject.validate(:query => :end_time, :as => :time) }.should_not raise_exception
68
68
  end
69
69
 
70
70
  it 'raises an exception when invalid time strings are provided' do
71
71
  query[:end_time] = '2011-08-01T00:00'
72
- lambda { subject.validate(:query => :end_time, :as => :time) }.should raise_exception(ArgumentError)
72
+ lambda { subject.validate(:query => :end_time, :as => :time) }.should raise_exception
73
73
  end
74
74
  end
75
75
 
@@ -82,12 +82,12 @@ describe Flapjack::ArgumentValidator do
82
82
  subject { Flapjack::ArgumentValidator.new(query) }
83
83
 
84
84
  it 'does not raise an exception when query duration is valid' do
85
- lambda { subject.validate(:query => :duration, :as => :integer) }.should_not raise_exception(ArgumentError)
85
+ lambda { subject.validate(:query => :duration, :as => :integer) }.should_not raise_exception
86
86
  end
87
87
 
88
88
  it 'raises an exception when query duration is invalid' do
89
89
  query[:duration] = '23'
90
- lambda { subject.validate(:query => :duration, :as => :integer) }.should raise_exception(ArgumentError)
90
+ lambda { subject.validate(:query => :duration, :as => :integer) }.should raise_exception
91
91
  end
92
92
  end
93
93
 
@@ -100,12 +100,12 @@ describe Flapjack::ArgumentValidator do
100
100
  subject { Flapjack::ArgumentValidator.new(query) }
101
101
 
102
102
  it 'does not raise an exception when query start_time is valid' do
103
- lambda { subject.validate(:query => :start_time, :as => [:time, :required]) }.should_not raise_exception(ArgumentError)
103
+ lambda { subject.validate(:query => :start_time, :as => [:time, :required]) }.should_not raise_exception
104
104
  end
105
105
 
106
106
  it 'raises an exception when query start_time is invalid' do
107
107
  query[:start_time] = nil
108
- lambda { subject.validate(:query => :start_time, :as => [:time, :required]) }.should raise_exception(ArgumentError)
108
+ lambda { subject.validate(:query => :start_time, :as => [:time, :required]) }.should raise_exception
109
109
  end
110
110
  end
111
111
  end
@@ -14,6 +14,7 @@ describe Flapjack::Diner do
14
14
  before(:each) do
15
15
  Flapjack::Diner.base_uri(server)
16
16
  Flapjack::Diner.logger = nil
17
+ Flapjack::Diner.return_keys_as_strings = true
17
18
  end
18
19
 
19
20
  after(:each) do
@@ -66,12 +67,48 @@ describe Flapjack::Diner do
66
67
 
67
68
  context 'read' do
68
69
  it "submits a GET request for all contacts" do
70
+ data = [{:id => "21"}]
71
+
72
+ req = stub_request(:get, "http://#{server}/contacts").to_return(
73
+ :status => 200, :body => response_with_data('contacts', data))
74
+
75
+ result = Flapjack::Diner.contacts
76
+ req.should have_been_requested
77
+ result.should_not be_nil
78
+ result.should be_an_instance_of(Array)
79
+ result.length.should be(1)
80
+ result[0].should be_an_instance_of(Hash)
81
+ result[0].should have_key('id')
82
+ end
83
+
84
+ it "can return keys as symbols" do
85
+ Flapjack::Diner.return_keys_as_strings = false
86
+ data = [{
87
+ :id => "21",
88
+ :first_name => "Ada",
89
+ :last_name => "Lovelace",
90
+ :email => "ada@example.com",
91
+ :timezone => "Europe/London",
92
+ :tags => [ "legend", "first computer programmer" ],
93
+ :links => {
94
+ :entities => ["7", "12", "83"],
95
+ :media => ["21_email", "21_sms"],
96
+ :notification_rules => ["30fd36ae-3922-4957-ae3e-c8f6dd27e543"]
97
+ }
98
+ }]
99
+
69
100
  req = stub_request(:get, "http://#{server}/contacts").to_return(
70
- :status => 200, :body => response_with_data('contacts'))
101
+ :status => 200, :body => response_with_data('contacts', data))
71
102
 
72
103
  result = Flapjack::Diner.contacts
73
104
  req.should have_been_requested
74
105
  result.should_not be_nil
106
+ result.should be_an_instance_of(Array)
107
+ result.length.should be(1)
108
+ result[0].should be_an_instance_of(Hash)
109
+ result[0].should have_key(:id)
110
+ result[0].should have_key(:links)
111
+ result[0][:links].should have_key(:entities)
75
112
  end
76
113
 
77
114
  it "submits a GET request for one contact" do
@@ -845,7 +882,7 @@ describe Flapjack::Diner do
845
882
 
846
883
  it "submits a POST request on a check" do
847
884
  data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
848
- req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
885
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH").
849
886
  with(:body => {:scheduled_maintenances => data}.to_json,
850
887
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
851
888
  to_return(:status => 204)
@@ -858,7 +895,7 @@ describe Flapjack::Diner do
858
895
 
859
896
  it "submits a POST request on several checks" do
860
897
  data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
861
- req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
898
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
862
899
  with(:body => {:scheduled_maintenances => data}.to_json,
863
900
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
864
901
  to_return(:status => 204)
@@ -872,7 +909,7 @@ describe Flapjack::Diner do
872
909
  it "submits a POST request for multiple periods on a check" do
873
910
  data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
874
911
  {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
875
- req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
912
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH").
876
913
  with(:body => {:scheduled_maintenances => data}.to_json,
877
914
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
878
915
  to_return(:status => 204)
@@ -886,7 +923,7 @@ describe Flapjack::Diner do
886
923
  it "submits a POST request for multiple periods on several checks" do
887
924
  data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
888
925
  {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
889
- req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
926
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
890
927
  with(:body => {:scheduled_maintenances => data}.to_json,
891
928
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
892
929
  to_return(:status => 204)
@@ -903,7 +940,7 @@ describe Flapjack::Diner do
903
940
 
904
941
  it "submits a POST request on a check" do
905
942
  data = [{:duration => 3600, :summary => 'working'}]
906
- req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH").
943
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com%3ASSH").
907
944
  with(:body => {:unscheduled_maintenances => data}.to_json,
908
945
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
909
946
  to_return(:status => 204)
@@ -916,7 +953,7 @@ describe Flapjack::Diner do
916
953
 
917
954
  it "submits a POST request on several checks" do
918
955
  data = [{:duration => 3600, :summary => 'working'}]
919
- req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
956
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
920
957
  with(:body => {:unscheduled_maintenances => data}.to_json,
921
958
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
922
959
  to_return(:status => 204)
@@ -930,7 +967,7 @@ describe Flapjack::Diner do
930
967
  it "submits a POST request for multiple periods on several checks" do
931
968
  data = [{:duration => 3600, :summary => 'working'},
932
969
  {:duration => 3600, :summary => 'more work'}]
933
- req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
970
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
934
971
  with(:body => {:unscheduled_maintenances => data}.to_json,
935
972
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
936
973
  to_return(:status => 204)
@@ -946,7 +983,7 @@ describe Flapjack::Diner do
946
983
  context 'test notifications' do
947
984
 
948
985
  it "submits a POST request for a check" do
949
- req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH").
986
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com%3ASSH").
950
987
  with(:body => {:test_notifications => [{:summary => 'testing'}]}.to_json,
951
988
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
952
989
  to_return(:status => 204)
@@ -958,7 +995,7 @@ describe Flapjack::Diner do
958
995
  end
959
996
 
960
997
  it "submits a POST request for several checks" do
961
- req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH,example2.com:PING").
998
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com%3ASSH,example2.com%3APING").
962
999
  with(:test_notifications => [{:summary => 'testing'}]).
963
1000
  to_return(:status => 204)
964
1001
 
@@ -970,7 +1007,7 @@ describe Flapjack::Diner do
970
1007
 
971
1008
  it "submits a POST request for multiple notifications on a check" do
972
1009
  data = [{:summary => 'testing'}, {:summary => 'more testing'}]
973
- req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH").
1010
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com%3ASSH").
974
1011
  with(:body => {:test_notifications => data}.to_json,
975
1012
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
976
1013
  to_return(:status => 204)
@@ -983,7 +1020,7 @@ describe Flapjack::Diner do
983
1020
 
984
1021
  it "submits a POST request for multiple notifications on several checks" do
985
1022
  data = [{:summary => 'testing'}, {:summary => 'more testing'}]
986
- req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH,example2.com:PING").
1023
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com%3ASSH,example2.com%3APING").
987
1024
  with(:body => {:test_notifications => data}.to_json,
988
1025
  :headers => {'Content-Type'=>'application/vnd.api+json'}).
989
1026
  to_return(:status => 204)
@@ -998,10 +1035,51 @@ describe Flapjack::Diner do
998
1035
 
999
1036
  end
1000
1037
 
1038
+ context 'read' do
1039
+ it "submits a GET request for all checks" do
1040
+ req = stub_request(:get, "http://#{server}/checks").
1041
+ to_return(:body => response_with_data('checks'))
1042
+
1043
+ result = Flapjack::Diner.checks
1044
+ req.should have_been_requested
1045
+ result.should_not be_nil
1046
+ end
1047
+
1048
+ it "submits a GET request for one check" do
1049
+ req = stub_request(:get, "http://#{server}/checks/example.com%3ASSH").
1050
+ to_return(:body => response_with_data('checks'))
1051
+
1052
+ result = Flapjack::Diner.checks('example.com:SSH')
1053
+ req.should have_been_requested
1054
+ result.should_not be_nil
1055
+ end
1056
+
1057
+ it "submits a GET request for several checks" do
1058
+ req = stub_request(:get, "http://#{server}/checks/example.com%3ASSH,example2.com%3APING").
1059
+ to_return(:body => response_with_data('checks'))
1060
+
1061
+ result = Flapjack::Diner.checks('example.com:SSH', 'example2.com:PING')
1062
+ req.should have_been_requested
1063
+ result.should_not be_nil
1064
+ end
1065
+ end
1066
+
1001
1067
  context 'update' do
1002
1068
 
1069
+ it "submits a PATCH request for a check" do
1070
+ req = stub_request(:patch, "http://#{server}/checks/www.example.com%3APING").
1071
+ with(:body => [{:op => 'replace', :path => '/checks/0/enabled', :value => false}].to_json,
1072
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
1073
+ to_return(:status => 204)
1074
+
1075
+ result = Flapjack::Diner.update_checks('www.example.com:PING', :enabled => false)
1076
+ req.should have_been_requested
1077
+ result.should_not be_nil
1078
+ result.should be_true
1079
+ end
1080
+
1003
1081
  it "submits a PATCH request for unscheduled maintenances on a check" do
1004
- req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH").
1082
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com%3ASSH").
1005
1083
  with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
1006
1084
  :headers => {'Content-Type'=>'application/json-patch+json'}).
1007
1085
  to_return(:status => 204)
@@ -1013,7 +1091,7 @@ describe Flapjack::Diner do
1013
1091
  end
1014
1092
 
1015
1093
  it "submits a PATCH request for unscheduled maintenances on several checks" do
1016
- req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
1094
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
1017
1095
  with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
1018
1096
  :headers => {'Content-Type'=>'application/json-patch+json'}).
1019
1097
  to_return(:status => 204)
@@ -1029,7 +1107,7 @@ describe Flapjack::Diner do
1029
1107
  context 'delete' do
1030
1108
 
1031
1109
  it "submits a DELETE request for scheduled maintenances on a check" do
1032
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
1110
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH").
1033
1111
  with(:query => {:start_time => time.iso8601}).
1034
1112
  to_return(:status => 204)
1035
1113
 
@@ -1039,8 +1117,19 @@ describe Flapjack::Diner do
1039
1117
  result.should be_true
1040
1118
  end
1041
1119
 
1120
+ it "submits a DELETE request for scheduled maintenances on a check with spaces in the name, percent-encoded" do
1121
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com%3ADisk%20C%3A%20Utilisation").
1122
+ with(:query => {:start_time => time.iso8601}).
1123
+ to_return(:status => 204)
1124
+
1125
+ result = Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:Disk C: Utilisation', :start_time => time.iso8601)
1126
+ req.should have_been_requested
1127
+ result.should_not be_nil
1128
+ result.should be_true
1129
+ end
1130
+
1042
1131
  it "submits a DELETE request for scheduled maintenances on several checks" do
1043
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
1132
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH,example2.com%3APING").
1044
1133
  with(:query => {:start_time => time.iso8601}).
1045
1134
  to_return(:status => 204)
1046
1135
 
@@ -1095,7 +1184,7 @@ describe Flapjack::Diner do
1095
1184
  end
1096
1185
 
1097
1186
  it "submits a GET request for a #{report_type} report on one check" do
1098
- req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH").
1187
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com%3ASSH").
1099
1188
  to_return(:body => response_with_data("#{report_type}_reports"))
1100
1189
 
1101
1190
  result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
@@ -1105,7 +1194,7 @@ describe Flapjack::Diner do
1105
1194
  end
1106
1195
 
1107
1196
  it "submits a GET request for a #{report_type} report on several checks" do
1108
- req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH,example2.com:PING").
1197
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com%3ASSH,example2.com%3APING").
1109
1198
  to_return(:body => response_with_data("#{report_type}_reports"))
1110
1199
 
1111
1200
  result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
@@ -1166,7 +1255,7 @@ describe Flapjack::Diner do
1166
1255
  end
1167
1256
 
1168
1257
  it "submits a time-limited GET request for a #{report_type} report on one check" do
1169
- req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH").
1258
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com%3ASSH").
1170
1259
  with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1171
1260
  to_return(:body => response_with_data("#{report_type}_reports"))
1172
1261
 
@@ -1177,7 +1266,7 @@ describe Flapjack::Diner do
1177
1266
  end
1178
1267
 
1179
1268
  it "submits a time-limited GET request for a #{report_type} report on several checks" do
1180
- req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH,example2.com:PING").
1269
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com%3ASSH,example2.com%3APING").
1181
1270
  with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1182
1271
  to_return(:body => response_with_data("#{report_type}_reports"))
1183
1272
 
@@ -1195,7 +1284,7 @@ describe Flapjack::Diner do
1195
1284
 
1196
1285
  context "logging" do
1197
1286
 
1198
- let(:logger) { mock('logger') }
1287
+ let(:logger) { double('logger') }
1199
1288
 
1200
1289
  before do
1201
1290
  Flapjack::Diner.logger = logger
@@ -1228,11 +1317,11 @@ describe Flapjack::Diner do
1228
1317
  end
1229
1318
 
1230
1319
  it "logs a DELETE request" do
1231
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
1320
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com%3ASSH").
1232
1321
  with(:query => {:start_time => time.iso8601}).
1233
1322
  to_return(:status => 204)
1234
1323
 
1235
- logger.should_receive(:info).with("DELETE http://#{server}/scheduled_maintenances/checks/#{CGI.escape('example.com:SSH')}?start_time=#{CGI.escape(time.iso8601)}")
1324
+ logger.should_receive(:info).with("DELETE http://#{server}/scheduled_maintenances/checks/example.com:SSH?start_time=#{URI.encode_www_form_component(time.iso8601)}")
1236
1325
  logger.should_receive(:info).with(" Response Code: 204")
1237
1326
 
1238
1327
  result = Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:SSH', :start_time => time)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flapjack-diner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Graham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.0.0
75
+ version: '2.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.0.0
82
+ version: '2.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +129,7 @@ files:
129
129
  - spec/argument_validator_spec.rb
130
130
  - spec/flapjack-diner_spec.rb
131
131
  - spec/spec_helper.rb
132
- homepage: https://github.com/flpjck/flapjack-diner
132
+ homepage: https://github.com/flapjack/flapjack-diner
133
133
  licenses: []
134
134
  metadata: {}
135
135
  post_install_message: