exception_notification 4.1.1 → 4.1.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.
- checksums.yaml +4 -4
- data/Appraisals +4 -8
- data/CHANGELOG.rdoc +4 -0
- data/README.md +7 -1
- data/exception_notification.gemspec +9 -8
- data/gemfiles/{rails3_1.gemfile → rails4_2.gemfile} +1 -1
- data/lib/exception_notifier/campfire_notifier.rb +5 -1
- data/lib/exception_notifier/email_notifier.rb +10 -14
- data/lib/exception_notifier/hipchat_notifier.rb +3 -1
- data/lib/exception_notifier/irc_notifier.rb +3 -2
- data/lib/exception_notifier/slack_notifier.rb +27 -29
- data/test/dummy/Gemfile +1 -1
- data/test/dummy/Gemfile.lock +102 -84
- data/test/dummy/config/environments/development.rb +1 -0
- data/test/dummy/config/environments/production.rb +1 -0
- data/test/dummy/config/environments/test.rb +3 -0
- data/test/dummy/config/initializers/secret_token.rb +1 -0
- data/test/exception_notifier/campfire_notifier_test.rb +23 -0
- data/test/exception_notifier/email_notifier_test.rb +18 -0
- data/test/exception_notifier/hipchat_notifier_test.rb +21 -0
- data/test/exception_notifier/irc_notifier_test.rb +17 -0
- data/test/exception_notifier/slack_notifier_test.rb +30 -10
- data/test/test_helper.rb +1 -0
- metadata +27 -23
- data/Gemfile.lock +0 -174
- data/gemfiles/rails3_2.gemfile +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4eb16cddf2508b34a6a2dde7228376c70ed01025
|
4
|
+
data.tar.gz: 667d58580ae06080b620d8938437155a6b9b0586
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca1acead20b24875e0cacdbf5574266bf4fa1d080a361eec0f877b794247773f1236854661698706e62fcdd18d47adeb2b64fb8d83c6d654d1cb43b941e32293
|
7
|
+
data.tar.gz: fac6c6c82dc3eebcb635e92fd16f011845d97bcdd4ad080f3acdfc4ef2e65284d9496e027f3cbc5f1b4c4d445cc244162e0bfbfb1d3d8909cbc4fd5bd5ad73e3
|
data/Appraisals
CHANGED
@@ -1,11 +1,3 @@
|
|
1
|
-
appraise "rails3_1" do
|
2
|
-
gem 'rails', '~> 3.1.0'
|
3
|
-
end
|
4
|
-
|
5
|
-
appraise "rails3_2" do
|
6
|
-
gem 'rails', '~> 3.2.0'
|
7
|
-
end
|
8
|
-
|
9
1
|
appraise "rails4_0" do
|
10
2
|
gem 'rails', '4.0.5'
|
11
3
|
end
|
@@ -13,3 +5,7 @@ end
|
|
13
5
|
appraise "rails4_1" do
|
14
6
|
gem 'rails', '~> 4.1.1'
|
15
7
|
end
|
8
|
+
|
9
|
+
appraise "rails4_2" do
|
10
|
+
gem 'rails', '~> 4.2.0'
|
11
|
+
end
|
data/CHANGELOG.rdoc
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
[](http://travis-ci.org/smartinez87/exception_notification)
|
5
5
|
[](https://coveralls.io/r/smartinez87/exception_notification)
|
6
6
|
[](https://codeclimate.com/github/smartinez87/exception_notification)
|
7
|
-

|
8
7
|
|
9
8
|
**THIS README IS FOR THE MASTER BRANCH AND REFLECTS THE WORK CURRENTLY EXISTING ON THE MASTER BRANCH. IF YOU ARE WISHING TO USE A NON-MASTER BRANCH OF EXCEPTION NOTIFICATION, PLEASE CONSULT THAT BRANCH'S README AND NOT THIS ONE.**
|
10
9
|
|
@@ -276,6 +275,13 @@ A complete list of `smtp_settings` options can be found in the [ActionMailer Con
|
|
276
275
|
The parent mailer which ExceptionNotification mailer inherit from.
|
277
276
|
|
278
277
|
|
278
|
+
##### deliver_with
|
279
|
+
|
280
|
+
*Symbol, default: :deliver_now
|
281
|
+
|
282
|
+
The method name to send emalis using ActionMailer.
|
283
|
+
|
284
|
+
|
279
285
|
### Campfire notifier
|
280
286
|
|
281
287
|
This notifier sends notifications to your Campfire room.
|
@@ -1,14 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'exception_notification'
|
3
|
-
s.version = '4.1.
|
3
|
+
s.version = '4.1.2'
|
4
4
|
s.authors = ["Jamis Buck", "Josh Peek"]
|
5
|
-
s.date = %q{2015-
|
5
|
+
s.date = %q{2015-12-04}
|
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 = '>=
|
11
|
+
s.required_ruby_version = '>= 2.0'
|
12
12
|
s.required_rubygems_version = '>= 1.8.11'
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
@@ -16,17 +16,18 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = `git ls-files -- test`.split("\n")
|
17
17
|
s.require_path = 'lib'
|
18
18
|
|
19
|
-
s.add_dependency("actionmailer", "
|
20
|
-
s.add_dependency("activesupport", "
|
19
|
+
s.add_dependency("actionmailer", "~> 4.0")
|
20
|
+
s.add_dependency("activesupport", "~> 4.0")
|
21
21
|
|
22
|
-
s.add_development_dependency "rails", "
|
22
|
+
s.add_development_dependency "rails", "~> 4.0"
|
23
23
|
s.add_development_dependency "resque", "~> 1.2.0"
|
24
|
-
|
24
|
+
# Sidekiq 3.2.2 does not support Ruby 1.9.
|
25
|
+
s.add_development_dependency "sidekiq", "~> 3.0.0", "< 3.2.2"
|
25
26
|
s.add_development_dependency "tinder", "~> 1.8"
|
26
27
|
s.add_development_dependency "httparty", "~> 0.10.2"
|
27
28
|
s.add_development_dependency "mocha", ">= 0.13.0"
|
28
29
|
s.add_development_dependency "sqlite3", ">= 1.3.4"
|
29
|
-
s.add_development_dependency "coveralls", "~> 0.
|
30
|
+
s.add_development_dependency "coveralls", "~> 0.8.2"
|
30
31
|
s.add_development_dependency "appraisal", "~> 1.0.0"
|
31
32
|
s.add_development_dependency "hipchat", ">= 1.0.0"
|
32
33
|
s.add_development_dependency "carrier-pigeon", ">= 0.7.0"
|
@@ -17,7 +17,11 @@ module ExceptionNotifier
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def call(exception, options={})
|
20
|
-
|
20
|
+
if active?
|
21
|
+
message = "A new exception occurred: '#{exception.message}'"
|
22
|
+
message += " on '#{exception.backtrace.first}'" if exception.backtrace
|
23
|
+
@room.paste message message
|
24
|
+
end
|
21
25
|
end
|
22
26
|
|
23
27
|
private
|
@@ -7,7 +7,7 @@ module ExceptionNotifier
|
|
7
7
|
class EmailNotifier < Struct.new(:sender_address, :exception_recipients,
|
8
8
|
:email_prefix, :email_format, :sections, :background_sections,
|
9
9
|
:verbose_subject, :normalize_subject, :delivery_method, :mailer_settings,
|
10
|
-
:email_headers, :mailer_parent, :template_path)
|
10
|
+
:email_headers, :mailer_parent, :template_path, :deliver_with)
|
11
11
|
|
12
12
|
module Mailer
|
13
13
|
class MissingController
|
@@ -88,11 +88,11 @@ module ExceptionNotifier
|
|
88
88
|
name = @env.nil? ? 'background_exception_notification' : 'exception_notification'
|
89
89
|
|
90
90
|
headers = {
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
91
|
+
:delivery_method => @options[:delivery_method],
|
92
|
+
:to => @options[:exception_recipients],
|
93
|
+
:from => @options[:sender_address],
|
94
|
+
:subject => subject,
|
95
|
+
:template_name => name
|
96
96
|
}.merge(@options[:email_headers])
|
97
97
|
|
98
98
|
mail = mail(headers) do |format|
|
@@ -123,7 +123,7 @@ module ExceptionNotifier
|
|
123
123
|
:sender_address, :exception_recipients,
|
124
124
|
:email_prefix, :email_format, :sections, :background_sections,
|
125
125
|
:verbose_subject, :normalize_subject, :delivery_method, :mailer_settings,
|
126
|
-
:email_headers, :mailer_parent, :template_path))
|
126
|
+
:email_headers, :mailer_parent, :template_path, :deliver_with))
|
127
127
|
end
|
128
128
|
|
129
129
|
def options
|
@@ -140,12 +140,7 @@ module ExceptionNotifier
|
|
140
140
|
end
|
141
141
|
|
142
142
|
def call(exception, options={})
|
143
|
-
|
144
|
-
if message.respond_to?(:deliver_now)
|
145
|
-
message.deliver_now
|
146
|
-
else
|
147
|
-
message.deliver
|
148
|
-
end
|
143
|
+
create_email(exception, options).send(deliver_with)
|
149
144
|
end
|
150
145
|
|
151
146
|
def create_email(exception, options={})
|
@@ -172,7 +167,8 @@ module ExceptionNotifier
|
|
172
167
|
:mailer_settings => nil,
|
173
168
|
:email_headers => {},
|
174
169
|
:mailer_parent => 'ActionMailer::Base',
|
175
|
-
:template_path => 'exception_notifier'
|
170
|
+
:template_path => 'exception_notifier',
|
171
|
+
:deliver_with => :deliver_now
|
176
172
|
}
|
177
173
|
end
|
178
174
|
|
@@ -15,7 +15,9 @@ module ExceptionNotifier
|
|
15
15
|
@from = options.delete(:from) || 'Exception'
|
16
16
|
@room = HipChat::Client.new(api_token, opts)[room_name]
|
17
17
|
@message_template = options.delete(:message_template) || ->(exception) {
|
18
|
-
"A new exception occurred: '#{exception.message}'
|
18
|
+
msg = "A new exception occurred: '#{exception.message}'"
|
19
|
+
msg += " on '#{exception.backtrace.first}'" if exception.backtrace
|
20
|
+
msg
|
19
21
|
}
|
20
22
|
@message_options = options
|
21
23
|
@message_options[:color] ||= 'red'
|
@@ -6,7 +6,8 @@ module ExceptionNotifier
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def call(exception, options={})
|
9
|
-
message = "'#{exception.message}'
|
9
|
+
message = "'#{exception.message}'"
|
10
|
+
message += " on '#{exception.backtrace.first}'" if exception.backtrace
|
10
11
|
send_message([*@config.prefix, *message].join(' ')) if active?
|
11
12
|
end
|
12
13
|
|
@@ -42,4 +43,4 @@ module ExceptionNotifier
|
|
42
43
|
false
|
43
44
|
end
|
44
45
|
end
|
45
|
-
end
|
46
|
+
end
|
@@ -17,12 +17,28 @@ module ExceptionNotifier
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def call(exception, options={})
|
20
|
-
|
20
|
+
env = options[:env] || {}
|
21
|
+
title = "#{env['REQUEST_METHOD']} <#{env['REQUEST_URI']}>"
|
22
|
+
data = (env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
|
23
|
+
text = "*An exception occurred while doing*: `#{title}`\n"
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
clean_message = exception.message.gsub("`", "'")
|
26
|
+
fields = [ { title: 'Exception', value: clean_message} ]
|
24
27
|
|
25
|
-
|
28
|
+
if exception.backtrace
|
29
|
+
formatted_backtrace = "```#{exception.backtrace.first(5).join("\n")}```"
|
30
|
+
fields.push({ title: 'Backtrace', value: formatted_backtrace })
|
31
|
+
end
|
32
|
+
|
33
|
+
unless data.empty?
|
34
|
+
deep_reject(data, @ignore_data_if) if @ignore_data_if.is_a?(Proc)
|
35
|
+
data_string = data.map{|k,v| "#{k}: #{v}"}.join("\n")
|
36
|
+
fields.push({ title: 'Data', value: "```#{data_string}```" })
|
37
|
+
end
|
38
|
+
|
39
|
+
attchs = [color: 'danger', text: text, fields: fields, mrkdwn_in: %w(text fields)]
|
40
|
+
|
41
|
+
@notifier.ping '', @message_opts.merge(attachments: attchs) if valid?
|
26
42
|
end
|
27
43
|
|
28
44
|
protected
|
@@ -31,35 +47,17 @@ module ExceptionNotifier
|
|
31
47
|
!@notifier.nil?
|
32
48
|
end
|
33
49
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
deep_reject(v, block)
|
39
|
-
end
|
40
|
-
|
41
|
-
if block.call(k, v)
|
42
|
-
hash.delete(k)
|
43
|
-
end
|
50
|
+
def deep_reject(hash, block)
|
51
|
+
hash.each do |k, v|
|
52
|
+
if v.is_a?(Hash)
|
53
|
+
deep_reject(v, block)
|
44
54
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
data = ((options[:env] || {})['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
|
48
|
-
deep_reject(data, @ignore_data_if) if @ignore_data_if.is_a?(Proc)
|
49
|
-
text = data.map{|k,v| "#{k}: #{v}"}.join(', ')
|
50
55
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
else
|
55
|
-
message
|
56
|
+
if block.call(k, v)
|
57
|
+
hash.delete(k)
|
58
|
+
end
|
56
59
|
end
|
57
60
|
end
|
58
61
|
|
59
|
-
def enrich_message_with_backtrace(message, exception)
|
60
|
-
backtrace = clean_backtrace(exception).first(10).join("\n")
|
61
|
-
[message, ['*Backtrace:*', backtrace]].join("\n")
|
62
|
-
end
|
63
|
-
|
64
62
|
end
|
65
63
|
end
|
data/test/dummy/Gemfile
CHANGED
data/test/dummy/Gemfile.lock
CHANGED
@@ -1,112 +1,130 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../..
|
3
3
|
specs:
|
4
|
-
exception_notification (4.1.
|
5
|
-
actionmailer (
|
6
|
-
activesupport (
|
4
|
+
exception_notification (4.1.1)
|
5
|
+
actionmailer (~> 4.0)
|
6
|
+
activesupport (~> 4.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
-
actionmailer (4.
|
12
|
-
actionpack (= 4.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
actionmailer (4.2.0)
|
12
|
+
actionpack (= 4.2.0)
|
13
|
+
actionview (= 4.2.0)
|
14
|
+
activejob (= 4.2.0)
|
15
|
+
mail (~> 2.5, >= 2.5.4)
|
16
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
17
|
+
actionpack (4.2.0)
|
18
|
+
actionview (= 4.2.0)
|
19
|
+
activesupport (= 4.2.0)
|
20
|
+
rack (~> 1.6.0)
|
19
21
|
rack-test (~> 0.6.2)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
22
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
23
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
24
|
+
actionview (4.2.0)
|
25
|
+
activesupport (= 4.2.0)
|
26
|
+
builder (~> 3.1)
|
27
|
+
erubis (~> 2.7.0)
|
28
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
29
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
30
|
+
activejob (4.2.0)
|
31
|
+
activesupport (= 4.2.0)
|
32
|
+
globalid (>= 0.3.0)
|
33
|
+
activemodel (4.2.0)
|
34
|
+
activesupport (= 4.2.0)
|
35
|
+
builder (~> 3.1)
|
36
|
+
activerecord (4.2.0)
|
37
|
+
activemodel (= 4.2.0)
|
38
|
+
activesupport (= 4.2.0)
|
39
|
+
arel (~> 6.0)
|
40
|
+
activesupport (4.2.0)
|
41
|
+
i18n (~> 0.7)
|
42
|
+
json (~> 1.7, >= 1.7.7)
|
43
|
+
minitest (~> 5.1)
|
44
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
45
|
+
tzinfo (~> 1.1)
|
46
|
+
arel (6.0.3)
|
47
|
+
builder (3.2.2)
|
38
48
|
erubis (2.7.0)
|
39
|
-
eventmachine (1.0.
|
40
|
-
faraday (0.
|
41
|
-
multipart-post (
|
42
|
-
faraday_middleware (0.
|
43
|
-
faraday (>= 0.7.4, < 0.
|
44
|
-
|
45
|
-
|
49
|
+
eventmachine (1.0.8)
|
50
|
+
faraday (0.9.1)
|
51
|
+
multipart-post (>= 1.2, < 3)
|
52
|
+
faraday_middleware (0.10.0)
|
53
|
+
faraday (>= 0.7.4, < 0.10)
|
54
|
+
globalid (0.3.6)
|
55
|
+
activesupport (>= 4.1.0)
|
56
|
+
hashie (3.4.2)
|
46
57
|
http_parser.rb (0.5.3)
|
47
|
-
httparty (0.
|
48
|
-
|
58
|
+
httparty (0.13.5)
|
59
|
+
json (~> 1.8)
|
49
60
|
multi_xml (>= 0.5.2)
|
50
|
-
i18n (0.
|
51
|
-
json (1.
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
61
|
+
i18n (0.7.0)
|
62
|
+
json (1.8.3)
|
63
|
+
loofah (2.0.3)
|
64
|
+
nokogiri (>= 1.5.9)
|
65
|
+
mail (2.6.3)
|
66
|
+
mime-types (>= 1.16, < 3)
|
67
|
+
mime-types (2.6.1)
|
68
|
+
mini_portile (0.6.2)
|
69
|
+
minitest (5.8.0)
|
70
|
+
multi_json (1.11.2)
|
71
|
+
multi_xml (0.5.5)
|
72
|
+
multipart-post (2.0.0)
|
73
|
+
nokogiri (1.6.6.2)
|
74
|
+
mini_portile (~> 0.6.0)
|
75
|
+
rack (1.6.4)
|
76
|
+
rack-test (0.6.3)
|
63
77
|
rack (>= 1.0)
|
64
|
-
rails (4.
|
65
|
-
actionmailer (= 4.
|
66
|
-
actionpack (= 4.
|
67
|
-
|
68
|
-
|
78
|
+
rails (4.2.0)
|
79
|
+
actionmailer (= 4.2.0)
|
80
|
+
actionpack (= 4.2.0)
|
81
|
+
actionview (= 4.2.0)
|
82
|
+
activejob (= 4.2.0)
|
83
|
+
activemodel (= 4.2.0)
|
84
|
+
activerecord (= 4.2.0)
|
85
|
+
activesupport (= 4.2.0)
|
69
86
|
bundler (>= 1.3.0, < 2.0)
|
70
|
-
railties (= 4.
|
71
|
-
sprockets-rails
|
72
|
-
|
73
|
-
|
74
|
-
|
87
|
+
railties (= 4.2.0)
|
88
|
+
sprockets-rails
|
89
|
+
rails-deprecated_sanitizer (1.0.3)
|
90
|
+
activesupport (>= 4.2.0.alpha)
|
91
|
+
rails-dom-testing (1.0.7)
|
92
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
93
|
+
nokogiri (~> 1.6.0)
|
94
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
95
|
+
rails-html-sanitizer (1.0.2)
|
96
|
+
loofah (~> 2.0)
|
97
|
+
railties (4.2.0)
|
98
|
+
actionpack (= 4.2.0)
|
99
|
+
activesupport (= 4.2.0)
|
75
100
|
rake (>= 0.8.7)
|
76
101
|
thor (>= 0.18.1, < 2.0)
|
77
|
-
rake (10.
|
102
|
+
rake (10.4.2)
|
78
103
|
simple_oauth (0.1.9)
|
79
|
-
sprockets (
|
80
|
-
hike (~> 1.2)
|
81
|
-
multi_json (~> 1.0)
|
104
|
+
sprockets (3.3.3)
|
82
105
|
rack (~> 1.0)
|
83
|
-
|
84
|
-
sprockets-rails (2.0.0)
|
106
|
+
sprockets-rails (2.3.2)
|
85
107
|
actionpack (>= 3.0)
|
86
108
|
activesupport (>= 3.0)
|
87
|
-
sprockets (
|
88
|
-
sqlite3 (1.3.
|
89
|
-
thor (0.
|
90
|
-
thread_safe (0.
|
91
|
-
|
92
|
-
tilt (1.4.1)
|
93
|
-
tinder (1.9.2)
|
109
|
+
sprockets (>= 2.8, < 4.0)
|
110
|
+
sqlite3 (1.3.10)
|
111
|
+
thor (0.19.1)
|
112
|
+
thread_safe (0.3.5)
|
113
|
+
tinder (1.10.1)
|
94
114
|
eventmachine (~> 1.0)
|
95
|
-
faraday (~> 0.
|
115
|
+
faraday (~> 0.9.0)
|
96
116
|
faraday_middleware (~> 0.9)
|
97
|
-
hashie (
|
98
|
-
json (~> 1.
|
99
|
-
mime-types
|
100
|
-
multi_json (~> 1.
|
117
|
+
hashie (>= 1.0)
|
118
|
+
json (~> 1.8.0)
|
119
|
+
mime-types
|
120
|
+
multi_json (~> 1.7)
|
101
121
|
twitter-stream (~> 0.1)
|
102
|
-
treetop (1.4.14)
|
103
|
-
polyglot
|
104
|
-
polyglot (>= 0.3.1)
|
105
122
|
twitter-stream (0.1.16)
|
106
123
|
eventmachine (>= 0.12.8)
|
107
124
|
http_parser.rb (~> 0.5.1)
|
108
125
|
simple_oauth (~> 0.1.4)
|
109
|
-
tzinfo (
|
126
|
+
tzinfo (1.2.2)
|
127
|
+
thread_safe (~> 0.1)
|
110
128
|
|
111
129
|
PLATFORMS
|
112
130
|
ruby
|
@@ -114,6 +132,6 @@ PLATFORMS
|
|
114
132
|
DEPENDENCIES
|
115
133
|
exception_notification!
|
116
134
|
httparty
|
117
|
-
rails (= 4.
|
135
|
+
rails (= 4.2.0)
|
118
136
|
sqlite3
|
119
137
|
tinder
|
@@ -1,6 +1,7 @@
|
|
1
1
|
Dummy::Application.configure do
|
2
2
|
# Settings specified here will take precedence over those in config/application.rb
|
3
3
|
|
4
|
+
config.eager_load = false
|
4
5
|
# In the development environment your application's code is reloaded on
|
5
6
|
# every request. This slows down response time but is perfect for development
|
6
7
|
# since you don't have to restart the webserver when you make code changes.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
Dummy::Application.configure do
|
2
2
|
# Settings specified here will take precedence over those in config/application.rb
|
3
3
|
|
4
|
+
config.eager_load = true
|
4
5
|
# The production environment is meant for finished, "live" apps.
|
5
6
|
# Code is not reloaded between requests
|
6
7
|
config.cache_classes = true
|
@@ -1,6 +1,7 @@
|
|
1
1
|
Dummy::Application.configure do
|
2
2
|
# Settings specified here will take precedence over those in config/application.rb
|
3
3
|
|
4
|
+
config.eager_load = false
|
4
5
|
# The test environment is used exclusively to run your application's
|
5
6
|
# test suite. You never need to work with it otherwise. Remember that
|
6
7
|
# your test database is "scratch space" for the test suite and is wiped
|
@@ -32,4 +33,6 @@ Dummy::Application.configure do
|
|
32
33
|
|
33
34
|
# Print deprecation notices to the stderr
|
34
35
|
config.active_support.deprecation = :stderr
|
36
|
+
|
37
|
+
config.active_support.test_order = :random
|
35
38
|
end
|
@@ -5,3 +5,4 @@
|
|
5
5
|
# Make sure the secret is at least 30 characters and all random,
|
6
6
|
# no regular words or you'll be exposed to dictionary attacks.
|
7
7
|
Dummy::Application.config.secret_token = 'cfdf538142b0b383e722e8e7ea839b8ce6c3dc94a57856b343a2d13be66f5b690a55c991cec6e98ed60ea9b7e58265af23cb40cbadee02f13f1c45c2625f482b'
|
8
|
+
Dummy::Application.config.secret_key_base = 'my new secret'
|
@@ -16,6 +16,18 @@ class CampfireNotifierTest < ActiveSupport::TestCase
|
|
16
16
|
assert_includes notif[:message][:body], "/exception_notification/test/campfire_test.rb:45"
|
17
17
|
end
|
18
18
|
|
19
|
+
test "should send campfire notification without backtrace info if properly configured" do
|
20
|
+
ExceptionNotifier::CampfireNotifier.stubs(:new).returns(Object.new)
|
21
|
+
campfire = ExceptionNotifier::CampfireNotifier.new({:subdomain => 'test', :token => 'test_token', :room_name => 'test_room'})
|
22
|
+
campfire.stubs(:call).returns(fake_notification_without_backtrace)
|
23
|
+
notif = campfire.call(fake_exception_without_backtrace)
|
24
|
+
|
25
|
+
assert !notif[:message].empty?
|
26
|
+
assert_equal notif[:message][:type], 'PasteMessage'
|
27
|
+
assert_includes notif[:message][:body], "A new exception occurred:"
|
28
|
+
assert_includes notif[:message][:body], "my custom error"
|
29
|
+
end
|
30
|
+
|
19
31
|
test "should not send campfire notification if badly configured" do
|
20
32
|
wrong_params = {:subdomain => 'test', :token => 'bad_token', :room_name => 'test_room'}
|
21
33
|
Tinder::Campfire.stubs(:new).with('test', {:token => 'bad_token'}).returns(nil)
|
@@ -50,4 +62,15 @@ class CampfireNotifierTest < ActiveSupport::TestCase
|
|
50
62
|
e
|
51
63
|
end
|
52
64
|
end
|
65
|
+
|
66
|
+
def fake_notification_without_backtrace
|
67
|
+
{:message => {:type => 'PasteMessage',
|
68
|
+
:body => "A new exception occurred: 'my custom error'"
|
69
|
+
}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def fake_exception_without_backtrace
|
74
|
+
StandardError.new('my custom error')
|
75
|
+
end
|
53
76
|
end
|
@@ -149,4 +149,22 @@ class EmailNotifierTest < ActiveSupport::TestCase
|
|
149
149
|
assert_equal @ignored_exception.class.inspect, "ActiveRecord::RecordNotFound"
|
150
150
|
assert_nil @ignored_mail
|
151
151
|
end
|
152
|
+
|
153
|
+
if defined?(Rails) && ('4.2'...'5.0').cover?(Rails.version)
|
154
|
+
test "should be able to specify ActionMailer::MessageDelivery method" do
|
155
|
+
email_notifier = ExceptionNotifier::EmailNotifier.new(
|
156
|
+
:email_prefix => '[Dummy ERROR] ',
|
157
|
+
:sender_address => %{"Dummy Notifier" <dummynotifier@example.com>},
|
158
|
+
:exception_recipients => %w{dummyexceptions@example.com},
|
159
|
+
:deliver_with => :deliver_now
|
160
|
+
)
|
161
|
+
# In Rails 4.2, it gives deprecation warning like "`#deliver` is
|
162
|
+
# deprecated and will be removed in Rails 5." when "#deliver" is
|
163
|
+
# used. If methods like "#deliver_now" is used, it should not
|
164
|
+
# give any warnings.
|
165
|
+
assert_silent do
|
166
|
+
email_notifier.call(@exception)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
152
170
|
end
|
@@ -16,6 +16,19 @@ class HipchatNotifierTest < ActiveSupport::TestCase
|
|
16
16
|
hipchat.call(fake_exception)
|
17
17
|
end
|
18
18
|
|
19
|
+
test "should send hipchat notification without backtrace info if properly configured" do
|
20
|
+
options = {
|
21
|
+
:api_token => 'good_token',
|
22
|
+
:room_name => 'room_name',
|
23
|
+
:color => 'yellow',
|
24
|
+
}
|
25
|
+
|
26
|
+
HipChat::Room.any_instance.expects(:send).with('Exception', fake_body_without_backtrace, { :color => 'yellow' })
|
27
|
+
|
28
|
+
hipchat = ExceptionNotifier::HipchatNotifier.new(options)
|
29
|
+
hipchat.call(fake_exception_without_backtrace)
|
30
|
+
end
|
31
|
+
|
19
32
|
test "should allow custom from value if set" do
|
20
33
|
options = {
|
21
34
|
:api_token => 'good_token',
|
@@ -111,4 +124,12 @@ class HipchatNotifierTest < ActiveSupport::TestCase
|
|
111
124
|
e
|
112
125
|
end
|
113
126
|
end
|
127
|
+
|
128
|
+
def fake_body_without_backtrace
|
129
|
+
"A new exception occurred: '#{fake_exception_without_backtrace.message}'"
|
130
|
+
end
|
131
|
+
|
132
|
+
def fake_exception_without_backtrace
|
133
|
+
StandardError.new('my custom error')
|
134
|
+
end
|
114
135
|
end
|
@@ -16,6 +16,19 @@ class IrcNotifierTest < ActiveSupport::TestCase
|
|
16
16
|
irc.call(fake_exception)
|
17
17
|
end
|
18
18
|
|
19
|
+
test "should send irc notification without backtrace info if properly configured" do
|
20
|
+
options = {
|
21
|
+
:domain => 'irc.example.com'
|
22
|
+
}
|
23
|
+
|
24
|
+
CarrierPigeon.expects(:send).with(has_key(:uri)) do |v|
|
25
|
+
/my custom error/.match(v[:message])
|
26
|
+
end
|
27
|
+
|
28
|
+
irc = ExceptionNotifier::IrcNotifier.new(options)
|
29
|
+
irc.call(fake_exception_without_backtrace)
|
30
|
+
end
|
31
|
+
|
19
32
|
test "should properly construct URI from constituent parts" do
|
20
33
|
options = {
|
21
34
|
:nick => 'BadNewsBot',
|
@@ -82,4 +95,8 @@ class IrcNotifierTest < ActiveSupport::TestCase
|
|
82
95
|
e
|
83
96
|
end
|
84
97
|
end
|
98
|
+
|
99
|
+
def fake_exception_without_backtrace
|
100
|
+
StandardError.new('my custom error')
|
101
|
+
end
|
85
102
|
end
|
@@ -14,19 +14,30 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
14
14
|
webhook_url: "http://slack.webhook.url"
|
15
15
|
}
|
16
16
|
|
17
|
-
Slack::Notifier.any_instance.expects(:ping).with(
|
17
|
+
Slack::Notifier.any_instance.expects(:ping).with('', fake_notification)
|
18
18
|
|
19
19
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
20
20
|
slack_notifier.call(@exception)
|
21
21
|
end
|
22
22
|
|
23
|
+
test "should send a slack notification without backtrace info if properly configured" do
|
24
|
+
options = {
|
25
|
+
webhook_url: "http://slack.webhook.url"
|
26
|
+
}
|
27
|
+
|
28
|
+
Slack::Notifier.any_instance.expects(:ping).with('', fake_notification(fake_exception_without_backtrace))
|
29
|
+
|
30
|
+
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
31
|
+
slack_notifier.call(fake_exception_without_backtrace)
|
32
|
+
end
|
33
|
+
|
23
34
|
test "should send the notification to the specified channel" do
|
24
35
|
options = {
|
25
36
|
webhook_url: "http://slack.webhook.url",
|
26
37
|
channel: "channel"
|
27
38
|
}
|
28
39
|
|
29
|
-
Slack::Notifier.any_instance.expects(:ping).with(
|
40
|
+
Slack::Notifier.any_instance.expects(:ping).with('', fake_notification)
|
30
41
|
|
31
42
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
32
43
|
slack_notifier.call(@exception)
|
@@ -40,7 +51,7 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
40
51
|
username: "username"
|
41
52
|
}
|
42
53
|
|
43
|
-
Slack::Notifier.any_instance.expects(:ping).with(
|
54
|
+
Slack::Notifier.any_instance.expects(:ping).with('', fake_notification)
|
44
55
|
|
45
56
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
46
57
|
slack_notifier.call(@exception)
|
@@ -58,7 +69,7 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
58
69
|
}
|
59
70
|
}
|
60
71
|
|
61
|
-
Slack::Notifier.any_instance.expects(:ping).with(
|
72
|
+
Slack::Notifier.any_instance.expects(:ping).with('', options[:additional_parameters].merge(fake_notification) )
|
62
73
|
|
63
74
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
64
75
|
slack_notifier.call(@exception)
|
@@ -70,7 +81,7 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
70
81
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
71
82
|
|
72
83
|
assert_nil slack_notifier.notifier
|
73
|
-
assert_nil slack_notifier.call(
|
84
|
+
assert_nil slack_notifier.call(@exception)
|
74
85
|
end
|
75
86
|
|
76
87
|
test "should pass along environment data" do
|
@@ -92,9 +103,9 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
92
103
|
}
|
93
104
|
}
|
94
105
|
|
95
|
-
expected_data_string =
|
106
|
+
expected_data_string = "foo: bar\njohn: doe\nuser_id: 5"
|
96
107
|
|
97
|
-
Slack::Notifier.any_instance.expects(:ping).with(fake_notification(@exception, expected_data_string)
|
108
|
+
Slack::Notifier.any_instance.expects(:ping).with('', fake_notification(@exception, expected_data_string))
|
98
109
|
slack_notifier = ExceptionNotifier::SlackNotifier.new(options)
|
99
110
|
slack_notifier.call(@exception, notification_options)
|
100
111
|
end
|
@@ -109,9 +120,18 @@ class SlackNotifierTest < ActiveSupport::TestCase
|
|
109
120
|
end
|
110
121
|
end
|
111
122
|
|
123
|
+
def fake_exception_without_backtrace
|
124
|
+
StandardError.new('my custom error')
|
125
|
+
end
|
126
|
+
|
112
127
|
def fake_notification(exception=@exception, data_string=nil)
|
113
|
-
|
114
|
-
|
115
|
-
|
128
|
+
text = "*An exception occurred while doing*: ` <>`\n"
|
129
|
+
|
130
|
+
fields = [ { title: 'Exception', value: exception.message} ]
|
131
|
+
fields.push({ title: 'Backtrace', value: "```backtrace line 1\nbacktrace line 2```" }) if exception.backtrace
|
132
|
+
fields.push({ title: 'Data', value: "```#{data_string}```" }) if data_string
|
133
|
+
|
134
|
+
{ attachments: [ color: 'danger', text: text, fields: fields, mrkdwn_in: %w(text fields) ] }
|
116
135
|
end
|
136
|
+
|
117
137
|
end
|
data/test/test_helper.rb
CHANGED
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.1.
|
4
|
+
version: 4.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamis Buck
|
@@ -9,50 +9,50 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-12-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionmailer
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '4.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '4.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: activesupport
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: '4.0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: '4.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rails
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: '4.0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: '4.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: resque
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,14 +73,20 @@ dependencies:
|
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: 3.0.0
|
77
|
+
- - "<"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 3.2.2
|
77
80
|
type: :development
|
78
81
|
prerelease: false
|
79
82
|
version_requirements: !ruby/object:Gem::Requirement
|
80
83
|
requirements:
|
81
84
|
- - "~>"
|
82
85
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
86
|
+
version: 3.0.0
|
87
|
+
- - "<"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.2.2
|
84
90
|
- !ruby/object:Gem::Dependency
|
85
91
|
name: tinder
|
86
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,14 +149,14 @@ dependencies:
|
|
143
149
|
requirements:
|
144
150
|
- - "~>"
|
145
151
|
- !ruby/object:Gem::Version
|
146
|
-
version: 0.
|
152
|
+
version: 0.8.2
|
147
153
|
type: :development
|
148
154
|
prerelease: false
|
149
155
|
version_requirements: !ruby/object:Gem::Requirement
|
150
156
|
requirements:
|
151
157
|
- - "~>"
|
152
158
|
- !ruby/object:Gem::Version
|
153
|
-
version: 0.
|
159
|
+
version: 0.8.2
|
154
160
|
- !ruby/object:Gem::Dependency
|
155
161
|
name: appraisal
|
156
162
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,7 +223,6 @@ files:
|
|
217
223
|
- CHANGELOG.rdoc
|
218
224
|
- CONTRIBUTING.md
|
219
225
|
- Gemfile
|
220
|
-
- Gemfile.lock
|
221
226
|
- MIT-LICENSE
|
222
227
|
- README.md
|
223
228
|
- Rakefile
|
@@ -228,10 +233,9 @@ files:
|
|
228
233
|
- examples/sinatra/config.ru
|
229
234
|
- examples/sinatra/sinatra_app.rb
|
230
235
|
- exception_notification.gemspec
|
231
|
-
- gemfiles/rails3_1.gemfile
|
232
|
-
- gemfiles/rails3_2.gemfile
|
233
236
|
- gemfiles/rails4_0.gemfile
|
234
237
|
- gemfiles/rails4_1.gemfile
|
238
|
+
- gemfiles/rails4_2.gemfile
|
235
239
|
- lib/exception_notification.rb
|
236
240
|
- lib/exception_notification/rack.rb
|
237
241
|
- lib/exception_notification/rails.rb
|
@@ -341,7 +345,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
341
345
|
requirements:
|
342
346
|
- - ">="
|
343
347
|
- !ruby/object:Gem::Version
|
344
|
-
version:
|
348
|
+
version: '2.0'
|
345
349
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
346
350
|
requirements:
|
347
351
|
- - ">="
|
@@ -349,7 +353,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
349
353
|
version: 1.8.11
|
350
354
|
requirements: []
|
351
355
|
rubyforge_project:
|
352
|
-
rubygems_version: 2.
|
356
|
+
rubygems_version: 2.4.5
|
353
357
|
signing_key:
|
354
358
|
specification_version: 4
|
355
359
|
summary: Exception notification for Rails apps
|
data/Gemfile.lock
DELETED
@@ -1,174 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
exception_notification (4.1.1)
|
5
|
-
actionmailer (>= 3.0.4)
|
6
|
-
activesupport (>= 3.0.4)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
actionmailer (3.2.6)
|
12
|
-
actionpack (= 3.2.6)
|
13
|
-
mail (~> 2.4.4)
|
14
|
-
actionpack (3.2.6)
|
15
|
-
activemodel (= 3.2.6)
|
16
|
-
activesupport (= 3.2.6)
|
17
|
-
builder (~> 3.0.0)
|
18
|
-
erubis (~> 2.7.0)
|
19
|
-
journey (~> 1.0.1)
|
20
|
-
rack (~> 1.4.0)
|
21
|
-
rack-cache (~> 1.2)
|
22
|
-
rack-test (~> 0.6.1)
|
23
|
-
sprockets (~> 2.1.3)
|
24
|
-
activemodel (3.2.6)
|
25
|
-
activesupport (= 3.2.6)
|
26
|
-
builder (~> 3.0.0)
|
27
|
-
activerecord (3.2.6)
|
28
|
-
activemodel (= 3.2.6)
|
29
|
-
activesupport (= 3.2.6)
|
30
|
-
arel (~> 3.0.2)
|
31
|
-
tzinfo (~> 0.3.29)
|
32
|
-
activeresource (3.2.6)
|
33
|
-
activemodel (= 3.2.6)
|
34
|
-
activesupport (= 3.2.6)
|
35
|
-
activesupport (3.2.6)
|
36
|
-
i18n (~> 0.6)
|
37
|
-
multi_json (~> 1.0)
|
38
|
-
addressable (2.3.5)
|
39
|
-
appraisal (1.0.0)
|
40
|
-
bundler
|
41
|
-
rake
|
42
|
-
thor (>= 0.14.0)
|
43
|
-
arel (3.0.2)
|
44
|
-
builder (3.0.0)
|
45
|
-
carrier-pigeon (0.7.0)
|
46
|
-
addressable
|
47
|
-
celluloid (0.15.2)
|
48
|
-
timers (~> 1.1.0)
|
49
|
-
colorize (0.5.8)
|
50
|
-
connection_pool (2.0.0)
|
51
|
-
coveralls (0.6.5)
|
52
|
-
colorize
|
53
|
-
multi_json (~> 1.3)
|
54
|
-
rest-client
|
55
|
-
simplecov (>= 0.7)
|
56
|
-
thor
|
57
|
-
erubis (2.7.0)
|
58
|
-
eventmachine (1.0.3)
|
59
|
-
faraday (0.8.7)
|
60
|
-
multipart-post (~> 1.1)
|
61
|
-
faraday_middleware (0.9.0)
|
62
|
-
faraday (>= 0.7.4, < 0.9)
|
63
|
-
hashie (1.2.0)
|
64
|
-
hike (1.2.1)
|
65
|
-
hipchat (1.2.0)
|
66
|
-
httparty
|
67
|
-
http_parser.rb (0.5.3)
|
68
|
-
httparty (0.10.2)
|
69
|
-
multi_json (~> 1.0)
|
70
|
-
multi_xml (>= 0.5.2)
|
71
|
-
i18n (0.6.0)
|
72
|
-
journey (1.0.4)
|
73
|
-
json (1.8.1)
|
74
|
-
mail (2.4.4)
|
75
|
-
i18n (>= 0.4.0)
|
76
|
-
mime-types (~> 1.16)
|
77
|
-
treetop (~> 1.4.8)
|
78
|
-
metaclass (0.0.1)
|
79
|
-
mime-types (1.19)
|
80
|
-
mocha (0.13.3)
|
81
|
-
metaclass (~> 0.0.1)
|
82
|
-
multi_json (1.10.1)
|
83
|
-
multi_xml (0.5.5)
|
84
|
-
multipart-post (1.2.0)
|
85
|
-
polyglot (0.3.3)
|
86
|
-
rack (1.4.1)
|
87
|
-
rack-cache (1.2)
|
88
|
-
rack (>= 0.4)
|
89
|
-
rack-ssl (1.3.2)
|
90
|
-
rack
|
91
|
-
rack-test (0.6.1)
|
92
|
-
rack (>= 1.0)
|
93
|
-
rails (3.2.6)
|
94
|
-
actionmailer (= 3.2.6)
|
95
|
-
actionpack (= 3.2.6)
|
96
|
-
activerecord (= 3.2.6)
|
97
|
-
activeresource (= 3.2.6)
|
98
|
-
activesupport (= 3.2.6)
|
99
|
-
bundler (~> 1.0)
|
100
|
-
railties (= 3.2.6)
|
101
|
-
railties (3.2.6)
|
102
|
-
actionpack (= 3.2.6)
|
103
|
-
activesupport (= 3.2.6)
|
104
|
-
rack-ssl (~> 1.3.2)
|
105
|
-
rake (>= 0.8.7)
|
106
|
-
rdoc (~> 3.4)
|
107
|
-
thor (>= 0.14.6, < 2.0)
|
108
|
-
rake (0.9.2.2)
|
109
|
-
rdoc (3.12)
|
110
|
-
json (~> 1.4)
|
111
|
-
redis (3.0.7)
|
112
|
-
redis-namespace (1.4.1)
|
113
|
-
redis (~> 3.0.4)
|
114
|
-
resque (1.2.3)
|
115
|
-
redis
|
116
|
-
redis-namespace
|
117
|
-
rest-client (1.6.7)
|
118
|
-
mime-types (>= 1.16)
|
119
|
-
sidekiq (3.0.0)
|
120
|
-
celluloid (>= 0.15.2)
|
121
|
-
connection_pool (>= 2.0.0)
|
122
|
-
json
|
123
|
-
redis (>= 3.0.6)
|
124
|
-
redis-namespace (>= 1.3.1)
|
125
|
-
simple_oauth (0.1.9)
|
126
|
-
simplecov (0.7.1)
|
127
|
-
multi_json (~> 1.0)
|
128
|
-
simplecov-html (~> 0.7.1)
|
129
|
-
simplecov-html (0.7.1)
|
130
|
-
slack-notifier (1.0.0)
|
131
|
-
sprockets (2.1.3)
|
132
|
-
hike (~> 1.2)
|
133
|
-
rack (~> 1.0)
|
134
|
-
tilt (~> 1.1, != 1.3.0)
|
135
|
-
sqlite3 (1.3.6)
|
136
|
-
thor (0.15.4)
|
137
|
-
tilt (1.3.3)
|
138
|
-
timers (1.1.0)
|
139
|
-
tinder (1.9.1)
|
140
|
-
eventmachine (>= 0.12.0, < 2)
|
141
|
-
faraday (~> 0.8)
|
142
|
-
faraday_middleware (~> 0.8)
|
143
|
-
hashie (~> 1.0)
|
144
|
-
json (~> 1.6)
|
145
|
-
mime-types (~> 1.16)
|
146
|
-
multi_json (~> 1.0)
|
147
|
-
multipart-post (~> 1.1)
|
148
|
-
twitter-stream (~> 0.1)
|
149
|
-
treetop (1.4.10)
|
150
|
-
polyglot
|
151
|
-
polyglot (>= 0.3.1)
|
152
|
-
twitter-stream (0.1.16)
|
153
|
-
eventmachine (>= 0.12.8)
|
154
|
-
http_parser.rb (~> 0.5.1)
|
155
|
-
simple_oauth (~> 0.1.4)
|
156
|
-
tzinfo (0.3.33)
|
157
|
-
|
158
|
-
PLATFORMS
|
159
|
-
ruby
|
160
|
-
|
161
|
-
DEPENDENCIES
|
162
|
-
appraisal (~> 1.0.0)
|
163
|
-
carrier-pigeon (>= 0.7.0)
|
164
|
-
coveralls (~> 0.6.5)
|
165
|
-
exception_notification!
|
166
|
-
hipchat (>= 1.0.0)
|
167
|
-
httparty (~> 0.10.2)
|
168
|
-
mocha (>= 0.13.0)
|
169
|
-
rails (>= 3.0.4)
|
170
|
-
resque (~> 1.2.0)
|
171
|
-
sidekiq (~> 3.0)
|
172
|
-
slack-notifier (>= 1.0.0)
|
173
|
-
sqlite3 (>= 1.3.4)
|
174
|
-
tinder (~> 1.8)
|