openstax_rescue_from 2.1.0 → 3.0.0

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: f56fb3c7bf8ded13176b734d53f1fe4c8342abf0
4
- data.tar.gz: 67d6bad535a4d2dec26bbacc82f1fe7e9c2b6c55
3
+ metadata.gz: d2cc06b01e38970a2435d345c200406e28dcc557
4
+ data.tar.gz: d2645ad9a8e7178c0b4e6776058833ffaec26e71
5
5
  SHA512:
6
- metadata.gz: 9bb963a69ecd726c5971ff26c665b172e2aa859abb1d3790111036d96c70b9ac62730dc09881e5c1001c3ae8bfab80ffffc8daaa7cfc96b7fef51d4b8c364823
7
- data.tar.gz: a805ae5d1c5e446fbf3aa519b27127e2b3a9f94a14d2fca32d0ad0ff1ec1cee7ed588aa37c5ecd186a91fba63e3a2e0b04092ee986be178eb2fcfb5f94f0331d
6
+ metadata.gz: deca2133ec2fe2f98e217b8c3ae0cd5a9426b6fbc0bda854c643257db6c297415784cf6736b167f0c65177c42cf75f73c663a2e3abb494a01d1b0b2e419f60ce
7
+ data.tar.gz: 4bf1841f1c6e61c94933f2128cc1d2929786634a557e519c20b7fb7ad8fe46eb53d965c73e9b97a2e5df9a0355c04571b03119bb2b2ea41bfa21b1754de15207
data/README.md CHANGED
@@ -89,18 +89,82 @@ OpenStax::RescueFrom.configure do |config|
89
89
  Rails.application.config.consider_all_requests_local
90
90
 
91
91
  config.app_name = ENV['APP_NAME']
92
- config.app_env = ENV['APP_ENV']
92
+ # Can be a name, or a web/email address. See 'View helper' below
93
93
  config.contact_name = ENV['EXCEPTION_CONTACT_NAME']
94
- # can be a name, or a web/email address. See 'View helper' below
95
94
 
96
- config.notifier = ExceptionNotifier
95
+ # To use ExceptionNotifier add `gem 'exception_notification'` to your Gemfile and then:
96
+ # config.notify_proc = ->(proxy, controller) do
97
+ # ExceptionNotifier.notify_exception(
98
+ # proxy.exception,
99
+ # env: controller.request.env,
100
+ # data: {
101
+ # error_id: proxy.error_id,
102
+ # class: proxy.name,
103
+ # message: proxy.message,
104
+ # first_line_of_backtrace: proxy.first_backtrace_line,
105
+ # cause: proxy.cause,
106
+ # dns_name: resolve_ip(controller.request.remote_ip),
107
+ # extras: proxy.extras
108
+ # },
109
+ # sections: %w(data request session environment backtrace)
110
+ # )
111
+ # end
112
+ # config.notify_background_proc = ->(proxy) do
113
+ # ExceptionNotifier.notify_exception(
114
+ # proxy.exception,
115
+ # data: {
116
+ # error_id: proxy.error_id,
117
+ # class: proxy.name,
118
+ # message: proxy.message,
119
+ # first_line_of_backtrace: proxy.first_backtrace_line,
120
+ # cause: proxy.cause,
121
+ # extras: proxy.extras
122
+ # },
123
+ # sections: %w(data environment backtrace)
124
+ # )
125
+ # end
126
+ # config.notify_rack_middleware = ExceptionNotification::Rack
127
+ # config.notify_rack_middleware_options = {
128
+ # email: {
129
+ # email_prefix: "[#{config.app_name}] (#{ENV['APP_ENV']}) ",
130
+ # sender_address: ENV['EXCEPTION_SENDER'],
131
+ # exception_recipients: ENV['EXCEPTION_RECIPIENTS']
132
+ # }
133
+ # }
134
+ # URL generation errors are caused by bad routes, for example, and should not be ignored
135
+ # ExceptionNotifier.ignored_exceptions.delete("ActionController::UrlGenerationError")
136
+
137
+ # To use Raven (Sentry) add `gem 'sentry-raven', require: 'raven/base'` to your Gemfile and then:
138
+ # config.notify_proc = -> do |proxy, controller|
139
+ # extra = {
140
+ # error_id: proxy.error_id,
141
+ # class: proxy.name,
142
+ # message: proxy.message,
143
+ # first_line_of_backtrace: proxy.first_backtrace_line,
144
+ # cause: proxy.cause,
145
+ # dns_name: resolve_ip(controller.request.remote_ip)
146
+ # }
147
+ # extra.merge!(proxy.extras) if proxy.extras.is_a? Hash
148
+ #
149
+ # Raven.capture_exception(proxy.exception, extra: extra)
150
+ # end
151
+ # config.notify_background_proc = -> do |proxy|
152
+ # extra = {
153
+ # error_id: proxy.error_id,
154
+ # class: proxy.name,
155
+ # message: proxy.message,
156
+ # first_line_of_backtrace: proxy.first_backtrace_line,
157
+ # cause: proxy.cause
158
+ # }
159
+ # extra.merge!(proxy.extras) if proxy.extras.is_a? Hash
160
+ #
161
+ # Raven.capture_exception(proxy.exception, extra: extra)
162
+ # end
163
+ # require 'raven/integrations/rack'
164
+ # config.notify_rack_middleware = Raven::Rack
97
165
 
