exception_notification 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,11 @@
1
+ == 4.0.1
2
+
3
+ * enhancements
4
+ * Add HipChat notifier (by @j15e)
5
+ * Log backtrace when notification fails
6
+ * Send more info in Webhook notifier
7
+ * Add HTTP method to request section
8
+
1
9
  == 4.0.0
2
10
 
3
11
  * enhancements
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- exception_notification (4.0.0)
4
+ exception_notification (4.0.1)
5
5
  actionmailer (>= 3.0.4)
6
6
  activesupport (>= 3.0.4)
7
7
 
@@ -58,6 +58,8 @@ GEM
58
58
  faraday (>= 0.7.4, < 0.9)
59
59
  hashie (1.2.0)
60
60
  hike (1.2.1)
61
+ hipchat (0.11.0)
62
+ httparty
61
63
  http_parser.rb (0.5.3)
62
64
  httparty (0.10.2)
63
65
  multi_json (~> 1.0)
@@ -155,6 +157,7 @@ DEPENDENCIES
155
157
  appraisal
156
158
  coveralls (~> 0.6.5)
157
159
  exception_notification!
160
+ hipchat (>= 0.11.0)
158
161
  httparty (~> 0.10.2)
159
162
  mocha (>= 0.13.0)
160
163
  rails (>= 3.0.4)
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2005 Jamis Buck
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -47,7 +47,7 @@ Whatever::Application.config.middleware.use ExceptionNotification::Rack,
47
47
  }
48
48
  ```
49
49
 
50
- > **Note**: In order delivery notifications by email make sure you have [ActionMailer configured](#actionmailer-configuration).
50
+ > **Note**: In order to enable delivery notifications by email make sure you have [ActionMailer configured](#actionmailer-configuration).
51
51
 
52
52
 
53
53
  In order to use ExceptionNotification with Sinatra, please take a look in the [example application](https://github.com/smartinez87/exception_notification/tree/master/examples/sinatra).
@@ -75,7 +75,7 @@ Whatever::Application.config.middleware.use ExceptionNotification::Rack,
75
75
  }
76
76
  ```
77
77
 
78
- Beside that, the rack middlware was renamed to `ExceptionNotification::Rack`.
78
+ Beside that, the rack middleware was renamed to `ExceptionNotification::Rack`.
79
79
 
80
80
  ## Notifiers
81
81
 
@@ -195,7 +195,7 @@ Whatever::Application.config.middleware.use ExceptionNotification::Rack,
195
195
 
196
196
  ##### email_headers
197
197
 
198
- *Hash os strings, default: {}*
198
+ *Hash of strings, default: {}*
199
199
 
200
200
  Additionally, you may want to set customized headers on the outcoming emails. To do so, simply use the `:email_headers` option:
201
201
 
@@ -258,7 +258,7 @@ Whatever::Application.config.middleware.use ExceptionNotification::Rack,
258
258
  :email_prefix => "[Whatever] ",
259
259
  :sender_address => %{"notifier" <notifier@example.com>},
260
260
  :exception_recipients => %w{exceptions@example.com},
