exception_handler 0.8.0.0 → 0.8.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +1 -0
- data/.rspec +3 -3
- data/.travis.yml +6 -0
- data/README.md +327 -326
- data/app/views/layouts/exception.html.erb +1 -1
- data/app/views/layouts/mailer.html.erb +5 -5
- data/app/views/layouts/mailer.text.erb +1 -1
- data/config/locales/exception_handler.en.yml +1 -1
- data/config/routes.rb +42 -42
- data/exception_handler.gemspec +1 -0
- data/lib/exception_handler/version.rb +1 -1
- data/spec/controllers/controller_spec.rb +107 -107
- data/spec/dummy/Rakefile +6 -6
- data/spec/dummy/app/assets/config/manifest.js +3 -3
- data/spec/dummy/app/assets/javascripts/application.js +15 -15
- data/spec/dummy/app/assets/javascripts/cable.js +13 -13
- data/spec/dummy/app/assets/stylesheets/application.css +15 -15
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -4
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -4
- data/spec/dummy/app/controllers/application_controller.rb +2 -2
- data/spec/dummy/app/helpers/application_helper.rb +2 -2
- data/spec/dummy/app/jobs/application_job.rb +2 -2
- data/spec/dummy/app/mailers/application_mailer.rb +4 -4
- data/spec/dummy/app/models/application_record.rb +3 -3
- data/spec/dummy/app/views/layouts/application.html.erb +15 -15
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -13
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -1
- data/spec/dummy/bin/bundle +3 -3
- data/spec/dummy/bin/rails +4 -4
- data/spec/dummy/bin/rake +4 -4
- data/spec/dummy/bin/setup +36 -36
- data/spec/dummy/bin/update +31 -31
- data/spec/dummy/bin/yarn +11 -11
- data/spec/dummy/config.ru +5 -5
- data/spec/dummy/config/application.rb +18 -18
- data/spec/dummy/config/boot.rb +5 -5
- data/spec/dummy/config/cable.yml +10 -10
- data/spec/dummy/config/database.yml +25 -25
- data/spec/dummy/config/environment.rb +5 -5
- data/spec/dummy/config/environments/development.rb +61 -61
- data/spec/dummy/config/environments/production.rb +94 -94
- data/spec/dummy/config/environments/test.rb +46 -46
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -8
- data/spec/dummy/config/initializers/assets.rb +14 -14
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -7
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -25
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -5
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -4
- data/spec/dummy/config/initializers/inflections.rb +16 -16
- data/spec/dummy/config/initializers/mime_types.rb +4 -4
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -14
- data/spec/dummy/config/locales/en.yml +33 -33
- data/spec/dummy/config/puma.rb +34 -34
- data/spec/dummy/config/routes.rb +3 -3
- data/spec/dummy/config/storage.yml +34 -34
- data/spec/dummy/package.json +5 -5
- data/spec/dummy/public/404.html +67 -67
- data/spec/dummy/public/422.html +67 -67
- data/spec/dummy/public/500.html +66 -66
- data/spec/dummy/spec/rails_helper.rb +57 -57
- data/spec/features/asset_spec.rb +61 -61
- data/spec/features/config_spec.rb +51 -51
- data/spec/features/engine_spec.rb +180 -180
- data/spec/mailers/mailer_spec.rb +26 -0
- data/spec/models/model_spec.rb +26 -0
- data/spec/routing/routing_spec.rb +85 -85
- data/spec/spec_helper.rb +101 -93
- data/spec/views/views_spec.rb +29 -29
- metadata +22 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba54148f25815a5f2df409c4261ade99ffa4f2f96c4a0ae354149ba539bffac3
|
4
|
+
data.tar.gz: ee20ae2ed6c8be539b8ffb0388da0b2680aaaaf5aa793a0df49fe38e5230ea2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5a14eeb3beb2ffab2fe1289acd377423242d980294cf0872e85ba86aeb7165027de92b2057d034a1730ff4e38fb716b38052c81d1502143a658367e1a1ae23c
|
7
|
+
data.tar.gz: '0890e4e17d5bb8c94cefb0dc24adb8d40f7fc49c8c9cb7f4e6904221e61750dd23f886ce1af3141316f5dc14152e8ae6cabc1bd3285a90a6e5c3646d8fa7783d'
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
--format progress
|
2
|
-
--color
|
3
|
-
--require spec_helper
|
1
|
+
--format progress
|
2
|
+
--color
|
3
|
+
--require spec_helper
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,179 +1,106 @@
|
|
1
|
-
<p align="center">
|
2
|
-
<strong>💣 README Currently Being Updated 💣 - Gem Incorporated into 💀 <a href="https://www.vpsdeploy.com" title="Custom VPS Deployment For Rails"><u>VPSDeploy.com - VPS Deployment Solution</u></a> 💀 -<br/><code>Custom Programming Tutorials</code> + <code>Deployment Infrastructure</code> For Cloud VPS Providers...</strong>
|
3
|
-
</p>
|
4
|
-
<hr />
|
5
|
-
|
6
1
|
![Exception Handler](readme/title.jpg "Exception Handler Logo")
|
7
2
|
|
8
|
-
|
9
|
-
|
10
|
-
</
|
11
|
-
|
12
|
-
<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
<strong>➡️ <code>ExceptionHandler</code> is a <a href="https://medium.com/ruby-on-rails-web-application-development/custom-400-500-error-pages-in-ruby-on-rails-exception-handler-3a04975e4677"><code>Custom Error Pages Gem</code></a> For Ruby on Rails ⬅️</strong> - With <strong>160,000+ downloads</strong>, it is one of the most <br /> <strong>popular</strong>, <strong>robust</strong> & <strong>extensible</strong> exceptions management gems for <strong><a href="https://rubygems.org/gems/exception_handler">Ruby on Rails 4 & 5+</a></strong>...
|
18
|
-
</p>
|
3
|
+
<!-- Intro -->
|
4
|
+
<div id="intro">
|
5
|
+
<h4 align="center"><code><strong><a href="https://www.github.com/richpeck/exception_handler">ExceptionHandler</a></strong></code> is presently the MOST POPULAR exceptions gem for <a href="https://medium.com/ruby-on-rails-web-application-development/custom-400-500-error-pages-in-ruby-on-rails-exception-handler-3a04975e4677">CUSTOM Rails error pages</a>.</h4>
|
6
|
+
<p align="center">
|
7
|
+
With <strong>290,000+ downloads</strong>, it is the *only* gem to provide <strong>custom 400/500 exception pages for Rails 5 & 6</strong>
|
8
|
+
</p>
|
9
|
+
<p><img src="./readme/dev.png" /></p>
|
10
|
+
<h4 align="center">Current <a href="https://github.com/richpeck/exception_handler/releases"><u>0.8.0.0</u></a> (August 2018)</h4>
|
11
|
+
</div>
|
19
12
|
|
13
|
+
<!-- Badges -->
|
20
14
|
<p align="center">
|
21
15
|
<a href="http://badge.fury.io/rb/exception_handler"><img src="https://badge.fury.io/rb/exception_handler.svg" align="absmiddle"></a>
|
22
16
|
<a href="http://rubygems.org/gems/exception_handler"><img src="http://ruby-gem-downloads-badge.herokuapp.com/exception_handler/0.5.1?type=total&color=brightgreen" align="absmiddle" /></a>
|
23
17
|
<a href="https://codeclimate.com/github/richpeck/exception_handler"><img src="https://codeclimate.com/github/richpeck/exception_handler/badges/gpa.svg" align="absmiddle"/></a>
|
24
|
-
<a href="https://gemnasium.com/richpeck/exception_handler"><img src="https://gemnasium.com/richpeck/exception_handler.svg" align="absmiddle"></a>
|
25
18
|
<a href='https://coveralls.io/github/richpeck/exception_handler?branch=master'><img src='https://coveralls.io/repos/github/richpeck/exception_handler/badge.svg?branch=master' alt='Coverage Status' align="absmiddle" /></a>
|
26
19
|
<a href="https://travis-ci.org/richpeck/exception_handler"><img src="https://travis-ci.org/richpeck/exception_handler.svg?branch=master" align="absmiddle"></a>
|
27
20
|
</p>
|
28
21
|
|
29
|
-
<p align="center">
|
30
|
-
<img src="readme/branded/1.jpg" width="425" title="Fully Branded Error Pages" />
|
31
|
-
<img src="readme/branded/2.jpg" width="425" title="Fully Branded Error Pages" />
|
32
|
-
</p>
|
33
|
-
|
34
|
-
<p align="center">
|
35
|
-
<b>Version <a href="https://github.com/richpeck/exception_handler/releases/tag/v0.8.0.0">🏹 <code>0.8.0.0</code> 🏹</a> has now introduced a number of <b>⭐️ KEY UPGRADES ⭐️</b> including...</b> <br /> 🚧 <strong><A href="#config">New Config Settings</a></strong> 🚧 ▪️ <strong>💻 <strong><A href="#views">Custom Views Options</a></strong> 💻</strong> ▪️ <strong>💬 <a href="#locales"><code>4xx</code>/<code>5xx</code> Locales</a> 💬</strong>...
|
36
|
-
</p>
|
37
|
-
|
38
|
-
<p align="center">
|
39
|
-
<img src="readme/branded/1.jpg" width="425" title="Fully Branded Error Pages" /> <img src="readme/branded/2.jpg" width="425" title="Fully Branded Error Pages" />
|
40
|
-
<img src="readme/branded/3.jpg" width="425" title="Fully Branded Error Pages" /> <img src="readme/branded/4.jpg" width="425" title="Fully Branded Error Pages" />
|
41
|
-
</p>
|
42
|
-
|
43
|
-
<p align="center">
|
44
|
-
<strong>
|
45
|
-
⚠️ Tutorial shows how it works ⚠️
|
46
|
-
<br /><a href="mailto: rpeck@frontlineutilities.co.uk" title="rpeck@fl.co.uk">✉️ Support Email ✉️</a>
|
47
|
-
</strong>
|
48
|
-
</p>
|
49
|
-
|
50
22
|
<!-- Navigation -->
|
51
23
|
<div id="navigation">
|
52
24
|
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
53
25
|
<p align="center">
|
54
|
-
<
|
26
|
+
<strong>
|
27
|
+
📝 <a href="#introduction">Introduction</a> -
|
28
|
+
⚠️ <a href="#installation">Installation</a> -
|
29
|
+
🔧 <a href="#configuration">Configuration</a> -
|
30
|
+
☎️ <a href="#support">Support</a> -
|
31
|
+
⭐ <a href="#changelog">Changelog</a>
|
32
|
+
</strong>
|
55
33
|
</p>
|
56
34
|
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
57
35
|
</div>
|
58
36
|
|
59
|
-
<!-- Version -->
|
60
|
-
<p align="center">
|
61
|
-
<img src="./readme/version.jpg" />
|
62
|
-
</p>
|
63
|
-
|
64
|
-
<p align="center">
|
65
|
-
<img src="readme/check.png" height="22" title="Fully Responsive" align="absmiddle" /> <strong>Responsive</strong>
|
66
|
-
<img src="readme/check.png" height="22" title="Branded Error Pages" align="absmiddle" /> <strong>Branded Error Pages</strong>
|
67
|
-
<img src="readme/check.png" height="22" title="Middleware Exception Handling" align="absmiddle" /> <strong>Middleware Exception Handling</strong>
|
68
|
-
<img src="readme/check.png" height="22" title="Keep Users Informed" align="absmiddle" /> <strong>Fully Customizable</strong>
|
69
|
-
</p>
|
70
|
-
|
71
|
-
<p align="center">
|
72
|
-
<img src="readme/branded/1.jpg" width="425" title="Fully Branded Error Pages" /> <img src="readme/branded/2.jpg" width="425" title="Fully Branded Error Pages" />
|
73
|
-
<img src="readme/branded/3.jpg" width="425" title="Fully Branded Error Pages" /> <img src="readme/branded/4.jpg" width="425" title="Fully Branded Error Pages" />
|
74
|
-
</p>
|
75
|
-
|
76
37
|
<!-- Introduction -->
|
77
38
|
<div id="introduction">
|
78
|
-
<
|
79
|
-
<p>
|
80
|
-
<h3>⌚️ Introduction ⌚️</h3>
|
81
|
-
</p>
|
82
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
39
|
+
<h4>📝 Introduction</h4>
|
83
40
|
</div>
|
84
41
|
|
85
|
-
|
42
|
+
---
|
43
|
+
<div>
|
44
|
+
<p><b><code>ExceptionHandler</b></code> replaces Rails' default error pages with <strong>dynamic views</strong>.</p>
|
45
|
+
<p>It does this by injecting <a href="https://guides.rubyonrails.org/configuring.html#rails-general-configuration"><code>config.exceptions_app</code></a> with our controller - allowing us to populate erroneous responses with our own HTML. To understand how this works, you need to appreciate how Rails handles errors:</p>
|
46
|
+
<p align="center"><a href="https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L44"><img src="readme/show_exceptions.png" width="550"></a></p>
|
47
|
+
<p>Rails uses <a href="https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/show_exceptions.rb"><code><strong>ActionDispatch::ShowExceptions</strong></code></a> (above) to generate error responses.</p>
|
48
|
+
<p>Because web browsers (Rails is a web framework) can only interpret <a href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Response_message">HTTP responses</a>, Ruby/Rails exceptions have to be translated into something a browser can read. This is done by calling the above middleware.</p>
|
49
|
+
<p>--</p>
|
50
|
+
<p>As highlighted, an HTTP response is built independent of the Rails stack. This includes assigning an HTTP status code and HTML response body. It's the response body which <code><strong>ExceptionHandler</strong></code> is designed to override.</p>
|
51
|
+
</div>
|
86
52
|
|
53
|
+
<!-- Sep -->
|
87
54
|
<p align="center">
|
88
|
-
<img src="
|
55
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
89
56
|
</p>
|
90
57
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
The beauty lies in the *simplicity* through which this is achieved → rather than having many different elements, its SOLE focus is to provide different HTML responses via differing *layouts*. `ExceptionHandler` does this within the scope of [`ActionView`](http://guides.rubyonrails.org/action_view_overview.html), allowing for the use of `views`, `helpers` and `data` from the database.
|
96
|
-
|
97
|
-
Gem works 100% out of the box in `production`, and has the option to be called in [`dev`](#dev) if necessary.
|
98
|
-
|
99
|
-
--
|
100
|
-
|
101
|
-
### 📑 HTTP
|
102
|
-
|
103
|
-
The most important thing to understand is that *it doesn't matter* which errors Ruby/Rails raises - they *all* need to be wrapped in a [valid HTTP response](https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html). Due to the nature of HTTP, you only need to facilitate responses for [`4xx`](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors) - [`5xx`](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_errors).
|
104
|
-
|
105
|
-
This means that all you're really doing is taking "Ruby" errors and giving them an appropriate [HTTP status code](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) & [message body](https://en.wikipedia.org/wiki/HTTP_message_body) (HTML). Rails handles the process for you - the *only* thing we need to worry about is how the HTML is generated.
|
106
|
-
|
107
|
-
What confuses most is the way in which Rails does this. The process is handled by [`ActionDispatch::ShowExceptions`](https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L44) - which builds a new response out of the one passed to it by the exception generator. Through this process, it calls whichever class is present in [`exceptions_app`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration)...
|
108
|
-
|
109
|
-
# show_exceptions.rb
|
110
|
-
def render_exception(request, exception)
|
111
|
-
backtrace_cleaner = request.get_header "action_dispatch.backtrace_cleaner"
|
112
|
-
wrapper = ExceptionWrapper.new(backtrace_cleaner, exception)
|
113
|
-
status = wrapper.status_code
|
114
|
-
request.set_header "action_dispatch.exception", wrapper.exception
|
115
|
-
request.set_header "action_dispatch.original_path", request.path_info
|
116
|
-
request.path_info = "/#{status}"
|
117
|
-
response = @exceptions_app.call(request.env) #-> this is where the HTML is generated
|
118
|
-
response[1]["X-Cascade"] == "pass" ? pass_response(status) : response
|
119
|
-
rescue Exception => failsafe_error
|
120
|
-
$stderr.puts "Error during failsafe response: #{failsafe_error}\n #{failsafe_error.backtrace * "\n "}"
|
121
|
-
FAILSAFE_RESPONSE
|
122
|
-
end
|
123
|
-
|
124
|
-
In other words, what a user *sees* has very little to do with the fact Rails experienced an error. `ExceptionHandler` doesn't change this behaviour - it simply adds our own controller/views setup to provide the HTML...
|
125
|
-
|
126
|
-
<p align="center">
|
127
|
-
<img src="./readme/middleware.jpg" />
|
128
|
-
</p>
|
58
|
+
<!-- Installation -->
|
59
|
+
<div id="installation">
|
60
|
+
<h4>⚠️ Installation</h4>
|
61
|
+
</div>
|
129
62
|
|
130
|
-
|
63
|
+
---
|
131
64
|
|
132
|
-
|
65
|
+
<div>
|
66
|
+
<p>
|
67
|
+
💎 <u><a href="https://rubygems.org/gems/exception_handler">RubyGems</a></u> (Code) |
|
68
|
+
💻 <u><a href="https://medium.com/ruby-on-rails-web-application-development/custom-400-500-error-pages-in-ruby-on-rails-exception-handler-3a04975e4677">Medium</a></u> (Tutorial)
|
69
|
+
</p>
|
70
|
+
<pre><code># Gemfile
|
71
|
+
gem 'exception_handler', '~> 0.8.0.0'</code></pre>
|
72
|
+
<p>Because <b>ExceptionHandler</b> is built around a Rails engine, there is <b>nothing</b> to be done to get it working in production. Installing the Gem <b><i>should</i></b> translate your production 4xx/5xx error pages into dynamic views.</p>
|
73
|
+
<p>Environments <u>other</u> than production (development/staging) required the <a href="#dev"><code>dev</code></a> variable to be <code>true</code>.</p>
|
74
|
+
</div>
|
133
75
|
|
76
|
+
<!-- Sep -->
|
134
77
|
<p align="center">
|
135
|
-
<img src="
|
78
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
136
79
|
</p>
|
137
80
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
**`ExceptionHandler`** provides Rails with the ability to serve ***dynamic*** exception pages, built with **your *own*** layouts/views. By overriding the <a href="http://guides.rubyonrails.org/configuring.html#rails-general-configuration">`exceptions_app`</a> hook, it provides a custom `controller`, `model` and `views` to display custom error pages.
|
81
|
+
<!-- configuration -->
|
82
|
+
<div id="configuration">
|
83
|
+
<h4>🔧 Configuration</h4>
|
84
|
+
</div>
|
143
85
|
|
144
|
-
|
86
|
+
---
|
145
87
|
|
146
88
|
<p align="center">
|
147
|
-
|
148
|
-
<img src="readme/branded/3.jpg" width="425" title="Fully Branded Error Pages" /> <img src="readme/branded/4.jpg" width="425" title="Fully Branded Error Pages" />
|
89
|
+
<g-emoji class="g-emoji" alias="file_folder" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4c1.png">📁</g-emoji> <a href="#config">Config</a> <g-emoji class="g-emoji" alias="computer" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png">💻</g-emoji> <a href="#dev" title="Dev Mode">Dev</a> <g-emoji class="g-emoji" alias="floppy_disk" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4be.png">💾</g-emoji> <a href="#db">Database</a> <g-emoji class="g-emoji" alias="email" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/2709.png">✉️</g-emoji> <a href="#email">Email</a> <g-emoji class="g-emoji" alias="eyeglasses" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f453.png">👓</g-emoji> <a href="#views">Views</a> <g-emoji class="g-emoji" alias="speech_balloon" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4ac.png">💬</g-emoji> <a href="#locales">Locales</a> <g-emoji class="g-emoji" alias="clipboard" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4cb.png">📋</g-emoji> <a href="#layouts">Layouts</a> <g-emoji class="g-emoji" alias="no_entry" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/26d4.png">⛔️</g-emoji> <a href="#custom-exceptions">Custom Exceptions</a>
|
149
90
|
</p>
|
150
91
|
|
151
|
-
|
152
|
-
<div id="setup">
|
153
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
154
|
-
<h3 align="center">🔨 Setup 🔨</h3>
|
155
|
-
<p align="center">-- <br />The <i>most</i> important thing to appreciate about the gem is that it's designed to be <b><em>completely</em> unobtrusive</b>.</p>
|
156
|
-
<p align="center">This means that if you're looking at using it, </p>
|
157
|
-
<p align="center"><img src="./readme/dev.png" /></p>
|
158
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
159
|
-
<p align="center">
|
160
|
-
<a href="#config"><img src="readme/titles/icons/config.png" alt="Configuration Options" align="absmiddle" height="24" /> Config</a> <a href="#dev" title="Dev Mode"><img src="readme/titles/icons/dev.png" alt="Dev" align="absmiddle" height="24" /> Dev</a> <a href="#database"><img src="readme/titles/icons/database.png" alt="Database" align="absmiddle" height="24" /> Database</a> <a href="#email"><img src="readme/titles/icons/email.png" alt="Email" align="absmiddle" height="24" /> Email</a> <a href="#views"><img src="readme/titles/icons/views.png" alt="Views" align="absmiddle" height="24" /> Views</a> <a href="#locales"><img src="readme/titles/icons/locales.png" alt="Locales" align="absmiddle" height="20" /> Locales</a> <a href="#custom-exceptions"><img src="readme/titles/icons/custom.png" alt="Custom Exceptions" align="absmiddle" height="18" /> Custom Exceptions</a> <a href="#generators"><img src="readme/titles/icons/generators.png" alt="Generators" align="absmiddle" height="24" /> Generators</a>
|
161
|
-
</p>
|
162
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
163
|
-
</div>
|
92
|
+
---
|
164
93
|
|
165
94
|
<!-- Config -->
|
166
|
-
<
|
167
|
-
<h4>🚧 Config 🚧</h4>
|
168
|
-
</p>
|
95
|
+
<a name="config"></a>
|
169
96
|
|
170
|
-
|
97
|
+
The **ONLY** thing you need to manage `ExceptionHandler` is its [`config`](https://github.com/richpeck/exception_handler/blob/master/lib/exception_handler/config.rb) settings.
|
171
98
|
|
172
|
-
Whilst the gem **works out of the box** (without any configuration), if you want to manage the [`layouts`](#layouts), [`email`](#email), [`dev`](#dev) or the [`database`](#db), you'll need to set the appropriate values in the config hash
|
99
|
+
Whilst the gem **works out of the box** (without any configuration), if you want to manage the [`layouts`](#layouts), [`email`](#email), [`dev`](#dev) or the [`database`](#db), you'll need to set the appropriate values in the config hash.
|
173
100
|
|
174
|
-
This
|
101
|
+
This is done in `config/application.rb` or `config/environments/[env].rb` ↴
|
175
102
|
|
176
|
-
```
|
103
|
+
```rb
|
177
104
|
# config/application.rb
|
178
105
|
|
179
106
|
module YourApp
|
@@ -189,6 +116,11 @@ module YourApp
|
|
189
116
|
db: nil, # allocates a "table name" into which exceptions are saved (defaults to nil)
|
190
117
|
email: nil, # sends exception emails to a listed email (string // "you@email.com")
|
191
118
|
|
119
|
+
# Custom Exceptions
|
120
|
+
custom_exceptions: {
|
121
|
+
#'ActionController::RoutingError' => :not_found # => example
|
122
|
+
},
|
123
|
+
|
192
124
|
# On default 5xx error page, social media links included
|
193
125
|
social: {
|
194
126
|
facebook: nil, # Facebook page name
|
@@ -238,7 +170,6 @@ module YourApp
|
|
238
170
|
|
239
171
|
}
|
240
172
|
}
|
241
|
-
|
242
173
|
end
|
243
174
|
end
|
244
175
|
```
|
@@ -247,31 +178,36 @@ For a full retinue of the available options, you'll be best looking at the [`con
|
|
247
178
|
|
248
179
|
--
|
249
180
|
|
250
|
-
If using an [`engine`](http://guides.rubyonrails.org/engines.html), **DON'T need an `initializer`**:
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
181
|
+
If using an [`engine`](http://guides.rubyonrails.org/engines.html), you **DON'T need an `initializer`**:
|
182
|
+
```rb
|
183
|
+
# lib/engine.rb
|
184
|
+
module YourModule
|
185
|
+
class Engine < Rails::Engine
|
255
186
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
187
|
+
# => ExceptionHandler
|
188
|
+
# => Works in and out of an initializer
|
189
|
+
config.exception_handler = {
|
190
|
+
dev: nil, # => this will not load the gem in development
|
191
|
+
db: true # => this will use the :errors table to store exceptions
|
192
|
+
}
|
193
|
+
end
|
194
|
+
end
|
195
|
+
```
|
263
196
|
|
264
|
-
|
197
|
+
The best thing about using a `config` options block is that you are able to only define the options that you require.
|
265
198
|
|
266
|
-
|
199
|
+
If you have particular options you *only* wish to run in `staging`, or have single options for `production` etc, this setup gives you the ability to manage it properly...
|
267
200
|
|
268
201
|
---
|
269
202
|
|
270
|
-
|
271
|
-
|
272
|
-
</
|
203
|
+
<!-- Dev -->
|
204
|
+
<div id="dev">
|
205
|
+
<h5>💻 Dev</h5>
|
206
|
+
</div>
|
207
|
+
|
208
|
+
As explained, `ExceptionHandler` does *not* work in `development` by default.
|
273
209
|
|
274
|
-
|
210
|
+
This is because it overrides the `exceptions_app` middleware hook - which is *only* invoked in `production` or `staging`.
|
275
211
|
|
276
212
|
<p align="center">
|
277
213
|
<img src="./readme/dev.png" />
|
@@ -285,26 +221,33 @@ To get it working in `development`, you need to override the [`config.consider_a
|
|
285
221
|
|
286
222
|
This is normally done by changing the setting in your Rails config files. However, to make the process simpler for `ExceptionHandler`- we've added a `dev` option which allows you to override the hook through the context of the gem...
|
287
223
|
|
288
|
-
```
|
224
|
+
```rb
|
289
225
|
# config/application.rb
|
290
226
|
config.exception_handler = { dev: true }
|
291
227
|
```
|
292
228
|
|
293
|
-
This disables [`config.consider_all_requests_local`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration), making Rails behave as it would in production
|
229
|
+
This disables [`config.consider_all_requests_local`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration), making Rails behave as it would in production.
|
294
230
|
|
295
|
-
|
231
|
+
Whilst simple, it's not recommended for extended use. Very good for testing new ideas etc.
|
296
232
|
|
297
|
-
|
233
|
+
---
|
298
234
|
|
299
|
-
|
235
|
+
<!-- DB -->
|
236
|
+
<div id="db">
|
237
|
+
<h5>💾 DB</h5>
|
238
|
+
</div>
|
300
239
|
|
301
|
-
|
302
|
-
<h4>💾 Database 💾</h4>
|
303
|
-
</p>
|
240
|
+
To save exceptions to your database, you're able to set the `db` option.
|
304
241
|
|
305
|
-
|
242
|
+
Because we use a `controller` to manage the underlying way the system works, we're able to invoke the likes of a [`model`](https://github.com/richpeck/exception_handler/blob/master/app/models/exception_handler/exception.rb) with other functionality.
|
306
243
|
|
307
|
-
|
244
|
+
Ths is done automatically with the latest version of `ExceptionHandler`.
|
245
|
+
|
246
|
+
To do this, once you've populated the option with either `true` or a `string`, run `rails db:migrate` from your console.
|
247
|
+
|
248
|
+
Our new [`migration system`](https://github.com/richpeck/exception_handler/tree/readme#migrations) will automatically run the migration.
|
249
|
+
|
250
|
+
```rb
|
308
251
|
# config/application.rb
|
309
252
|
config.exception_handler = { db: true }
|
310
253
|
```
|
@@ -313,124 +256,213 @@ This enables `ActiveRecord::Base` on the [`Exception`](app/models/exception_hand
|
|
313
256
|
|
314
257
|
In order for this to work, your db needs the correct table.
|
315
258
|
|
316
|
-
To do this, once you've enabled the option, run `rails db:migrate` from your console. Our new [`migration system`](https://github.com/richpeck/exception_handler/tree/readme#migrations) will automatically run the migration.
|
317
|
-
|
318
259
|
---
|
319
260
|
|
320
|
-
|
321
|
-
|
322
|
-
</
|
261
|
+
<!-- Email -->
|
262
|
+
<div id="email">
|
263
|
+
<h5>✉️ Email</h5>
|
264
|
+
</div>
|
323
265
|
|
324
|
-
|
266
|
+
`ExceptionHandler` also sends **email notifications**.
|
325
267
|
|
326
268
|
If you want to receive emails whenever your application raises an error, you can do so by adding your email to the config:
|
327
269
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
270
|
+
```rb
|
271
|
+
# config/application.rb
|
272
|
+
config.exception_handler = {
|
273
|
+
email: "your@email.com"
|
274
|
+
}
|
275
|
+
```
|
332
276
|
|
333
277
|
> **Please Note** this requires [`ActionMailer`](http://guides.rubyonrails.org/action_mailer_basics.html). If you don't have any outbound SMTP server, [`SendGrid`](http://sendgrid.com) is free.
|
334
278
|
|
335
|
-
|
279
|
+
From version [`0.8.0.0`](https://github.com/richpeck/exception_handler/releases/tag/v0.8.0.0), you're able to define whether email notifications are sent on a per-error basis:
|
336
280
|
|
281
|
+
```rb
|
282
|
+
# config/application.rb
|
283
|
+
config.exception_handlder = {
|
284
|
+
|
285
|
+
# This has to be present for any "notification" declarations to work
|
286
|
+
# Defaults to 'false'
|
287
|
+
email: "test@test.com",
|
288
|
+
|
289
|
+
# Each status code in the new "exceptions" block allows us to define whether email notifications are sent
|
290
|
+
exceptions: {
|
291
|
+
:all => { notification: true },
|
292
|
+
:50x => { notification: false },
|
293
|
+
500 => { notification: false }
|
294
|
+
}
|
295
|
+
}
|
296
|
+
```
|
337
297
|
---
|
338
298
|
|
339
|
-
|
340
|
-
|
341
|
-
</
|
299
|
+
<!-- Views -->
|
300
|
+
<div id="views">
|
301
|
+
<h5>👓 Views</h5>
|
302
|
+
</div>
|
303
|
+
|
304
|
+
What *most* people want out of the view is to change the way it ***looks***. This can be done without changing the "view" itself.
|
342
305
|
|
343
|
-
|
306
|
+
To better explain, if [`ExceptionsController`](https://github.com/richpeck/exception_handler/blob/master/app/controllers/exception_handler/exceptions_controller.rb) is invoked (by `exceptions_app`), it has **ONE** method ([`show`](https://github.com/richpeck/exception_handler/blob/master/app/controllers/exception_handler/exceptions_controller.rb#L42)).
|
344
307
|
|
345
|
-
|
308
|
+
This method calls the [`show` view](https://github.com/richpeck/exception_handler/blob/master/app/views/exception_handler/exceptions/show.html.erb), which is *entirely* dependent on the locales for content & the layout for the look.
|
309
|
+
|
310
|
+
This means that if you wish to change how the view "looks" - you're *either* going to want to change your [layout][layouts] or the [*locales*](#locales). There is NO reason to change the `show` view itself - it's succinct and entirely modular. Whilst you're definitely at liberty to change it, you'll just be making the issue more complicated than it needs to be.
|
311
|
+
|
312
|
+
--
|
313
|
+
|
314
|
+
We've also included a number of routes which shows in [`dev`](dev) mode (allowing you to test):
|
346
315
|
|
347
316
|
<p align="center">
|
348
|
-
<img src="./readme/
|
317
|
+
<img src="./readme/routes.jpg" />
|
349
318
|
</p>
|
350
319
|
|
351
|
-
|
320
|
+
---
|
352
321
|
|
353
|
-
|
322
|
+
<!-- Locales -->
|
323
|
+
<div id="locales">
|
324
|
+
<h5>💬 Locales</h5>
|
325
|
+
</div>
|
354
326
|
|
355
|
-
|
327
|
+
[Locales](https://github.com/richpeck/exception_handler/blob/Readme/config/locales/exception_handler.en.yml) are used to create interchangeable text (translations/internationalization).
|
356
328
|
|
357
|
-
|
329
|
+
--
|
358
330
|
|
359
|
-
|
331
|
+
In `ExceptionHandler`, it provides the wording for each type of error code.
|
360
332
|
|
361
|
-
|
333
|
+
By default, the English name of the error is used (`"404"` will appear as `"Not Found"`) - if you want to create custom messages, you're able to do so by referencing the error's ["status_code"](https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L492) within your locales file:
|
362
334
|
|
363
|
-
|
335
|
+
```yml
|
336
|
+
# config/locales/en.yml
|
337
|
+
en:
|
338
|
+
exception_handler:
|
339
|
+
not_found: "Your message here" # -> 404 page
|
340
|
+
unauthorized: "You need to login to continue"
|
341
|
+
internal_server_error: "This is a test to show the %{status} of the error"
|
342
|
+
```
|
364
343
|
|
365
|
-
|
366
|
-
<h4>💬 Locales 💬</h4>
|
367
|
-
</p>
|
344
|
+
You get access to [`%{message}` and `%{status}`](https://github.com/richpeck/exception_handler/blob/master/app/views/exception_handler/exceptions/show.html.erb#L1), both inferring from an [`@exception`](https://github.com/richpeck/exception_handler/blob/master/app/controllers/exception_handler/exceptions_controller.rb#L20) object we invoke in the controller...
|
368
345
|
|
369
|
-
|
346
|
+
- `%{message}` is the error's actual message ("XYZ file could not be shown")
|
347
|
+
- `%{status}` is the error's status code ("Internal Server Error")
|
370
348
|
|
371
|
-
|
349
|
+
--
|
372
350
|
|
373
|
-
|
351
|
+
By default, only `internal_server_error` is customized by the gem:
|
374
352
|
|
353
|
+
```yml
|
354
|
+
# config/locales/en.yml
|
355
|
+
en:
|
356
|
+
exception_handler:
|
357
|
+
internal_server_error: "<strong>%{status} Error</strong> %{message}"
|
358
|
+
```
|
359
|
+
---
|
360
|
+
|
361
|
+
<!-- Layouts -->
|
362
|
+
<div id="layouts">
|
363
|
+
<h5>📋 Layouts</h5>
|
364
|
+
</div>
|
375
365
|
|
376
|
-
The `ExceptionHandler`
|
366
|
+
The most attractive feature of `ExceptionHandler` (for most) is its ability to manage [`layouts`](https://guides.rubyonrails.org/layouts_and_rendering.html#structuring-layouts) for HTTP status.
|
377
367
|
|
378
|
-
|
368
|
+
--
|
379
369
|
|
380
|
-
|
381
|
-
en:
|
382
|
-
exception_handler:
|
383
|
-
not_found: "Your message here"
|
384
|
-
unauthorized: "You need to login to continue"
|
385
|
-
internal_server_error: "This is a test to show the %{status} of the error"
|
370
|
+
The reason for this is due to the way in which Rails works → the "layout" is a "wrapper" for the returned HTML (the "styling" of a page). If you have no layout, it will render the "view" HTML and nothing else.
|
386
371
|
|
387
|
-
|
372
|
+
This means if you want to change the "look" of a Rails action, you simply have to be able to change the `layout`. You should not change the view at all.
|
388
373
|
|
389
|
-
|
374
|
+
To this end, `ExceptionHandler` has been designed around providing a [SINGLE VIEW](app/controllers/exception_handler/exceptions_controller.rb#L44) for exceptions. This view does not need to change (although you're welcome to use a [`generator`][generators] to do so) - the key is the `layout` that's assigned...
|
390
375
|
|
391
|
-
|
392
|
-
|
393
|
-
|
376
|
+
- [`4xx`](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors) errors are given a `nil` layout (by default) (inherits from `ApplicationController` in your main app)
|
377
|
+
- [`5xx`](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_errors) errors are assigned our own [`exception`](app/views/layouts/exception.html.erb) layout:
|
378
|
+
|
379
|
+
```rb
|
380
|
+
# config/application.rb
|
381
|
+
config.exception_handler = {
|
382
|
+
|
383
|
+
# The new syntax allows us to assign different values to each HTTP status code
|
384
|
+
# At the moment, only 'layout' & 'notification' are supported
|
385
|
+
# We plan to include several more in the future...
|
386
|
+
|
387
|
+
exceptions: {
|
388
|
+
all: { layout: nil } # -> this will inherit from ApplicationController's layout
|
389
|
+
}
|
390
|
+
}
|
391
|
+
```
|
394
392
|
|
395
|
-
|
393
|
+
The `layout` system has changed between [`0.7.7.0`](releases/tag/v0.7.7.0) and [`0.8.0.0`](releases/tag/v0.8.0.0).
|
396
394
|
|
397
|
-
|
395
|
+
Building on the former's adoption of HTTP status-centric layouts, it is now the case that we have the `all`, `5xx` and `4xx` options - allowing us to manage the layouts for blocks of HTTP errors respectively:
|
398
396
|
|
399
|
-
|
397
|
+
```rb
|
398
|
+
# config/application.rb
|
399
|
+
config.exception_handler = {
|
400
|
+
|
401
|
+
# Old (still works)
|
402
|
+
# No "all" / "4xx"/"5xx" options
|
403
|
+
layouts: {
|
404
|
+
500 => 'exception',
|
405
|
+
501 => 'exception'
|
406
|
+
},
|
407
|
+
|
408
|
+
# New
|
409
|
+
exceptions: {
|
410
|
+
:all => { layout: 'exception' },
|
411
|
+
:4xx => { layout: 'exception' },
|
412
|
+
:5xx => { layout: 'exception' }, # -> this overrides the :all declaration
|
413
|
+
500 => { layout: nil } # -> this overrides the 5xx declaration
|
414
|
+
}
|
415
|
+
}
|
416
|
+
```
|
400
417
|
|
401
|
-
|
418
|
+
We've bundled the [`exception`](app/views/layouts/exception.html.erb) layout for `5xx` errors because since these denote internal server errors, it's best to isolate the view system as much as possible. Whilst you're at liberty to change it, we've found it sufficient for most use-cases.
|
402
419
|
|
403
420
|
---
|
404
421
|
|
422
|
+
<!-- Custom Exceptions -->
|
423
|
+
<div id="custom-exceptions">
|
424
|
+
<h5>⛔️ Custom Exceptions</h5>
|
425
|
+
</div>
|
405
426
|
|
406
|
-
|
407
|
-
<h4>⛔️ Custom Exceptions ⛔️</h4>
|
408
|
-
</p>
|
427
|
+
As mentioned, Rails' primary role is to convert Ruby exceptions into HTTP errors.
|
409
428
|
|
410
|
-
|
429
|
+
Part of this process involves mapping Ruby/Rails exceptions to the equivalent HTTP status code.
|
411
430
|
|
412
|
-
|
431
|
+
This is done with [`config.action_dispatch.rescue_responses`](https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L492).
|
413
432
|
|
414
|
-
|
433
|
+
<p align="center">
|
434
|
+
<img src="./readme/custom_exceptions.png" />
|
435
|
+
</p>
|
415
436
|
|
416
|
-
|
437
|
+
Whilst this works well, it may be the case that you want to map your own classes to an HTTP status code (default is `Internal Server Error`).
|
417
438
|
|
418
|
-
|
419
|
-
config.action_dispatch.rescue_responses["ActionController::YourError"] = :bad_request
|
439
|
+
If you wanted to keep this functionality inside `ExceptionHandler`, you're able to do it as follows:
|
420
440
|
|
421
|
-
|
441
|
+
```rb
|
442
|
+
# config/application.rb
|
443
|
+
config.exception_handler = {
|
444
|
+
custom_exceptions: {
|
445
|
+
'CustomClass::Exception' => :not_found
|
446
|
+
}
|
447
|
+
}
|
448
|
+
```
|
422
449
|
|
423
|
-
|
450
|
+
Alternatively, you're able to still do it with the default Rails behaviour:
|
424
451
|
|
425
|
-
|
426
|
-
|
427
|
-
|
452
|
+
```rb
|
453
|
+
# config/application.rb
|
454
|
+
config.action_dispatch.rescue_responses = { 'CustomClass::Exception' => :not_found }
|
455
|
+
```
|
456
|
+
---
|
428
457
|
|
429
|
-
|
458
|
+
<!-- Generators -->
|
459
|
+
<div id="generators">
|
460
|
+
<h5>💼 Generators</h5>
|
461
|
+
</div>
|
430
462
|
|
431
|
-
|
463
|
+
If you want to edit the `controller`, `views`, `model` or `assets`, you're able to invoke them in your own application.
|
432
464
|
|
433
|
-
|
465
|
+
This is done - as with other gems - with a single [`generator`](https://github.com/richpeck/exception_handler/blob/master/lib/generators/exception_handler/views_generator.rb) which takes a series of arguments:
|
434
466
|
|
435
467
|
rails g exception_handler:views
|
436
468
|
rails g exception_handler:views -v views
|
@@ -439,74 +471,68 @@ The following commands will copy the directories...
|
|
439
471
|
rails g exception_handler:views -v assets
|
440
472
|
rails g exception_handler:views -v views controllers models assets
|
441
473
|
|
442
|
-
If you don't include any switches, this will copy **all**
|
474
|
+
If you don't include any switches, this will copy **all** `ExceptionHandler`'s folders put into your app.
|
443
475
|
|
444
476
|
Each switch defines which folders you want (EG `-v views` will only copy `views` dir).
|
445
477
|
|
446
478
|
---
|
447
479
|
|
448
|
-
|
449
|
-
|
450
|
-
</
|
480
|
+
<!-- Migrations -->
|
481
|
+
<div id="migrations">
|
482
|
+
<h5>✔️ Migrations</h5>
|
483
|
+
</div>
|
451
484
|
|
452
|
-
|
485
|
+
You **DON'T** need to generate a migration anymore.
|
453
486
|
|
454
487
|
From [`0.7.5`](https://github.com/richpeck/exception_handler/releases/tag/0.7.5), the `migration` generator has been removed in favour of our own [migration system](lib/exception_handler/engine.rb#L58).
|
455
488
|
|
456
489
|
The reason we did this was so not to pollute your migrations folder with a worthless file. Our migration doesn't need to be changed - we only have to get it into the database and the gem takes care of the rest...
|
457
490
|
|
458
|
-
> If you set the `db` option in config, run `rails db:migrate` and the migration will be run.
|
491
|
+
> If you set the [`db`][db] option in config, run `rails db:migrate` and the migration will be run.
|
459
492
|
|
460
493
|
To rollback, use the following:
|
461
494
|
|
462
495
|
rails db:migrate:down VERSION=000000
|
463
496
|
|
464
|
-
The drawback to this is that if you remove `ExceptionHandler` before you rollback the migration, it won't exist anymore.
|
497
|
+
The drawback to this is that if you remove `ExceptionHandler` before you rollback the migration, it won't exist anymore.
|
465
498
|
|
466
|
-
|
467
|
-
<div id="support">
|
468
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
469
|
-
<h3>☎️ Support ☎️</h3>
|
470
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
471
|
-
</div>
|
499
|
+
You can **only** fire the `rollback` when you have `ExceptionHandler` installed.
|
472
500
|
|
473
|
-
|
501
|
+
<!-- Sep -->
|
502
|
+
<p align="center">
|
503
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
504
|
+
</p>
|
474
505
|
|
475
|
-
|
506
|
+
<!-- Support-->
|
507
|
+
<div id="support">
|
508
|
+
<h4>☎️ Support</h4>
|
509
|
+
</div>
|
476
510
|
|
477
|
-
|
511
|
+
---
|
478
512
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
513
|
+
<div>
|
514
|
+
<p>You're welcome to contact me directly at <u><a href="mailto:rpeck@frontlineutilities.co.uk"></a><a href="mailto:rpeck@frontlineutilities.co.uk" ref="nofollow">rpeck@frontlineutilities.co.uk</a></u>.</p>
|
515
|
+
<p>Alternatively, you may wish to post on our <u><a href="https://github.com/richpeck/exception_handler/issues">GitHub Issues</a></u>, or <u><a href="https://stackoverflow.com/questions/tagged/ruby-on-rails+exceptionhandler" rel="nofollow">StackOverflow</a></u>.</p>
|
516
|
+
<p>--</p>
|
517
|
+
<p><a href="https://medium.com/ruby-on-rails-web-application-development/custom-400-500-error-pages-in-ruby-on-rails-exception-handler-3a04975e4677" rel="nofollow"><img src="readme/medium.png" target="_blank" alt="Medium" style="max-width:100%;"></a></p>
|
518
|
+
</div>
|
484
519
|
|
520
|
+
<!-- Sep -->
|
485
521
|
<p align="center">
|
486
|
-
<
|
522
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
487
523
|
</p>
|
488
524
|
|
489
525
|
<!-- Changelog -->
|
490
526
|
<div id="changelog">
|
491
|
-
<
|
492
|
-
<h3>⭐ Changelog ⭐</h3>
|
493
|
-
<p align="center"><img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" /></p>
|
527
|
+
<h4>⭐ Changelog</h4>
|
494
528
|
</div>
|
495
529
|
|
496
|
-
|
497
|
-
|
498
|
-
<p align="center"><b>➡️ <code><a href="https://www.rubygems.org/gems/exception_handler">ExceptionHandler</a></code> is designed to provide <strong><A href="https://medium.com/ruby-on-rails-web-application-development/custom-400-500-error-pages-in-ruby-on-rails-exception-handler-3a04975e4677">custom error pages</a></strong> for Ruby on Rails. ⬅️</b></p>
|
499
|
-
|
500
|
-
<p>If you're looking at adding <em><b>extra</b></em> functionality (such as a debugger), you'll probably be better looking at the likes of <code><a href="https://rubygems.org/gems/better_errors">better_errors</a></code> or <code><a href="https://rubygems.org/gems/gaffe">gaffe</a></code>. Whilst we'll certainly look at adding - or integrating - other features (if they're requested), our core intention has always been to provide an exception handling stack that was both simple and customizable.</p>
|
501
|
-
|
502
|
-
--
|
503
|
-
|
504
|
-
What we've built so far...
|
530
|
+
---
|
505
531
|
|
506
|
-
|
532
|
+
[**1.0.0.0**](https://github.com/richpeck/exception_handler/releases/tag/v1.0.0.0)
|
507
533
|
- [ ] TBA
|
508
534
|
|
509
|
-
|
535
|
+
[**0.8.0.0**](https://github.com/richpeck/exception_handler/releases/tag/v0.8.0.0)
|
510
536
|
- [x] [README](https://github.com/richpeck/exception_handler/issues/52) (focus on utility)
|
511
537
|
- [x] Introduction of `4xx`,`5xx`,`:all` for layouts config
|
512
538
|
- [x] Changed `layouts` to `exceptions` in config
|
@@ -514,20 +540,19 @@ What we've built so far...
|
|
514
540
|
- [x] Streamlined migration
|
515
541
|
- [x] Updated model
|
516
542
|
|
517
|
-
|
543
|
+
[**0.7.7.0**](https://github.com/richpeck/exception_handler/releases/tag/v0.7.7.0)
|
518
544
|
- [x] [HTTP status layouts](#layouts)
|
519
545
|
|
520
|
-
|
546
|
+
**0.7.0.0**
|
521
547
|
- [x] Wildcard mime types
|
522
548
|
- [x] [Custom exceptions](#custom_exceptions)
|
523
549
|
- [x] Test suite integration
|
524
|
-
- [x] [Email](#email)
|
525
550
|
- [x] [Model backend](#database)
|
526
551
|
- [x] Sprockets 4+
|
527
552
|
- [x] New layout
|
528
553
|
- [x] Readme / wiki overhaul
|
529
554
|
|
530
|
-
|
555
|
+
**0.6.5.0**
|
531
556
|
- [x] Streamlined interface
|
532
557
|
- [x] ActiveRecord / Middleware overhaul
|
533
558
|
- [x] Supports Sprockets 4+ ([`manifest.js`](http://eileencodes.com/posts/the-sprockets-4-manifest/))
|
@@ -535,7 +560,7 @@ What we've built so far...
|
|
535
560
|
- [x] Asset overhaul & improvement
|
536
561
|
- [x] Removed dependencies
|
537
562
|
|
538
|
-
|
563
|
+
**0.5.0.0**
|
539
564
|
- [x] Locales
|
540
565
|
- [x] Email notifications
|
541
566
|
- [x] Full test suite
|
@@ -546,42 +571,41 @@ What we've built so far...
|
|
546
571
|
- [x] Rails asset management improvement
|
547
572
|
- [x] Reduced gem file size
|
548
573
|
|
549
|
-
|
574
|
+
**0.4.7.0**
|
550
575
|
- [x] New config system
|
551
576
|
- [x] Fixed controller layout issues
|
552
577
|
- [x] Streamlined middleware
|
553
578
|
- [x] New layout & interface
|
554
579
|
|
555
|
-
<!-- Sep -->
|
556
|
-
<p align="center">
|
557
|
-
|
558
|
-
</p>
|
580
|
+
<!-- Sep -->
|
581
|
+
<p align="center">
|
582
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
583
|
+
</p>
|
559
584
|
|
560
|
-
[![404 + 500 Errors][banner]][rubygems]
|
585
|
+
[![404 + 500 Errors][banner]][rubygems]
|
561
586
|
|
562
|
-
<p align="center">
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
</p>
|
587
|
+
<p align="center">
|
588
|
+
<strong><a href="https://rubygems.org/gems/exception_handler"><code>ExceptionHandler</code></a> provides custom error pages gem for Rails 5+</strong>
|
589
|
+
<br />
|
590
|
+
No other gem is as simple or effective at providing branded exception pages in production
|
591
|
+
</p>
|
567
592
|
|
568
|
-
<p align="center">
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
</p>
|
593
|
+
<p align="center">
|
594
|
+
<a href="http://badge.fury.io/rb/exception_handler"><img src="https://badge.fury.io/rb/exception_handler.svg" align="absmiddle"></a>
|
595
|
+
<a href="http://rubygems.org/gems/exception_handler"><img src="http://ruby-gem-downloads-badge.herokuapp.com/exception_handler/0.5.1?type=total&color=brightgreen" align="absmiddle" /></a>
|
596
|
+
<a href="https://codeclimate.com/github/richpeck/exception_handler"><img src="https://codeclimate.com/github/richpeck/exception_handler/badges/gpa.svg" align="absmiddle"/></a>
|
597
|
+
<a href='https://coveralls.io/github/richpeck/exception_handler?branch=master'><img src='https://coveralls.io/repos/github/richpeck/exception_handler/badge.svg?branch=master' alt='Coverage Status' align="absmiddle" /></a>
|
598
|
+
<a href="https://travis-ci.org/richpeck/exception_handler"><img src="https://travis-ci.org/richpeck/exception_handler.svg?branch=master" align="absmiddle"></a>
|
599
|
+
</p>
|
576
600
|
|
577
|
-
<p align="center">
|
578
|
-
|
579
|
-
</p>
|
601
|
+
<p align="center">
|
602
|
+
<strong>➡️ <a href="https://rubygems.org/gems/exception_handler">Download & Info</a> ⬅️</strong>
|
603
|
+
</p>
|
580
604
|
|
581
|
-
<!-- Sep -->
|
582
|
-
<p align="center">
|
583
|
-
|
584
|
-
</p>
|
605
|
+
<!-- Sep -->
|
606
|
+
<p align="center">
|
607
|
+
<img src="https://cdn-images-1.medium.com/max/800/1*CKyKxRXLovcrUOB-s8_jCw.png" width="100%" />
|
608
|
+
</p>
|
585
609
|
|
586
610
|
:copyright: <a href="http://www.fl.co.uk" align="absmiddle" ><img src="readme/fl.jpg" height="22" align="absmiddle" /></a> <a href="http://stackoverflow.com/users/1143732/richard-peck?tab=profile" align="absmiddle" ><img src="https://avatars0.githubusercontent.com/u/1104431" height="22" align="absmiddle" /></a> <a href="https://github.com/joehilton" align="absmiddle" ><img src="https://avatars2.githubusercontent.com/u/5063592?s=460&v=4" height="22" align="absmiddle" /></a> <a href="https://github.com/toymachiner62" align="absmiddle" ><img src="https://avatars3.githubusercontent.com/u/485782" height="22" align="absmiddle" /></a> <a href="https://github.com/andrewclink" align="absmiddle" ><img src="https://avatars0.githubusercontent.com/u/688916" height="22" align="absmiddle" /></a> <a href="https://github.com/Startouf" align="absmiddle" ><img src="https://avatars2.githubusercontent.com/u/7388889" height="22" align="absmiddle" /></a> <a href="https://github.com/Tonkonozhenko" align="absmiddle" ><img src="https://avatars0.githubusercontent.com/u/1307646" height="22" align="absmiddle" /></a> <a href="https://github.com/mabako" align="absmiddle" ><img src="https://avatars3.githubusercontent.com/u/125113" height="22" align="absmiddle" /></a> <a href="https://github.com/frankzhao" align="absmiddle" ><img src="https://avatars3.githubusercontent.com/u/555499" height="22" align="absmiddle" /></a>
|
587
611
|
|
@@ -594,43 +618,10 @@ What we've built so far...
|
|
594
618
|
<!-- Images https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images -->
|
595
619
|
|
596
620
|
<!-- Images -->
|
597
|
-
[
|
598
|
-
[dev_img]: readme/dev.png
|
599
|
-
[layouts_img]: readme/layouts.jpg
|
600
|
-
[layout_img]: readme/layout.png
|
601
|
-
[view_img]: readme/view.jpg
|
602
|
-
[http_codes]: readme/http_codes.png
|
603
|
-
[config]: readme/config.jpg
|
604
|
-
[config.action_dispatch.rescue_responses]: readme/config.action_dispatch.rescue_responses.jpg
|
605
|
-
[banner]: readme/banner.jpg
|
606
|
-
[gem]: readme/gem.jpg
|
607
|
-
[gemfile]: readme/gemfile.jpg
|
608
|
-
[middleware]: readme/middleware.jpg
|
609
|
-
[exceptions_app]: readme/exceptions_app.jpg
|
610
|
-
[view]: readme/titles/view.jpg
|
611
|
-
[dev]: readme/titles/dev.jpg
|
612
|
-
[db]: readme/titles/db.png
|
613
|
-
[support]: readme/titles/support.png "Support"
|
614
|
-
[changelog]: readme/titles/changelog.png "Changelog"
|
615
|
-
[contribution]: readme/titles/contributions.png "Contributions"
|
616
|
-
[fl]: readme/fl.jpg "Frontline Utilities LTD"
|
617
|
-
[profile]: https://avatars0.githubusercontent.com/u/1104431 "R Peck"
|
621
|
+
[banner]:readme/banner.jpg
|
618
622
|
|
619
623
|
<!-- Links -->
|
620
|
-
[better_errors]: https://github.com/charliesome/better_errors
|
621
|
-
[layout]: app/views/layouts/exception.html.erb
|
622
|
-
[status_codes]: http://guides.rubyonrails.org/layouts_and_rendering.html#the-status-option
|
623
|
-
[stackoverflow]: http://stackoverflow.com/questions/ask?tags=ruby-on-rails+exception-handler
|
624
|
-
[rescue_responses]: http://guides.rubyonrails.org/configuring.html#configuring-action-dispatch
|
625
|
-
[latest]: https://github.com/richpeck/exception_handler/releases/latest
|
626
|
-
[show_exception]: https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb
|
627
|
-
[exception_app]: http://guides.rubyonrails.org/configuring.html#rails-general-configuration
|
628
624
|
[rubygems]: http://rubygems.org/gems/exception_handler
|
629
|
-
[frontlineutilities.co.uk]: http://www.frontlineutilities.co.uk
|
630
|
-
[stackoverflow.com]: http://stackoverflow.com/users/1143732/richard-peck?tab=profile
|
631
|
-
[fork]: #fork-destination-box
|
632
|
-
[pull]: http://github.com/richpeck/exception_handler/pulls
|
633
|
-
[issues]: http://github.com/richpeck/exception_handler/issues
|
634
625
|
|
635
626
|
[10x]: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_Informational_responses
|
636
627
|
[20x]: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success
|
@@ -638,5 +629,15 @@ What we've built so far...
|
|
638
629
|
[40x]: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors
|
639
630
|
[50x]: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_errors
|
640
631
|
|
632
|
+
<!-- Local Links -->
|
633
|
+
[db]: #db
|
634
|
+
[email]: #email
|
635
|
+
[dev]: #dev
|
636
|
+
[layouts]: #layouts
|
637
|
+
[locales]: #locales
|
638
|
+
[configuration]: #configuration
|
639
|
+
[generators]: #generators
|
640
|
+
[custom-exceptions]: #custom-exceptions
|
641
|
+
|
641
642
|
<!-- ################################### -->
|
642
643
|
<!-- ################################### -->
|