exception_handler 0.6.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ <!-- ################################### -->