261
- :delivery_method => :stmp,
261
+ :delivery_method => :smtp,
262
262
  :smtp_settings => {
263
263
  :user_name => "bob",
264
264
  :password => "password",
@@ -326,6 +326,67 @@ The API token to allow access to your Campfire account.
326
326
  For more options to set Campfire, like _ssl_, check [here](https://github.com/collectiveidea/tinder/blob/master/lib/tinder/campfire.rb#L17).
327
327
 
328
328
 
329
+ ### HipChat notifier
330
+
331
+ This notifier sends notifications to your Hipchat room.
332
+
333
+ #### Usage
334
+
335
+ Just add the [hipchat](https://github.com/hipchat/hipchat) gem to your `Gemfile`:
336
+
337
+ ```ruby
338
+ gem 'hipchat'
339
+ ```
340
+
341
+ To configure it, you need to set the `token` and `room_name` options, like this:
342
+
343
+ ```ruby
344
+ Whatever::Application.config.middleware.use ExceptionNotification::Rack,
345
+ :email => {
346
+ :email_prefix => "[Whatever] ",
347
+ :sender_address => %{"notifier" <notifier@example.com>},
348
+ :exception_recipients => %w{exceptions@example.com}
349
+ },
350
+ :hipchat => {
351
+ :api_token => 'my_token',
352
+ :room_name => 'my_room'
353
+ }
354
+ ```
355
+
356
+ #### Options
357
+
358
+ ##### room_name
359
+
360
+ *String, required*
361
+
362
+ The HipChat room where the notifications must be published to.
363
+
364
+ ##### api_token
365
+
366
+ *String, required*
367
+
368
+ The API token to allow access to your HipChat account.
369
+
370
+ ##### announce
371
+
372
+ *Boolean, optionnal*
373
+
374
+ Notify users. Default : false.
375
+
376
+ ##### color
377
+
378
+ *String, optionnal*
379
+
380
+ Color of the message. Default : 'red'.
381
+
382
+ ##### from
383
+
384
+ *String, optionnal*
385
+
386
+ Message will appear from this nickname. Default : 'Exception'.
387
+
388
+ For all options & possible values see [Hipchat API](https://www.hipchat.com/docs/api/method/rooms/message).
389
+
329
390
  ### Webhook notifier
330
391
 
331
392
  This notifier ships notifications over the HTTP protocol.
@@ -559,6 +620,10 @@ or
559
620
 
560
621
  ## Versions
561
622
 
623
+ For v4.0.0, see this tag:
624
+
625
+ http://github.com/smartinez87/exception_notification/tree/v4.0.0
626
+
562
627
  For v3.0.1, see this tag:
563
628
 
564
629
  http://github.com/smartinez87/exception_notification/tree/v3.0.1
@@ -1,13 +1,16 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'exception_notification'
3
- s.version = '4.0.0'
3
+ s.version = '4.0.1'
4
4
  s.authors = ["Jamis Buck", "Josh Peek"]
5
- s.date = %q{2013-07-06}
5
+ s.date = %q{2013-09-15}
6
6
  s.summary = "Exception notification for Rails apps"
7
7
  s.homepage = "http://smartinez87.github.com/exception_notification"
8
8
  s.email = "smartinez87@gmail.com"
9
9
  s.license = "MIT"
10
10
 
11
+ s.required_ruby_version = '>= 1.9.3'
12
+ s.required_rubygems_version = '>= 1.8.11'
13
+
11
14
  s.files = `git ls-files`.split("\n")
12
15
  s.test_files = `git ls-files -- test`.split("\n")
13
16
  s.require_path = 'lib'
@@ -24,4 +27,5 @@ Gem::Specification.new do |s|
24
27
  s.add_development_dependency "sqlite3", ">= 1.3.4"
25
28
  s.add_development_dependency "coveralls", "~> 0.6.5"
26
29
  s.add_development_dependency "appraisal", ">= 0"
30
+ s.add_development_dependency "hipchat", ">= 0.11.0"
27
31
  end
@@ -1,11 +1,13 @@
1
1
  require 'logger'
2
2
  require 'active_support/core_ext/string/inflections'
3
+ require 'active_support/core_ext/module/attribute_accessors'
3
4
 
4
5
  module ExceptionNotifier
5
6
 
6
7
  autoload :Notifier, 'exception_notifier/notifier'
7
8
  autoload :EmailNotifier, 'exception_notifier/email_notifier'
8
9
  autoload :CampfireNotifier, 'exception_notifier/campfire_notifier'
10
+ autoload :HipchatNotifier, 'exception_notifier/hipchat_notifier'
9
11
  autoload :WebhookNotifier, 'exception_notifier/webhook_notifier'
10
12
 
11
13
  class UndefinedNotifierError < StandardError; end
@@ -75,7 +77,7 @@ module ExceptionNotifier
75
77
  def ignored?(exception, options)
76
78
  @@ignores.any?{ |condition| condition.call(exception, options) }
77
79
  rescue Exception => e
78
- logger.warn "An error occurred when evaluating an ignore condition. #{e.class}: #{e.message}"
80
+ logger.warn "An error occurred when evaluating an ignore condition. #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
79
81
  false
80
82
  end
81
83
 
@@ -87,7 +89,7 @@ module ExceptionNotifier
87
89
  notifier = registered_exception_notifier(notifier_name)
88
90
  notifier.call(exception, options)
89
91
  rescue Exception => e
90
- logger.warn "An error occurred when sending a notification using '#{notifier_name}' notifier. #{e.class}: #{e.message}"
92
+ logger.warn "An error occurred when sending a notification using '#{notifier_name}' notifier. #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
91
93
  false
92
94
  end
93
95
 
@@ -0,0 +1,34 @@
1
+ module ExceptionNotifier
2
+ class HipchatNotifier
3
+
4
+ attr_accessor :from
5
+ attr_accessor :room
6
+ attr_accessor :message_options
7
+
8
+ def initialize(options)
9
+ begin
10
+ api_token = options.delete(:api_token)
11
+ room_name = options.delete(:room_name)
12
+ @from = options.delete(:from) || 'Exception'
13
+ @room = HipChat::Client.new(api_token)[room_name]
14
+ @message_options = options
15
+ @message_options[:color] ||= 'red'
16
+ rescue
17
+ @room = nil
18
+ end
19
+ end
20
+
21
+ def call(exception, options={})
22
+ return if !active?
23
+
24
+ message = "A new exception occurred: '#{exception.message}' on '#{exception.backtrace.first}'"
25
+ @room.send(@from, message, @message_options)
26
+ end
27
+
28
+ private
29
+
30
+ def active?
31
+ !@room.nil?
32
+ end
33
+ end
34
+ end
@@ -7,12 +7,4 @@
7
7
  <span><%= inspect_object(filtered_env[key]) %></span>
8
8
  </li>
9
9
  <% end -%>
10
- <li>
11
- <strong>Process:</strong>
12
- <span><%= raw $$ %></span>
13
- </li>
14
- <li>
15
- <strong>Server:</strong>
16
- <span><%= raw Socket.gethostname %></span>
17
- </li>
18
10
  </ul>
@@ -3,6 +3,3 @@
3
3
  <% filtered_env.keys.map(&:to_s).sort.each do |key| -%>
4
4
  * <%= raw("%-*s: %s" % [max.length, key, inspect_object(filtered_env[key])]) %>
5
5
  <% end -%>
6
-
7
- * Process: <%= raw $$ %>
8
- * Server : <%= raw Socket.gethostname %>
@@ -3,6 +3,10 @@
3
3
  <strong>URL:</strong>
4
4
  <span><%= raw @request.url %></span>
5
5
  </li>
6
+ <li>
7
+ <strong>HTTP Method:</strong>
8
+ <span><%= raw @request.request_method %></span>
9
+ </li>
6
10
  <li>
7
11
  <strong>IP Address:</strong>
8
12
  <span><%= raw @request.remote_ip %></span>
@@ -11,6 +15,14 @@
11
15
  <strong>Parameters:</strong>
12
16
  <span><%= raw @request.filtered_parameters.inspect %></span>
13
17
  </li>
18
+ <li>
19
+ <strong>Timestamp:</strong>
20
+ <span><%= raw Time.current %></span>
21
+ </li>
22
+ <li>
23
+ <strong>Server:</strong>
24
+ <span><%= raw Socket.gethostname %></span>
25
+ </li>
14
26
  <% if defined?(Rails) %>
15
27
  <li>
16
28
  <strong>Rails root:</strong>
@@ -18,7 +30,7 @@
18
30
  </li>
19
31
  <% end %>
20
32
  <li>
21
- <strong>Timestamp:</strong>
22
- <span><%= raw Time.current %></span>
33
+ <strong>Process:</strong>
34
+ <span><%= raw $$ %></span>
23
35
  </li>
24
36
  </ul>
@@ -1,7 +1,10 @@
1
- * URL : <%= raw @request.url %>
2
- * IP address: <%= raw @request.remote_ip %>
3
- * Parameters: <%= raw @request.filtered_parameters.inspect %>
1
+ * URL : <%= raw @request.url %>
2
+ * HTTP Method: <%= raw @request.request_method %>
3
+ * IP address : <%= raw @request.remote_ip %>
4
+ * Parameters : <%= raw @request.filtered_parameters.inspect %>
5
+ * Timestamp : <%= raw Time.current %>
6
+ * Server : <%= raw Socket.gethostname %>
4
7
  <% if defined?(Rails) %>
5
- * Rails root: <%= raw Rails.root %>
8
+ * Rails root : <%= raw Rails.root %>
6
9
  <% end %>
7
- * Timestamp : <%= raw Time.current %>
10
+ * Process: <%= raw $$ %>
@@ -1,3 +1,5 @@
1
+ require 'action_dispatch'
2
+
1
3
  module ExceptionNotifier
2
4
  class WebhookNotifier
3
5
 
@@ -6,14 +8,34 @@ module ExceptionNotifier
6
8
  end
7
9
 
8
10
  def call(exception, options={})
11
+ env = options[:env]
12
+
9
13
  options = options.reverse_merge(@default_options)
10
14
  url = options.delete(:url)
11
15
  http_method = options.delete(:http_method) || :post
12
16
 
13
17
  options[:body] ||= {}
18
+ options[:body][:server] = Socket.gethostname
19
+ options[:body][:process] = $$
20
+ options[:body][:rails_root] = Rails.root if defined?(Rails)
14
21
  options[:body][:exception] = {:error_class => exception.class.to_s,
15
22
  :message => exception.message.inspect,
16
23
  :backtrace => exception.backtrace}
24
+ options[:body][:data] = (env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
25
+
26
+ unless env.nil?
27
+ request = ActionDispatch::Request.new(env)
28
+
29
+ request_items = {:url => request.original_url,
30
+ :http_method => request.http_method,
31
+ :ip_address => request.remote_ip,
32
+ :parameters => request.filtered_parameters,
33
+ :timestamp => Time.current }
34
+
35
+ options[:body][:request] = request_items
36
+ options[:body][:session] = request.session
37
+ options[:body][:environment] = request.filtered_env
38
+ end
17
39
 
18
40
  HTTParty.send(http_method, url, options)
19
41
  end
@@ -38,6 +38,12 @@ ExceptionNotification.configure do |config|
38
38
  # :room_name => 'my_room'
39
39
  # }
40
40
 
41
+ # HipChat notifier sends notifications to your HipChat room. Requires 'hipchat' gem.
42
+ # config.add_notifier :hipchat, {
43
+ # :api_token => 'my_token',
44
+ # :room_name => 'my_room'
45
+ # }
46
+
41
47
  # Webhook notifier sends notifications over HTTP protocol. Requires 'httparty' gem.
42
48
  # config.add_notifier :webhook, {
43
49
  # :url => 'http://example.com:5555/hubot/path',
@@ -46,7 +46,7 @@ class PostsControllerTest < ActionController::TestCase
46
46
  end
47
47
 
48
48
  test "mail should contain timestamp of exception in body" do
49
- assert @mail.encoded.include? "Timestamp : #{Time.current}"
49
+ assert @mail.encoded.include? "Timestamp : #{Time.current}"
50
50
  end
51
51
 
52
52
  test "mail should contain the newly defined section" do
@@ -0,0 +1,75 @@
1
+ require 'test_helper'
2
+ require 'hipchat'
3
+
4
+ class HipchatNotifierTest < ActiveSupport::TestCase
5
+
6
+ test "should send hipchat notification if properly configured" do
7
+ options = {
8
+ :api_token => 'good_token',
9
+ :room_name => 'room_name',
10
+ :color => 'yellow',
11
+ }
12
+
13
+ HipChat::Room.any_instance.expects(:send).with('Exception', fake_body, { :color => 'yellow' })
14
+
15
+ hipchat = ExceptionNotifier::HipchatNotifier.new(options)
16
+ hipchat.call(fake_exception)
17
+ end
18
+
19
+ test "should allow custom from value if set" do
20
+ options = {
21
+ :api_token => 'good_token',
22
+ :room_name => 'room_name',
23
+ :from => 'TrollFace',
24
+ }
25
+
26
+ HipChat::Room.any_instance.expects(:send).with('TrollFace', fake_body, { :color => 'red' })
27
+
28
+ hipchat = ExceptionNotifier::HipchatNotifier.new(options)
29
+ hipchat.call(fake_exception)
30
+ end
31
+
32
+ test "should not send hipchat notification if badly configured" do
33
+ wrong_params = {
34
+ :api_token => 'bad_token',
35
+ :room_name => 'test_room'
36
+ }
37
+
38
+ HipChat::Client.stubs(:new).with('bad_token').returns(nil)
39
+
40
+ hipchat = ExceptionNotifier::HipchatNotifier.new(wrong_params)
41
+ assert_nil hipchat.room
42
+ end
43
+
44
+ test "should not send hipchat notification if api_key is missing" do
45
+ wrong_params = {:room_name => 'test_room'}
46
+
47
+ HipChat::Client.stubs(:new).with(nil).returns(nil)
48
+
49
+ hipchat = ExceptionNotifier::HipchatNotifier.new(wrong_params)
50
+ assert_nil hipchat.room
51
+ end
52
+
53
+ test "should not send hipchat notification if room_name is missing" do
54
+ wrong_params = {:api_token => 'good_token'}
55
+
56
+ HipChat::Client.stubs(:new).with('good_token').returns({})
57
+
58
+ hipchat = ExceptionNotifier::HipchatNotifier.new(wrong_params)
59
+ assert_nil hipchat.room
60
+ end
61
+
62
+ private
63
+
64
+ def fake_body
65
+ "A new exception occurred: '#{fake_exception.message}' on '#{fake_exception.backtrace.first}'"
66
+ end
67
+
68
+ def fake_exception
69
+ exception = begin
70
+ 5/0
71
+ rescue Exception => e
72
+ e
73
+ end
74
+ end
75
+ end
@@ -14,6 +14,15 @@ class WebhookNotifierTest < ActiveSupport::TestCase
14
14
  assert_equal response[:body][:exception][:error_class], "ZeroDivisionError"
15
15
  assert response[:body][:exception][:message].include? "divided by 0"
16
16
  assert response[:body][:exception][:backtrace].include? "/exception_notification/test/webhook_notifier_test.rb:48"
17
+
18
+ assert response[:body][:request][:cookies].has_key?(:cookie_item1)
19
+ assert_equal response[:body][:request][:url], "http://example.com/example"
20
+ assert_equal response[:body][:request][:ip_address], "192.168.1.1"
21
+ assert response[:body][:request][:environment].has_key?(:env_item1)
22
+ assert_equal response[:body][:request][:controller], "#<ControllerName:0x007f9642a04d00>"
23
+ assert response[:body][:request][:session].has_key?(:session_item1)
24
+ assert response[:body][:request][:parameters].has_key?(:controller)
25
+ assert response[:body][:data][:extra_data].has_key?(:data_item1)
17
26
  end
18
27
 
19
28
  private
@@ -26,6 +35,18 @@ class WebhookNotifierTest < ActiveSupport::TestCase
26
35
  :error_class => 'ZeroDivisionError',
27
36
  :message => 'divided by 0',
28
37
  :backtrace => '/exception_notification/test/webhook_notifier_test.rb:48:in `/'
38
+ },
39
+ :data => {
40
+ :extra_data => {:data_item1 => "datavalue1", :data_item2 => "datavalue2"}
41
+ },
42
+ :request => {
43
+ :cookies => {:cookie_item1 => 'cookieitemvalue1', :cookie_item2 => 'cookieitemvalue2'},
44
+ :url => 'http://example.com/example',
45
+ :ip_address => '192.168.1.1',
46
+ :environment => {:env_item1 => "envitem1", :env_item2 => "envitem2"},
47
+ :controller => '#<ControllerName:0x007f9642a04d00>',
48
+ :session => {:session_item1 => "sessionitem1", :session_item2 => "sessionitem2"},
49
+ :parameters => {:action =>"index", :controller =>"projects"}
29
50
  }
30
51
  }
31
52
  }
@@ -1,8 +1,12 @@
1
1
  # Configure Rails Environment
2
2
  ENV["RAILS_ENV"] = "test"
3
3
 
4
- require "coveralls"
5
- Coveralls.wear!
4
+ begin
5
+ require "coveralls"
6
+ Coveralls.wear!
7
+ rescue LoadError
8
+ warn "warning: coveralls gem not found; skipping Coveralls"
9
+ end
6
10
 
7
11
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
8
12
  require "rails/test_help"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_notification
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-06 00:00:00.000000000 Z
13
+ date: 2013-09-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionmailer
@@ -188,6 +188,22 @@ dependencies:
188
188
  - - ! '>='
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
+ - !ruby/object:Gem::Dependency
192
+ name: hipchat
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: 0.11.0
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: 0.11.0
191
207
  description:
192
208
  email: smartinez87@gmail.com
193
209
  executables: []
@@ -202,6 +218,7 @@ files:
202
218
  - CONTRIBUTING.md
203
219
  - Gemfile
204
220
  - Gemfile.lock
221
+ - MIT-LICENSE
205
222
  - README.md
206
223
  - Rakefile
207
224
  - examples/sinatra/Gemfile
@@ -222,6 +239,7 @@ files:
222
239
  - lib/exception_notifier.rb
223
240
  - lib/exception_notifier/campfire_notifier.rb
224
241
  - lib/exception_notifier/email_notifier.rb
242
+ - lib/exception_notifier/hipchat_notifier.rb
225
243
  - lib/exception_notifier/notifier.rb
226
244
  - lib/exception_notifier/views/exception_notifier/_backtrace.html.erb
227
245
  - lib/exception_notifier/views/exception_notifier/_backtrace.text.erb
@@ -299,6 +317,7 @@ files:
299
317
  - test/dummy/test/test_helper.rb
300
318
  - test/exception_notifier/campfire_notifier_test.rb
301
319
  - test/exception_notifier/email_notifier_test.rb
320
+ - test/exception_notifier/hipchat_notifier_test.rb
302
321
  - test/exception_notifier/webhook_notifier_test.rb
303
322
  - test/exception_notifier_test.rb
304
323
  - test/test_helper.rb
@@ -314,19 +333,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
314
333
  requirements:
315
334
  - - ! '>='
316
335
  - !ruby/object:Gem::Version
317
- version: '0'
318
- segments:
319
- - 0
320
- hash: -2589511577649954983
336
+ version: 1.9.3
321
337
  required_rubygems_version: !ruby/object:Gem::Requirement
322
338
  none: false
323
339
  requirements:
324
340
  - - ! '>='
325
341
  - !ruby/object:Gem::Version
326
- version: '0'
327
- segments:
328
- - 0
329
- hash: -2589511577649954983
342
+ version: 1.8.11
330
343
  requirements: []
331
344
  rubyforge_project:
332
345
  rubygems_version: 1.8.23
@@ -391,6 +404,7 @@ test_files:
391
404
  - test/dummy/test/test_helper.rb
392
405
  - test/exception_notifier/campfire_notifier_test.rb
393
406
  - test/exception_notifier/email_notifier_test.rb
407
+ - test/exception_notifier/hipchat_notifier_test.rb
394
408
  - test/exception_notifier/webhook_notifier_test.rb
395
409
  - test/exception_notifier_test.rb
396
410
  - test/test_helper.rb