98
166
  config.html_error_template_path = 'errors/any'
99
167
  config.html_error_template_layout_name = 'application'
100
-
101
- config.email_prefix = "[#{app_name}] (#{app_env}) "
102
- config.sender_address = ENV['EXCEPTION_SENDER']
103
- config.exception_recipients = ENV['EXCEPTION_RECIPIENTS']
104
168
  end
105
169
 
106
170
  # Exceptions in controllers might be reraised or not depending on the settings above
@@ -108,9 +172,6 @@ ActionController::Base.use_openstax_exception_rescue
108
172
 
109
173
  # RescueFrom always reraises background exceptions so that the background job may properly fail
110
174
  ActiveJob::Base.use_openstax_exception_rescue
111
-
112
- # URL generation errors are caused by bad routes, for example, and should not be ignored
113
- ExceptionNotifier.ignored_exceptions.delete("ActionController::UrlGenerationError")
114
175
  ```
115
176
 
116
177
  ## Controller hook
@@ -8,17 +8,81 @@ OpenStax::RescueFrom.configure do |config|
8
8
  )
9
9
 
10
10
  # config.app_name = ENV['APP_NAME']
11
- # config.app_env = ENV['APP_ENV']
12
11
  # config.contact_name = ENV['EXCEPTION_CONTACT_NAME']
13
12
 
14
- # config.notifier = ExceptionNotifier
13
+ # To use ExceptionNotifier add `gem 'exception_notification'` to your Gemfile and then:
14
+ # config.notify_proc = ->(proxy, controller) do
15
+ # ExceptionNotifier.notify_exception(
16
+ # proxy.exception,
17
+ # env: controller.request.env,
18
+ # data: {
19
+ # error_id: proxy.error_id,
20
+ # class: proxy.name,
21
+ # message: proxy.message,
22
+ # first_line_of_backtrace: proxy.first_backtrace_line,
23
+ # cause: proxy.cause,
24
+ # dns_name: resolve_ip(controller.request.remote_ip),
25
+ # extras: proxy.extras
26
+ # },
27
+ # sections: %w(data request session environment backtrace)
28
+ # )
29
+ # end
30
+ # config.notify_background_proc = ->(proxy) do
31
+ # ExceptionNotifier.notify_exception(
32
+ # proxy.exception,
33
+ # data: {
34
+ # error_id: proxy.error_id,
35
+ # class: proxy.name,
36
+ # message: proxy.message,
37
+ # first_line_of_backtrace: proxy.first_backtrace_line,
38
+ # cause: proxy.cause,
39
+ # extras: proxy.extras
40
+ # },
41
+ # sections: %w(data environment backtrace)
42
+ # )
43
+ # end
44
+ # config.notify_rack_middleware = ExceptionNotification::Rack
45
+ # config.notify_rack_middleware_options = {
46
+ # email: {
47
+ # email_prefix: "[#{config.app_name}] (#{ENV['APP_ENV']}) ",
48
+ # sender_address: ENV['EXCEPTION_SENDER'],
49
+ # exception_recipients: ENV['EXCEPTION_RECIPIENTS']
50
+ # }
51
+ # }
52
+ # URL generation errors are caused by bad routes, for example, and should not be ignored
53
+ # ExceptionNotifier.ignored_exceptions.delete("ActionController::UrlGenerationError")
54
+
55
+ # To use Raven (Sentry) add `gem 'sentry-raven', require: 'raven/base'` to your Gemfile and then:
56
+ # config.notify_proc = -> do |proxy, controller|
57
+ # extra = {
58
+ # error_id: proxy.error_id,
59
+ # class: proxy.name,
60
+ # message: proxy.message,
61
+ # first_line_of_backtrace: proxy.first_backtrace_line,
62
+ # cause: proxy.cause,
63
+ # dns_name: resolve_ip(controller.request.remote_ip)
64
+ # }
65
+ # extra.merge!(proxy.extras) if proxy.extras.is_a? Hash
66
+ #
67
+ # Raven.capture_exception(proxy.exception, extra: extra)
68
+ # end
69
+ # config.notify_background_proc = -> do |proxy|
70
+ # extra = {
71
+ # error_id: proxy.error_id,
72
+ # class: proxy.name,
73
+ # message: proxy.message,
74
+ # first_line_of_backtrace: proxy.first_backtrace_line,
75
+ # cause: proxy.cause
76
+ # }
77
+ # extra.merge!(proxy.extras) if proxy.extras.is_a? Hash
78
+ #
79
+ # Raven.capture_exception(proxy.exception, extra: extra)
80
+ # end
81
+ # require 'raven/integrations/rack'
82
+ # config.notify_rack_middleware = Raven::Rack
15
83
 
16
84
  # config.html_error_template_path = 'errors/any'
17
85
  # config.html_error_template_layout_name = 'application'
18
-
19
- # config.email_prefix = "[#{app_name}] (#{app_env}) "
20
- # config.sender_address = ENV['EXCEPTION_SENDER']
21
- # config.exception_recipients = ENV['EXCEPTION_RECIPIENTS']
22
86
  end
23
87
 
24
88
  # Exceptions in controllers might be reraised or not depending on the settings above
@@ -27,9 +91,6 @@ ActionController::Base.use_openstax_exception_rescue
27
91
  # RescueFrom always reraises background exceptions so that the background job may properly fail
28
92
  ActiveJob::Base.use_openstax_exception_rescue
29
93
 
30
- # URL generation errors are caused by bad routes, for example, and should not be ignored
31
- ExceptionNotifier.ignored_exceptions.delete("ActionController::UrlGenerationError")
32
-
33
94
  # OpenStax::RescueFrom.translate_status_codes(
34
95
  # internal_server_error: "Sorry, #{OpenStax::RescueFrom.configuration.app_name} had some unexpected trouble with your request.",
35
96
  # not_found: 'We could not find the requested information.',
@@ -150,40 +150,16 @@ module OpenStax
150
150
  logger.record_system_error!('A background job exception occurred')
151
151
  end
152
152
 
153
- def send_notifying_exceptions(proxy, listener)
154
- if notifies_for?(proxy.name)
155
- configuration.notifier.notify_exception(
156
- proxy.exception,
157
- env: listener.request.env,
158
- data: {
159
- error_id: proxy.error_id,
160
- class: proxy.name,
161
- message: proxy.message,
162
- first_line_of_backtrace: proxy.first_backtrace_line,
163
- cause: proxy.cause,
164
- dns_name: resolve_ip(listener.request.remote_ip),
165
- extras: proxy.extras
166
- },
167
- sections: %w(data request session environment backtrace)
168
- )
169
- end
153
+ def send_notifying_exceptions(proxy, controller)
154
+ return if !configuration.notify_exceptions || !notifies_for?(proxy.name)
155
+
156
+ instance_exec(proxy, controller, &configuration.notify_proc)
170
157
  end
171
158
 
172
159
  def send_notifying_background_exceptions(proxy)
173
- if notifies_for?(proxy.name)
174
- configuration.notifier.notify_exception(
175
- proxy.exception,
176
- data: {
177
- error_id: proxy.error_id,
178
- class: proxy.name,
179
- message: proxy.message,
180
- first_line_of_backtrace: proxy.first_backtrace_line,
181
- cause: proxy.cause,
182
- extras: proxy.extras
183
- },
184
- sections: %w(data environment backtrace)
185
- )
186
- end
160
+ return if !configuration.notify_background_exceptions || !notifies_for?(proxy.name)
161
+
162
+ instance_exec(proxy, &configuration.notify_background_proc)
187
163
  end
188
164
 
189
165
  def finish_exception_rescue(proxy, listener)
@@ -1,12 +1,11 @@
1
- require 'exception_notification'
2
-
3
1
  module OpenStax
4
2
  module RescueFrom
5
3
  class Configuration
6
4
 
7
- attr_accessor :raise_exceptions, :raise_background_exceptions, :notifier,
8
- :html_error_template_path, :html_error_template_layout_name, :app_name,
9
- :app_env, :email_prefix, :sender_address, :exception_recipients
5
+ attr_accessor :raise_exceptions, :raise_background_exceptions, :notify_exceptions,
6
+ :notify_proc, :notify_background_exceptions, :notify_background_proc,
7
+ :notify_rack_middleware, :notify_rack_middleware_options,
8
+ :html_error_template_path, :html_error_template_layout_name, :app_name
10
9
 
11
10
  attr_writer :contact_name
12
11
 
@@ -21,25 +20,15 @@ module OpenStax
21
20
  )
22
21
 
23
22
  @app_name = ENV['APP_NAME']
24
- @app_env = ENV['APP_ENV']
25
23
  @contact_name = ENV['EXCEPTION_CONTACT_NAME']
26
24
 
27
- @notifier = ExceptionNotifier
25
+ @notify_exceptions = true
26
+ @notify_proc = ->(proxy, controller) {}
27
+ @notify_background_exceptions = true
28
+ @notify_background_proc = ->(proxy) {}
28
29
 
29
30
  @html_error_template_path = 'errors/any'
30
31
  @html_error_template_layout_name = 'application'
31
-
32
- @sender_address = ENV['EXCEPTION_SENDER']
33
- @exception_recipients = ENV['EXCEPTION_RECIPIENTS']
34
- end
35
-
36
- def email_prefix
37
- return(@email_prefix) if defined?(@email_prefix) && !@email_prefix.blank?
38
-
39
- name = app_name.blank? ? nil : "[#{app_name}]"
40
- env = app_env.blank? ? nil : "(#{app_env}) "
41
-
42
- @email_prefix = [name, env].compact.join(' ')
43
32
  end
44
33
  end
45
34
  end
@@ -9,12 +9,16 @@ module OpenStax
9
9
  end
10
10
  end
11
11
 
12
- initializer "openstax.rescue_from.use_exception_notification_middleware" do
13
- Rails.application.config.middleware.use ExceptionNotification::Rack, email: {
14
- email_prefix: RescueFrom.configuration.email_prefix,
15
- sender_address: RescueFrom.configuration.sender_address,
16
- exception_recipients: RescueFrom.configuration.exception_recipients
17
- }
12
+ initializer "openstax.rescue_from.use_rack_middleware" do
13
+ middleware = OpenStax::RescueFrom.configuration.notify_rack_middleware
14
+ next if middleware.blank?
15
+
16
+ options = OpenStax::RescueFrom.configuration.notify_rack_middleware_options
17
+ if options.nil?
18
+ Rails.application.config.middleware.insert_before 0, middleware
19
+ else
20
+ Rails.application.config.middleware.insert_before 0, middleware, options
21
+ end
18
22
  end
19
23
 
20
24
  initializer "openstax.rescue_from.pre_register_exceptions" do
@@ -1,5 +1,5 @@
1
1
  module OpenStax
2
2
  module RescueFrom
3
- VERSION = "2.1.0"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -21,11 +21,11 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 2.0'
22
22
 
23
23
  spec.add_dependency "rails", '>= 3.1', '< 6.0'
24
- spec.add_dependency "exception_notification", '>= 4.1', '< 5.0'
25
24
 
26
25
  spec.add_development_dependency "bundler"
27
26
  spec.add_development_dependency "pg"
28
27
  spec.add_development_dependency "rspec-rails"
29
28
  spec.add_development_dependency "rails-controller-testing"
30
29
  spec.add_development_dependency "database_cleaner"
30
+ spec.add_development_dependency "exception_notification"
31
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstax_rescue_from
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Slavinsky
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-13 00:00:00.000000000 Z
12
+ date: 2018-04-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -32,27 +32,21 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: '6.0'
34
34
  - !ruby/object:Gem::Dependency
35
- name: exception_notification
35
+ name: bundler
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '4.1'
41
- - - "<"
42
- - !ruby/object:Gem::Version
43
- version: '5.0'
44
- type: :runtime
40
+ version: '0'
41
+ type: :development
45
42
  prerelease: false
46
43
  version_requirements: !ruby/object:Gem::Requirement
47
44
  requirements:
48
45
  - - ">="
49
46
  - !ruby/object:Gem::Version
50
- version: '4.1'
51
- - - "<"
52
- - !ruby/object:Gem::Version
53
- version: '5.0'
47
+ version: '0'
54
48
  - !ruby/object:Gem::Dependency
55
- name: bundler
49
+ name: pg
56
50
  requirement: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - ">="
@@ -66,7 +60,7 @@ dependencies:
66
60
  - !ruby/object:Gem::Version
67
61
  version: '0'
68
62
  - !ruby/object:Gem::Dependency
69
- name: pg
63
+ name: rspec-rails
70
64
  requirement: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - ">="
@@ -80,7 +74,7 @@ dependencies:
80
74
  - !ruby/object:Gem::Version
81
75
  version: '0'
82
76
  - !ruby/object:Gem::Dependency
83
- name: rspec-rails
77
+ name: rails-controller-testing
84
78
  requirement: !ruby/object:Gem::Requirement
85
79
  requirements:
86
80
  - - ">="
@@ -94,7 +88,7 @@ dependencies:
94
88
  - !ruby/object:Gem::Version
95
89
  version: '0'
96
90
  - !ruby/object:Gem::Dependency
97
- name: rails-controller-testing
91
+ name: database_cleaner
98
92
  requirement: !ruby/object:Gem::Requirement
99
93
  requirements:
100
94
  - - ">="
@@ -108,7 +102,7 @@ dependencies:
108
102
  - !ruby/object:Gem::Version
109
103
  version: '0'
110
104
  - !ruby/object:Gem::Dependency
111
- name: database_cleaner
105
+ name: exception_notification
112
106
  requirement: !ruby/object:Gem::Requirement
113
107
  requirements:
114
108
  - - ">="