exception_handler 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +33 -33
  3. data/.rspec +3 -3
  4. data/.travis.yml +5 -5
  5. data/Gemfile +13 -13
  6. data/LICENSE.txt +22 -22
  7. data/README.md +349 -341
  8. data/Rakefile +7 -7
  9. data/app/assets/images/{favicon.ico → exception_handler.ico} +0 -0
  10. data/app/assets/images/exception_handler/alert.jpg +0 -0
  11. data/app/assets/images/exception_handler/bg.jpg +0 -0
  12. data/app/assets/images/exception_handler/favicon.ico +0 -0
  13. data/app/assets/images/exception_handler/icon.png +0 -0
  14. data/app/assets/stylesheets/exception_handler.css.erb +8 -8
  15. data/app/assets/stylesheets/styles/_base.css.erb +35 -34
  16. data/app/assets/stylesheets/styles/_exception.css.erb +105 -103
  17. data/app/assets/stylesheets/styles/_footer.css.erb +24 -27
  18. data/app/assets/stylesheets/styles/_responsive.css +5 -5
  19. data/app/controllers/exception_handler/exception_controller.rb +45 -38
  20. data/app/mailers/exception_handler/exception_mailer.rb +16 -16
  21. data/app/models/exception_handler/exception.rb +191 -191
  22. data/app/views/exception_handler/exception/show.html.erb +1 -1
  23. data/app/views/exception_handler/mailers/new_exception.erb +4 -4
  24. data/app/views/layouts/exception.html.erb +27 -21
  25. data/config/locales/exception_handler.en.yml +13 -13
  26. data/exception_handler.gemspec +80 -84
  27. data/lib/exception_handler.rb +32 -29
  28. data/lib/exception_handler/config.rb +80 -66
  29. data/lib/exception_handler/engine.rb +44 -36
  30. data/lib/generators/exception_handler/migration_generator.rb +55 -55
  31. data/lib/generators/exception_handler/views_generator.rb +42 -42
  32. data/lib/generators/templates/migration.rb.erb +16 -16
  33. data/spec/database.yml +2 -2
  34. data/spec/dummy/Rakefile +6 -6
  35. data/spec/dummy/app/assets/config/manifest.js +4 -4
  36. data/spec/dummy/app/assets/javascripts/application.js +13 -13
  37. data/spec/dummy/app/assets/javascripts/cable.coffee +11 -11
  38. data/spec/dummy/app/assets/stylesheets/application.css +15 -15
  39. data/spec/dummy/app/channels/application_cable/channel.rb +5 -5
  40. data/spec/dummy/app/channels/application_cable/connection.rb +5 -5
  41. data/spec/dummy/app/controllers/application_controller.rb +5 -5
  42. data/spec/dummy/app/helpers/application_helper.rb +2 -2
  43. data/spec/dummy/app/jobs/application_job.rb +2 -2
  44. data/spec/dummy/app/mailers/application_mailer.rb +4 -4
  45. data/spec/dummy/app/models/application_record.rb +3 -3
  46. data/spec/dummy/app/views/layouts/application.html.erb +15 -15
  47. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -13
  48. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -1
  49. data/spec/dummy/bin/bundle +3 -3
  50. data/spec/dummy/bin/rails +4 -4
  51. data/spec/dummy/bin/rake +4 -4
  52. data/spec/dummy/bin/setup +34 -34
  53. data/spec/dummy/bin/update +29 -29
  54. data/spec/dummy/config.ru +8 -8
  55. data/spec/dummy/config/application.rb +21 -21
  56. data/spec/dummy/config/boot.rb +5 -5
  57. data/spec/dummy/config/cable.yml +10 -10
  58. data/spec/dummy/config/database.yml +25 -25
  59. data/spec/dummy/config/environment.rb +5 -5
  60. data/spec/dummy/config/environments/development.rb +62 -62
  61. data/spec/dummy/config/environments/production.rb +87 -87
  62. data/spec/dummy/config/environments/test.rb +42 -42
  63. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +6 -6
  64. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -6
  65. data/spec/dummy/config/initializers/assets.rb +11 -11
  66. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -7
  67. data/spec/dummy/config/initializers/callback_terminator.rb +6 -6
  68. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -5
  69. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -4
  70. data/spec/dummy/config/initializers/inflections.rb +16 -16
  71. data/spec/dummy/config/initializers/mime_types.rb +4 -4
  72. data/spec/dummy/config/initializers/per_form_csrf_tokens.rb +4 -4
  73. data/spec/dummy/config/initializers/request_forgery_protection.rb +4 -4
  74. data/spec/dummy/config/initializers/session_store.rb +3 -3
  75. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -14
  76. data/spec/dummy/config/locales/en.yml +23 -23
  77. data/spec/dummy/config/puma.rb +47 -47
  78. data/spec/dummy/config/routes.rb +6 -6
  79. data/spec/dummy/config/secrets.yml +22 -22
  80. data/spec/dummy/public/404.html +67 -67
  81. data/spec/dummy/public/422.html +67 -67
  82. data/spec/dummy/public/500.html +66 -66
  83. data/spec/exception_handler.rb +21 -21
  84. data/spec/exception_handler/exception_controller_spec.rb +18 -0
  85. data/spec/spec_helper.rb +54 -54
  86. metadata +11 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 810cd36b89b1f71d809f1518cc626e9c8f5d1d0b
4
- data.tar.gz: 86ddb48511a90590daaece346fc2bf01984d74fc
3
+ metadata.gz: 2211c69b2d0f6f0f398db88612aae4a8967dbb83
4
+ data.tar.gz: 7d02292d53764231acdef24f5e286c099ae264d0
5
5
  SHA512:
6
- metadata.gz: b38660ca8e52a01410a8255830da272ceee270709e0cfd280d2e5a065d05da863610df02a577fba8a4d69b7a70bca6a28a11818f30cc41da7f4b1a756a8a4f08
7
- data.tar.gz: d19140814ab1fefc1416c742950eafcfae17ba66e0529536a01a161a2e7244ff17e70d49ae2979ddecc07128eac1bc4f9a2c0d71a54cfa16624f10feabfd8f83
6
+ metadata.gz: 359b3813af909ae13cff91cdb3e83d8c88fa69f4e9f9f41aa95126b6a7f9e7becfa1676f930ffc1ae22d5ce51fa00fa92c8290201014dce0d2354d95e06f89ed
7
+ data.tar.gz: 78f0f47a6d9095fce23ac62ccd7ad82ca3baac8440b25829d207376cfd293a923b4fe408ce481472b5f0810c5c32b741a1d8b1199fbe62a705f80ef28fd2a47e
data/.gitignore CHANGED
@@ -1,33 +1,33 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
23
- *.tmp
24
-
25
- # http://stackoverflow.com/questions/8865848/comments-in-gitignore
26
- # https://gist.github.com/danielpcox/4636520
27
-
28
- log/*.log
29
- pkg/
30
- spec/dummy/db/*.sqlite3
31
- spec/dummy/log/*.log
32
- spec/dummy/tmp/
33
- spec/dummy/.sass-cache
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ *.tmp
24
+
25
+ # http://stackoverflow.com/questions/8865848/comments-in-gitignore
26
+ # https://gist.github.com/danielpcox/4636520
27
+
28
+ log/*.log
29
+ pkg/
30
+ spec/dummy/db/*.sqlite3
31
+ spec/dummy/log/*.log
32
+ spec/dummy/tmp/
33
+ spec/dummy/.sass-cache
data/.rspec CHANGED
@@ -1,4 +1,4 @@
1
- --color
2
- --format progress
3
- --require spec_helper
1
+ --color
2
+ --format progress
3
+ --require spec_helper
4
4
  --format documentation
@@ -1,5 +1,5 @@
1
- rvm:
2
- - 2.2.4
3
- - 2.3.1
4
- - 2.4.0-preview3
5
- - ruby-head
1
+ rvm:
2
+ - 2.2.4
3
+ - 2.3.2
4
+ - 2.4.0
5
+ - ruby-head
data/Gemfile CHANGED
@@ -1,13 +1,13 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in custom_error_pages.gemspec
4
- gemspec
5
-
6
- ###########################################
7
-
8
- #For Testing
9
- group :test do
10
- gem 'coveralls', require: false
11
- end
12
-
13
- ###########################################
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in custom_error_pages.gemspec
4
+ gemspec
5
+
6
+ ###########################################
7
+
8
+ #For Testing
9
+ group :test do
10
+ gem 'coveralls', require: false
11
+ end
12
+
13
+ ###########################################
@@ -1,22 +1,22 @@
1
- Copyright (c) 2014 richpeck
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2014 richpeck
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,341 +1,349 @@
1
- ![Exception Handler](readme/title.jpg "Exception Handler Logo")
2
-
3
- <p align="center">
4
- <font size="4"><strong>Custom 404 & 500 production error pages for Rails 4 & 5.</font></strong>
5
- </p>
6
-
7
- <p align="center">
8
- <a href="http://badge.fury.io/rb/exception_handler"><img src="https://badge.fury.io/rb/exception_handler.svg" align="absmiddle"></a>
9
- <a href="http://rubygems.org/richpeck/exception_handler"><img src="http://ruby-gem-downloads-badge.herokuapp.com/exception_handler/0.5.1?type=total&color=brightgreen" align="absmiddle" /></a>
10
- <a href="https://codeclimate.com/github/richpeck/exception_handler"><img src="https://codeclimate.com/github/richpeck/exception_handler/badges/gpa.svg" align="absmiddle"/></a>
11
- <a href="https://gemnasium.com/richpeck/exception_handler"><img src="https://gemnasium.com/richpeck/exception_handler.svg" align="absmiddle"></a>
12
- <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>
13
- <a href="https://travis-ci.org/richpeck/exception_handler"><img src="https://travis-ci.org/richpeck/exception_handler.svg?branch=master" align="absmiddle"></a>
14
- </p>
15
-
16
- <p align="center">
17
- <strong><a href="#user-content-install">Install</a></strong> → <strong><a href="#user-content-config">Setup</a></strong> → <strong><a href="#user-content-support">Support</a></strong>
18
- </p>
19
-
20
- ---
21
-
22
- <p align="center">
23
- <img src="readme/version.png" /><br/>
24
- </p>
25
-
26
- <p align="center">
27
- <img src="readme/check.png" height="22" title="Fully Responsive" align="absmiddle" />&nbsp; <strong>Responsive</strong> &nbsp;
28
- <img src="readme/check.png" height="22" title="Branded Error Pages" align="absmiddle" />&nbsp; <strong>Branded Error Pages</strong> &nbsp;
29
- <img src="readme/check.png" height="22" title="Middleware Exception Handling" align="absmiddle" />&nbsp; <strong>Middleware Exception Handling</strong> &nbsp;
30
- <img src="readme/check.png" height="22" title="Keep Users Informed" align="absmiddle" />&nbsp; <strong>Fully Customizable</strong> &nbsp;
31
- </p>
32
-
33
- <p align="center">
34
- <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" />
35
- <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" />
36
- </p>
37
-
38
- ---
39
-
40
- <p align="center">
41
- <img src="readme/05.jpg" title="Reworked for Rails 5" />
42
- </p>
43
-
44
- <p align="center">
45
- <img src="readme/titles/reworked.jpg" title="Reworked for Rails 5" width="450" />
46
- </p>
47
-
48
- <p align="center">
49
- <img src="readme/check_02.png" height="22" title="New Controller" align="absmiddle" />&nbsp; <strong>New Controller</strong> &nbsp;
50
- <img src="readme/check_02.png" height="22" title="New Middleware" align="absmiddle" />&nbsp; <strong>New Middleware</strong> &nbsp;
51
- <img src="readme/check_02.png" height="22" title="Full Test Suite" align="absmiddle" />&nbsp; <strong>Full Test Suite</strong> &nbsp;
52
- <img src="readme/check_02.png" height="22" title="Rails 4 & 5 Compatible" align="absmiddle" />&nbsp; <strong>FULLY Rails 4 & 5 Compatible</strong> &nbsp;
53
- </p>
54
-
55
- Brand new `controller`, `middleware` & options have made **`ExceptionHandler`** even more powerful & efficient. Now you can use `ExceptionHandler` directly with a single click -- **plug and play** custom exception pages:
56
-
57
- <div align="center">
58
- <img src="readme/400.jpg" title="400 Errors" width="435" />
59
- <img src="readme/500.jpg" title="500 Errors" width="435" />
60
- </div>
61
-
62
- **ExceptionHandler** uses `config.exceptions_app` to catch & send errors to the [`exceptions` controller](app/controllers/exception_handler/exception_controller.rb).
63
-
64
- It uses data stored in `Rack` (`message`, `details`, `user agent`) to populate its `custom view`. This gives you the ability to **maintain your branding** *even* when your app experiences an exception.
65
-
66
- ----
67
-
68
- <p align="center">
69
- <br />
70
- <img src="readme/titles/middleware.jpg" title="Middleware Powered Exceptions" width="300" />
71
- <br />
72
- </p>
73
-
74
- The power of **`ExceptionHandler`** lies in its capacity to access the [**`ActiveDispatch::ShowExceptions`**](https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb) middleware:
75
-
76
- <p align="center">
77
- <img src="readme/middleware.jpg" title="Exceptions handled by the ActiveDispatch::ShowExceptions Middleware" />
78
- </p>
79
-
80
- Rails invokes [`config.exceptions_app`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration) whenever an exception is raised.
81
-
82
- **ExceptionHandler** injects our `ExceptionController` into this hook to provide the most efficient response:
83
-
84
- > **`config.exceptions_app`** sets the exceptions application invoked by the **`ShowException`** middleware when an exception happens. Defaults to **`ActionDispatch::PublicExceptions.new(Rails.public_path)`**.
85
-
86
- <p align="center">
87
- <img src="readme/exceptions_app.jpg" title="Exceptions App" />
88
- </p>
89
-
90
- As opposed to other exception suites (which use the `routes`), this gives you DIRECT access to the exception through the middleware stack, straight to the [`ExceptionController`](/app/controllers/exception_handler/exception_controller.rb):
91
-
92
- <p align="center">
93
- <img src="readme/controller_middleware.jpg" title="ExceptionsController compiles the exception & delivers to the front-end" />
94
- </p>
95
-
96
- **ExceptionHandler** uses [custom middleware](https://github.com/richpeck/exception_handler/blob/0.5/lib/exception_handler/parse.rb) to extract *all* the exception data for the request. Not only is this the most succinct, efficient way to do this, it also allows you to customize the *entire* fault-recovery process.
97
-
98
- It's completely unique - the **only** professional solution to catch, process & handle exceptions in Rails.
99
-
100
- ----------
101
-
102
- <p align="center" id="install">
103
- <br />
104
- <img src="readme/titles/install.jpg" title="1 Click Install for ExceptionHandler 5 on Rails 5" width="350" />
105
- <br />
106
- <strong>You Don't Need <i>Any</i> Configuration To Run ExceptionHandler</strong>
107
- </p>
108
-
109
- gem install "exception_handler"
110
-
111
- or
112
-
113
- # Gemfile
114
- gem 'exception_handler', '~> 0.6.5'
115
-
116
- `ExceptionHandler`'s new **config** system (introduced in [`0.4.7`](https://github.com/richpeck/exception_handler/wiki/Setup)) stores all the [defaults](#user-content-defaults) - you just need to install the gem & let it run.
117
-
118
- If you want to change *any* settings (detailed [below](#user-content-config)), you **simply** need to change `config/application.rb` / `config/environments/your_env.rb`. The ***POWER*** of this *new config system* means you're able to deploy `ExceptionHandler` in the most unobtrusive, versatile way possible.
119
-
120
- <p align="center">
121
- <a href="http://rubygems.org/gems/exception_handler" target="_blank">
122
- <img src="readme/rubygems.jpg" title="30,000+ Downloads Through RubyGems" />
123
- <br />
124
- </a>
125
- </p>
126
-
127
- ----
128
-
129
- <p align="center" id="config">
130
- <img src="readme/titles/setup.jpg" title="Instant Custom Error Pages For Rails 4 & 5" />
131
- <br />
132
- <a href="#defaults"><img src="readme/titles/setup/defaults.jpg" height="50" align="absmiddle" /></a>
133
- <a href="#dev"><img src="readme/titles/setup/dev.jpg" height="50 align="absmiddle" /></a>
134
- <a href="#email"><img src="readme/titles/setup/email.jpg" height="50 align="absmiddle" /></a>
135
- <a href="#views"><img src="readme/titles/setup/views.jpg" height="50" align="absmiddle" /></a>
136
- </p>
137
-
138
- --
139
-
140
-
141
- **`ExceptionHandler 0.6.5`** has *drastically* improved our famous 1-click install.
142
-
143
- Not only have we removed all the bloat, but our initialization process now relies on a *single* hook which will set all the config variables as required. This is stark difference to the myriad of poorly-designed gems which cause massive lag in your Rails initialization process. `ExceptionHandler` is now more streamlined than ever:
144
-
145
- <p align="center">
146
- <img src="readme/defaults.jpg" title="ExceptionHandler Default Config Options">
147
- </p>
148
-
149
- The **MAGIC** lies in the [`environment files`](http://guides.rubyonrails.org/configuring.html#creating-rails-environments).
150
-
151
- Instead of dopey initializers (which slow the system down), you can just use the Rails config files to set environment-dependent options. This allows us to maximize performance without any of the overhead associated with old-fashioned gems.
152
-
153
- > **IMPORTANT**
154
- >
155
- > If you're upgrading from >= `0.4.7`, you need to **remove your `exception_handler` initializer**.
156
- >
157
- > We've changed the load process to use Rails app config - **you don't need the `exception_handler` initializer any more**
158
-
159
- ----
160
-
161
- <p id="defaults">
162
- <img src="readme/titles/setup/defaults.jpg" title="Defaults" height="75" border="2" />
163
- </p>
164
-
165
- As can be seen in[`config`](/lib/exception_handler/config.rb), the following are all the options `ExceptionHandler` accepts:
166
-
167
- <p align="center">
168
- <img src="readme/defaults.jpg" title="ExceptionHandler Default Configuration Options">
169
- </p>
170
-
171
- # Defaults
172
- DEFAULTS = {
173
- dev: false, #-> defaults to "false" for dev mode
174
- db: false, #-> defaults to :errors if true, else use "table_name" / :table_name
175
- email: false, #-> requires string email and ActionMailer
176
- social: {
177
- facebook: { name: "frontline.utilities", url: "https://facebook.com" },
178
- twitter: { name: "frontlineutils", url: "http://twitter.com" },
179
- youtube: { name: "frontlineutils", url: "https://youtube.com/user" },
180
- linkedin: { name: "frontline-utilities", url: "https://linkedin.com/company" },
181
- fusion: { name: "flutils", url: "https://frontlinefusion.com" }
182
- },
183
- layouts: {
184
- "400" => nil, # => inherits from "ApplicationController" layout
185
- "500" => "exception"
186
- },
187
- }
188
-
189
- You can apply any of the above defaults into one of the Rails [`environment files`](http://guides.rubyonrails.org/configuring.html#creating-rails-environments):
190
-
191
- - `config/application.rb`
192
- - `config/environments/development.rb`
193
- - `config/environments/production.rb`
194
- - `config/environments/staging.rb`
195
-
196
- The benefit of this is that it gives you the ability to customize `ExceptionHandler` for *any* of your environments. Contrary to a shitty `initializer`, you're able to sculpt the gem to work for YOU.
197
-
198
- ----
199
-
200
- <p id="dev">
201
- <img src="readme/titles/dev.jpg" title="Development Mode" />
202
- </p>
203
-
204
- Want to test in the `dev` environment?
205
-
206
- #config/application.rb
207
- config.exception_handler = {
208
- dev: true # -> Runs in development mode WITHOUT changing the app environment files
209
- }
210
-
211
- <img src="readme/dev.jpg" title="ExceptionHandler Dev Mode - NEW!!!!!">
212
-
213
- [`config.exceptions_app`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration) *only* works when you have [`config.consider_all_requests_local = true`](http://blog.bigbinary.com/2009/02/05/rescue_action_in_public-local_request-and-how-to-configure-local_request.html), which is `true` in `development`:
214
-
215
- > **`config.consider_all_requests_local`** is a flag. If true then any error will cause detailed debugging information to be dumped in the `HTTP` response, and the `Rails::Info controller` will show the application runtime context in `/rails/info/properties`. `True` by default in development and test environments, and false in production mode. For finer-grained control, set this to false and implement `local_request?` in controllers to specify which requests should provide debugging information on errors.
216
-
217
-
218
- If you wish to test **`ExceptionHandler`** in `development`, you'll have to use the `dev: true` option in your `exception_handler` config, *or* change `config.consider_all_requests_local = true` in `config/development.rb`.
219
-
220
- ----
221
-
222
- <br />
223
- <img src="readme/titles/layout.jpg" title="Layout" id="layout" />
224
-
225
- One of the most critial aspects of **`ExceptionHandler`** is the custom `Exception` layout.
226
-
227
- If you want to change the layout (for `500` error pages), you need to use the following:
228
-
229
- <img src="readme/layout.jpg" title="Custom Exceptions Layout For ExceptionHandler" />
230
-
231
- You'll need to [generate](#user-content-view) it into your application before being able to edit:
232
-
233
- ----
234
-
235
- <br />
236
- <img src="readme/titles/view.jpg" title="Views" id="view" />
237
-
238
- **`ExceptionHandler`** comes with its own inbuilt views & controller.
239
-
240
- If you want to change it, you need to add the views into your app with the [`generator`](/lib/generators/exception_handler/views_generator.rb)
241
-
242
- $ rails generate exception_handler:views #-> controller, models, helpers, views & assets
243
- $ rails generate exception_handler:views -v views controllers models helpers assets #-> remove as appropriate to install individual assets
244
-
245
- --
246
-
247
- <img src="readme/show.jpg" title="ExceptionHandler Show view" />
248
-
249
- `ExceptionHandler` uses `exceptions#show` -- located in **`app/views/exception_handler/show.html.erb`** designed to work for all exceptions.
250
-
251
- By default, it is split for use with different layouts, data being available to both.
252
-
253
- This works exactly the same as the other views in your app (IE the `exceptions controller` invokes the `show` action)
254
-
255
- ----
256
-
257
- <br />
258
- <img src="readme/titles/db.jpg" title="Database" id="db" />
259
-
260
- If you want to store exceptions in your `db`, you will need to set up a **migration**:
261
-
262
- $ rails generate exception_handler:migration
263
- $ rake db:migrate
264
-
265
- You will also need to ensure your config db option is either `true` or `"table_name"`:
266
-
267
- <img src="readme/db.jpg" title="ExceptionHandler DB Config">
268
-
269
- <img src="readme/db_screenshot.jpg" title="ExceptionHandler Database">
270
-
271
- > **IMPORTANT**
272
- >
273
- > `ExceptionHandler`'s [new config system](https://github.com/richpeck/exception_handler/wiki/Setup) is `environment` agnostic.
274
- >
275
- > **Where you declare your `db` setting will change depending on your environment**
276
- >
277
- > If you declare `db` in `application.rb`, it will be applicable for all `environments`; only declaring in `production.rb` will set it for production *only*.
278
-
279
- ----
280
-
281
- <p id="support">
282
- <img src="readme/titles/support.jpg" title="1hr & 24 hr Support" />
283
- </p>
284
-
285
- We offer support through [GitHub](http://github.com/richpeck/exception_handler/issues) and [StackOverflow](http://stackoverflow.com/questions/ask?tags=ruby-on-rails+exception-handler).
286
-
287
- Whilst we can't guarantee response times, we are always eager to make sure `ExceptionHandler` is the most secure, robust and effective solution for Rails exception pages. You can use the links below to access support directly:
288
-
289
- Github (~1hr) | Stackoverflow (~24hrs)
290
- :----: | :----:
291
- [![StackOverflow](readme/github.jpg)](https://github.com/richpeck/exception_handler/issues) | [![StackOverflow](readme/stackoverflow.jpg)](http://stackoverflow.com/questions/ask?tags=ruby-on-rails+exception-handler)
292
-
293
- We use **`ExceptionHandler`** in production, so have a vested interest in keeping it running smoothly.
294
-
295
- ---
296
-
297
- <img src="readme/titles/changelog.jpg" title="Changelog" id="changelog" />
298
-
299
- The next version will be **`0.7.0`**. Current is **`0.6.5`**.
300
-
301
- Functionality remains consistent with both releases, the main difference will be the way in which they handle backend processes. **`0.6.5`** completely overhauled the backend, making the `controller`, `model` and `middleware` much more streamlined.
302
-
303
- The biggest update for **`0.6.5.`** has been the removal of most of the middleware, putting the entire system into a central class. This not only allows us to centralize the data structure, but also remove many files which didn't matter.
304
-
305
- Here is a rundown of what to expect ...
306
-
307
- ### 0.7.0
308
- - Completely new style
309
- - Custom exceptions
310
- - Test suite integration
311
- - Full readme / wiki overhaul
312
-
313
- ### → 0.6.5
314
- - Streamlined interface
315
- - ActiveRecord / Middleware overhaul
316
- - Supports Sprockets 4+ ([`manifest.js`](http://eileencodes.com/posts/the-sprockets-4-manifest/))
317
- - Email integration
318
- - Asset overhaul & improvement
319
- - Removed dependencies
320
-
321
- ### 0.5.0
322
- - Added locales
323
- - Email notifications
324
- - Full test suite
325
- - Rails 4.2 & Rails 5.0 native ([`request.env`](https://github.com/rails/rails/commit/05934d24aff62d66fc62621aa38dae6456e276be) fix)
326
- - Controller fixed
327
- - `DB` fixed
328
- - Legacy initializer support ([more](https://github.com/richpeck/exception_handler/wiki/1-Setup))
329
- - Rails asset management improvement
330
- - Reduced gem file
331
-
332
- ### → 0.4.7
333
-
334
- - New config system ([more](https://github.com/richpeck/exception_handler/wiki/1-Setup))
335
- - Fixed controller layout issues
336
- - Streamlined middleware
337
- - New layout & interface implementation
338
-
339
- ----------
340
-
341
- <strong>&copy; 2016</strong> <a href="http://www.frontlineutilities.co.uk" target="_blank" align="absmiddle"><img src="readme/fl.png" height="22" title="Frontline Utilities LTD" alt="Frontline Utilities LTD" align="absmiddle" /></a> <a href="http://stackoverflow.com/users/1143732/richard-peck" target="_blank" align="absmiddle"><img src="https://avatars0.githubusercontent.com/u/1104431" title="Richard Peck" align="absmiddle" height="22" alt="Richard Peck" /></a>
1
+ ![Exception Handler](readme/title.jpg "Exception Handler Logo")
2
+
3
+ <p align="center">
4
+ <font size="4"><strong>Custom 404 & 500 production error pages for Rails 4 & 5.</font></strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="http://badge.fury.io/rb/exception_handler"><img src="https://badge.fury.io/rb/exception_handler.svg" align="absmiddle"></a>
9
+ <a href="http://rubygems.org/richpeck/exception_handler"><img src="http://ruby-gem-downloads-badge.herokuapp.com/exception_handler/0.5.1?type=total&color=brightgreen" align="absmiddle" /></a>
10
+ <a href="https://codeclimate.com/github/richpeck/exception_handler"><img src="https://codeclimate.com/github/richpeck/exception_handler/badges/gpa.svg" align="absmiddle"/></a>
11
+ <a href="https://gemnasium.com/richpeck/exception_handler"><img src="https://gemnasium.com/richpeck/exception_handler.svg" align="absmiddle"></a>
12
+ <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>
13
+ <a href="https://travis-ci.org/richpeck/exception_handler"><img src="https://travis-ci.org/richpeck/exception_handler.svg?branch=master" align="absmiddle"></a>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <strong><a href="#user-content-install">Install</a></strong> → <strong><a href="#user-content-config">Setup</a></strong> → <strong><a href="#user-content-support">Support</a></strong>
18
+ </p>
19
+
20
+ ---
21
+
22
+ <p align="center">
23
+ <img src="readme/version.jpg" /><br/>
24
+ </p>
25
+
26
+ <p align="center">
27
+ <img src="readme/check.png" height="22" title="Fully Responsive" align="absmiddle" />&nbsp; <strong>Responsive</strong> &nbsp;
28
+ <img src="readme/check.png" height="22" title="Branded Error Pages" align="absmiddle" />&nbsp; <strong>Branded Error Pages</strong> &nbsp;
29
+ <img src="readme/check.png" height="22" title="Middleware Exception Handling" align="absmiddle" />&nbsp; <strong>Middleware Exception Handling</strong> &nbsp;
30
+ <img src="readme/check.png" height="22" title="Keep Users Informed" align="absmiddle" />&nbsp; <strong>Fully Customizable</strong> &nbsp;
31
+ </p>
32
+
33
+ <p align="center">
34
+ <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" />
35
+ <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" />
36
+ </p>
37
+
38
+ ---
39
+
40
+ <p align="center">
41
+ <img src="readme/05.jpg" title="Version 0.7.0" />
42
+ </p>
43
+
44
+ <p align="center">
45
+ <img src="readme/titles/rails5.png" title="Fully Rails 5 Compatible" width="550" />
46
+ </p>
47
+
48
+ <p align="center">
49
+ <img src="readme/check_02.png" height="22" title="New Controller" align="absmiddle" />&nbsp; <strong align="absmiddle">New Controller</strong> &nbsp;
50
+ <img src="readme/check_02.png" height="22" title="New Middleware" align="absmiddle" />&nbsp; <strong align="absmiddle">New Middleware</strong> &nbsp;
51
+ <img src="readme/check_02.png" height="22" title="Full Test Suite" align="absmiddle" />&nbsp; <strong align="absmiddle">Full Test Suite</strong> &nbsp;
52
+ <img src="readme/check_02.png" height="22" title="Rails 4 & 5 Compatible" align="absmiddle" />&nbsp; <strong align="absmiddle">Fully Rails 4 & 5 Compatible</strong> &nbsp;
53
+ </p>
54
+
55
+ Brand new `controller` & `middleware` have made **`ExceptionHandler`** even more powerful & efficient. Now you can use `ExceptionHandler` with a single click **plug and play** custom exception pages:
56
+
57
+ <p align="center">
58
+ <br />
59
+ <img src="readme/404.png" title="400 Errors" width="430" />
60
+ <img src="readme/500.png" title="500 Errors" width="430" />
61
+ </p>
62
+
63
+ With major upgrades to the backend, **ExceptionHandler [0.7.0][latest]** is the leading exception management solution for Rails 5:
64
+
65
+ <p align="center">
66
+ <h3>Features</h3>
67
+ Custom 500 Errors Layout || DB || Model || Config || Email || 400 Default Layout || Sprockets 4 || Custom Exceptions
68
+ </p>
69
+
70
+ **ExceptionHandler works 100% with Rails 5 and Sprockets 4**. It hooks DIRECTLY into your existing CSS to create a professional exception interface with NO work on your part…
71
+
72
+ ----
73
+
74
+ <p align="center">
75
+ <br />
76
+ <img src="readme/titles/middleware.png" title="Middleware-Powered Exceptions" width="400" />
77
+ </p>
78
+
79
+ The secret lies in [**`config.exceptions_app`**][exception_app] ↴
80
+
81
+
82
+ ![config.exceptions_app - The key to all Rails exceptions][exceptions_app]
83
+
84
+ Because we handle **`requests`** directly (`message`, `details`, `user agent`), `ExceptionHandler` populates our custom `view` with any details required. This gives us the ability to **maintain your branding** (layout / css) even when exceptions are raised:
85
+
86
+ ![Exceptions handled by the ActiveDispatch::ShowExceptions Middleware][middleware]
87
+
88
+ This is important at is means `ExceptionHandler` has absolutely ZERO bloat on an app. Rails is invoked ONCE (not twice like it is when using routes), delivering a response JUST LIKE if an exception wasn't raised.
89
+
90
+ <p align="center">
91
+ <strong>The <i>ONLY</i> professional solution to catch, process & handle Rails exceptions <i>WITHOUT</i> BLOAT:</strong>
92
+ </p>
93
+
94
+ <p align="center">
95
+ <img src="readme/controller_middleware.jpg" title="ExceptionsController compiles the exception & delivers to the front-end" />
96
+ </p>
97
+
98
+ The REAL beauty of ExceptionHandler is that you only have to serve **two** error responses `400` & `500`. This is per the [HTTP spec](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4) - a browser CANNOT read any other form of error.
99
+
100
+ This means that we can use a single controller action to build our `@exception` object, responding to the HTTP request with the status code raised by the exception. We have built this into a simple & effective solution:
101
+
102
+ ----------
103
+
104
+ <p align="center" id="install">
105
+ <br />
106
+ <img src="readme/titles/install.png" title="1 Click Install for ExceptionHandler 0.7.0 on Rails 5" width="400" />
107
+ </p>
108
+
109
+ [![Gemfile][gemfile]][rubygems] [![Gem][gem]][rubygems]
110
+
111
+ `ExceptionHandler`'s **config** system stores the - you just need to install the gem & let it run.
112
+
113
+ If you want to change *any* settings (detailed [below](#user-content-config)), you **simply** need to change `config/application.rb` or `config/environments/your_env.rb`. The ***POWER*** of this *new config system* means you're able to deploy `ExceptionHandler` in the most unobtrusive, versatile way possible:
114
+
115
+ ----
116
+
117
+ **`ExceptionHandler 0.7.0`** has *drastically* improved our famous 1-click install.
118
+
119
+ Not only have we removed all the bloat, but our initialization process now relies on a *single* hook which will set all the config variables as required. This is stark difference to the myriad of poorly-designed gems which cause massive lag in your Rails initialization process. `ExceptionHandler` is now more streamlined than ever:
120
+
121
+ <p align="center">
122
+ <img src="readme/defaults.jpg" title="ExceptionHandler Default Config Options">
123
+ </p>
124
+
125
+ The **MAGIC** lies in the [`environment files`](http://guides.rubyonrails.org/configuring.html#creating-rails-environments).
126
+
127
+ Instead of dopey initializers (which slow the system down), you can just use the Rails config files to set environment-dependent options. This allows us to maximize performance without any of the overhead associated with old-fashioned gems.
128
+
129
+ > **IMPORTANT**
130
+ >
131
+ > If you're upgrading from >= `0.4.7`, you need to **remove your `exception_handler` initializer**.
132
+ >
133
+ > We've changed the load process to use Rails app config - **you don't need the `exception_handler` initializer any more**
134
+
135
+ ----
136
+
137
+ <p id="defaults">
138
+ <img src="readme/titles/setup/defaults.jpg" title="Defaults" height="75" border="2" />
139
+ </p>
140
+
141
+ As can be seen in[`config`](/lib/exception_handler/config.rb), the following are all the options `ExceptionHandler` accepts:
142
+
143
+ <p align="center">
144
+ <img src="readme/defaults.jpg" title="ExceptionHandler Default Configuration Options">
145
+ </p>
146
+
147
+ # Defaults
148
+ DEFAULTS = {
149
+ dev: false, #-> defaults to "false" for dev mode
150
+ db: false, #-> defaults to :errors if true, else use "table_name" / :table_name
151
+ email: false, #-> requires string email and ActionMailer
152
+ social: {
153
+ facebook: { name: "frontline.utilities", url: "https://facebook.com" },
154
+ twitter: { name: "frontlineutils", url: "http://twitter.com" },
155
+ youtube: { name: "frontlineutils", url: "https://youtube.com/user" },
156
+ linkedin: { name: "frontline-utilities", url: "https://linkedin.com/company" },
157
+ fusion: { name: "flutils", url: "https://frontlinefusion.com" }
158
+ },
159
+ layouts: {
160
+ "400" => nil, # => inherits from "ApplicationController" layout
161
+ "500" => "exception"
162
+ },
163
+ }
164
+
165
+ You can apply any of the above defaults into one of the Rails [`environment files`](http://guides.rubyonrails.org/configuring.html#creating-rails-environments):
166
+
167
+ - `config/application.rb`
168
+ - `config/environments/development.rb`
169
+ - `config/environments/production.rb`
170
+ - `config/environments/staging.rb`
171
+
172
+ The benefit of this is that it gives you the ability to customize `ExceptionHandler` for *any* of your environments. Contrary to a shitty `initializer`, you're able to sculpt the gem to work for YOU.
173
+
174
+ ----
175
+
176
+ ![Development Mode][dev]
177
+
178
+ Want to test in the `dev` environment?
179
+
180
+ # config/application.rb
181
+ config.exception_handler = {
182
+ dev: true # -> Runs in development mode WITHOUT changing the app environment files
183
+ }
184
+
185
+ <img src="readme/dev.jpg" title="ExceptionHandler Dev Mode - NEW!!!!!">
186
+
187
+ [`config.exceptions_app`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration) *only* works when you have [`config.consider_all_requests_local = true`](http://blog.bigbinary.com/2009/02/05/rescue_action_in_public-local_request-and-how-to-configure-local_request.html), which is `true` in `development`:
188
+
189
+ > **`config.consider_all_requests_local`** is a flag. If true then any error will cause detailed debugging information to be dumped in the `HTTP` response, and the `Rails::Info controller` will show the application runtime context in `/rails/info/properties`. `True` by default in development and test environments, and false in production mode. For finer-grained control, set this to false and implement `local_request?` in controllers to specify which requests should provide debugging information on errors.
190
+
191
+
192
+ If you wish to test **`ExceptionHandler`** in `development`, you'll have to use the `dev: true` option in your `exception_handler` config, *or* change `config.consider_all_requests_local = true` in `config/development.rb`.
193
+
194
+ ----
195
+
196
+ <br />
197
+ <img src="readme/titles/layout.jpg" title="Layout" id="layout" />
198
+
199
+ One of the most critial aspects of **`ExceptionHandler`** is the custom `Exception` layout.
200
+
201
+ If you want to change the layout (for `500` error pages), you need to use the following:
202
+
203
+ <img src="readme/layout.jpg" title="Custom Exceptions Layout For ExceptionHandler" />
204
+
205
+ You'll need to [generate](#user-content-view) it into your application before being able to edit:
206
+
207
+ ----
208
+
209
+ ![View][view]
210
+
211
+ **`ExceptionHandler`** comes with its own inbuilt views & controller.
212
+
213
+ If you want to change it, you need to add the views into your app with the [`generator`](/lib/generators/exception_handler/views_generator.rb)
214
+
215
+ $ rails generate exception_handler:views #-> controller, models, helpers, views & assets
216
+ $ rails generate exception_handler:views -v views controllers models helpers assets #-> remove as appropriate to install individual assets
217
+
218
+ --
219
+
220
+ <img src="readme/show.jpg" title="ExceptionHandler Show view" />
221
+
222
+ `ExceptionHandler` uses `exceptions#show` -- located in **`app/views/exception_handler/show.html.erb`** designed to work for all exceptions.
223
+
224
+ By default, it is split for use with different layouts, data being available to both.
225
+
226
+ This works exactly the same as the other views in your app (IE the `exceptions controller` invokes the `show` action)
227
+
228
+ ----
229
+
230
+ ![Database][db]
231
+
232
+ If you want to store exceptions in your `db`, you will need to set up a **migration**:
233
+
234
+ $ rails generate exception_handler:migration
235
+ $ rake db:migrate
236
+
237
+ You will also need to ensure your config db option is either `true` or `"table_name"`:
238
+
239
+ <img src="readme/db.jpg" title="ExceptionHandler DB Config">
240
+
241
+ <img src="readme/db_screenshot.jpg" title="ExceptionHandler Database">
242
+
243
+ > **IMPORTANT**
244
+ >
245
+ > `ExceptionHandler`'s [new config system](https://github.com/richpeck/exception_handler/wiki/Setup) is `environment` agnostic.
246
+ >
247
+ > **Where you declare your `db` setting will change depending on your environment**
248
+ >
249
+ > If you declare `db` in `application.rb`, it will be applicable for all `environments`; only declaring in `production.rb` will set it for production *only*.
250
+
251
+ ----
252
+
253
+ ### ![Support][support]
254
+
255
+ We offer support through [GitHub](http://github.com/richpeck/exception_handler/issues) and [StackOverflow](http://stackoverflow.com/questions/ask?tags=ruby-on-rails+exception-handler).
256
+
257
+ Whilst we can't guarantee response times, we are always eager to make sure `ExceptionHandler` is the most secure, robust and effective solution for Rails exception pages. You can use the links below to access support directly:
258
+
259
+ Github (~1hr) | Stackoverflow (~24hrs)
260
+ :----: | :----:
261
+ [![StackOverflow](readme/github.jpg)](https://github.com/richpeck/exception_handler/issues) | [![StackOverflow](readme/stackoverflow.jpg)](http://stackoverflow.com/questions/ask?tags=ruby-on-rails+exception-handler)
262
+
263
+ We use **`ExceptionHandler`** in production, so have a vested interest in keeping it running smoothly.
264
+
265
+ ---
266
+
267
+ # ![Changelog - Current Version 0.7.0][changelog]
268
+
269
+ Current version is [**`0.7.0`**](https://github.com/richpeck/exception_handler/releases/latest)
270
+
271
+ Functionality remains consistent with previous releases, main difference will be the way in which they handle backend processes. **`0.7.0`** completely overhauled the backend, making the `controller`, `model` and `middleware` much more streamlined.
272
+
273
+ The biggest update for **`0.7.0.`** has been the removal of most middleware, putting the entire system into a central class. This not only allows us to centralize the data structure, but also remove many files which didn't matter.
274
+
275
+ Here is a rundown of what's been implemented
276
+
277
+ ### [→ 0.7.0](https://github.com/richpeck/exception_handler/releases/tag/0.7.0)
278
+ - [ ] Wildcard mime types
279
+ - [ ] Custom exceptions
280
+ - [x] Test suite integration
281
+ - [ ] Exception "mapping" (choose which exceptions to handle)
282
+ - [x] [Email](https://github.com/richpeck/exception_handler/wiki/2-Email)
283
+ - [x] Model backend
284
+ - [x] Sprockets 4+
285
+ - [x] Readme / wiki overhaul
286
+
287
+ ### [→ 0.6.5](https://github.com/richpeck/exception_handler/releases/tag/0.6.5)
288
+ - [x] Streamlined interface
289
+ - [x] ActiveRecord / Middleware overhaul
290
+ - [x] Supports Sprockets 4+ ([`manifest.js`](http://eileencodes.com/posts/the-sprockets-4-manifest/))
291
+ - [x] Email integration
292
+ - [x] Asset overhaul & improvement
293
+ - [x] Removed dependencies
294
+
295
+ ### [→ 0.5.0](https://github.com/richpeck/exception_handler/releases/tag/0.5.0)
296
+ - [x] Added locales
297
+ - [x] Email notifications
298
+ - [x] Full test suite
299
+ - [x] Rails 4.2 & Rails 5.0 native ([`request.env`](https://github.com/rails/rails/commit/05934d24aff62d66fc62621aa38dae6456e276be) fix)
300
+ - [x] Controller fixed
301
+ - [x] `DB` fixed
302
+ - [x] Legacy initializer support ([more](https://github.com/richpeck/exception_handler/wiki/1-Setup))
303
+ - [x] Rails asset management improvement
304
+ - [x] Reduced gem file
305
+
306
+ ### [→ 0.4.6](https://github.com/richpeck/exception_handler/releases/tag/0.4.6)
307
+ - [x] New config system ([more](https://github.com/richpeck/exception_handler/wiki/1-Setup))
308
+ - [x] Fixed controller layout issues
309
+ - [x] Streamlined middleware
310
+ - [x] New layout & interface implementation
311
+
312
+ ----------
313
+
314
+ :copyright: <a href="http://www.frontlineutilities.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>
315
+
316
+ <!-- ################################### -->
317
+ <!-- ################################### -->
318
+
319
+ <!-- Refs -->
320
+ <!-- Comments http://stackoverflow.com/a/20885980/1143732 -->
321
+ <!-- Images https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images -->
322
+
323
+ <!-- Images -->
324
+ [config.exceptions_app]: readme/config.exceptions_app.jpg
325
+ [gem]: readme/gem.jpg
326
+ [gemfile]: readme/gemfile.jpg
327
+ [middleware]: readme/middleware.jpg
328
+ [exceptions_app]: readme/exceptions_app.jpg
329
+ [view]: readme/titles/view.jpg
330
+ [dev]: readme/titles/dev.jpg
331
+ [db]: readme/titles/db.png
332
+ [support]: readme/titles/support.png "Support"
333
+ [changelog]: readme/titles/changelog.png "Changelog"
334
+ [contribution]: readme/titles/contributions.png "Contributions"
335
+ [fl]: readme/fl.jpg "Frontline Utilities LTD"
336
+ [profile]: https://avatars0.githubusercontent.com/u/1104431 "R Peck"
337
+
338
+ <!-- Links -->
339
+ [latest]: https://github.com/richpeck/exception_handler/releases/latest
340
+ [show_exception]: https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb
341
+ [exception_app]: http://guides.rubyonrails.org/configuring.html#rails-general-configuration
342
+ [rubygems]: http://rubygems.org/gems/exception_handler
343
+ [frontlineutilities.co.uk]: http://www.frontlineutilities.co.uk
344
+ [stackoverflow.com]: http://stackoverflow.com/users/1143732/richard-peck?tab=profile
345
+ [fork]: #fork-destination-box
346
+ [pull]: http://github.com/richpeck/exception_handler/pulls
347
+
348
+ <!-- ################################### -->
349
+ <!-- ################################### -->