exception_handler 0.4.7 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +11 -0
- data/.rspec +3 -1
- data/Gemfile +1 -1
- data/README.md +241 -92
- data/app/controllers/exception_handler/exception_controller.rb +13 -44
- data/app/helpers/exception_handler/application_helper.rb +47 -23
- data/app/models/exception_handler/error.rb +10 -9
- data/app/services/exception_handler/exception.rb +34 -0
- data/app/views/exception_handler/exception/show.html.erb +9 -6
- data/app/views/layouts/exception.html.erb +3 -3
- data/config/locales/en.yml +9 -0
- data/exception_handler.gemspec +16 -6
- data/lib/exception_handler.rb +67 -32
- data/lib/exception_handler/config.rb +49 -46
- data/lib/exception_handler/parse.rb +17 -17
- data/lib/exception_handler/parser/data.rb +57 -51
- data/lib/exception_handler/parser/ignore.rb +23 -23
- data/lib/exception_handler/version.rb +1 -1
- data/lib/generators/exception_handler/migration_generator.rb +17 -17
- data/lib/generators/exception_handler/views_generator.rb +27 -27
- data/spec/database.yml +3 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +4 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/javascripts/cable.coffee +11 -0
- data/spec/dummy/app/assets/javascripts/channels/.keep +0 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +15 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +34 -0
- data/spec/dummy/bin/update +29 -0
- data/spec/dummy/config.ru +8 -0
- data/spec/dummy/config/application.rb +21 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +62 -0
- data/spec/dummy/config/environments/production.rb +87 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +6 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/callback_terminator.rb +6 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/per_form_csrf_tokens.rb +4 -0
- data/spec/dummy/config/initializers/request_forgery_protection.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/puma.rb +47 -0
- data/spec/dummy/config/routes.rb +6 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/exception_handler.rb +22 -0
- data/spec/helpers/exception_handler/application_helper_spec.rb +42 -0
- data/spec/spec_helper.rb +28 -9
- metadata +102 -39
- data/readme/400.jpg +0 -0
- data/readme/500.jpg +0 -0
- data/readme/application_controller.jpg +0 -0
- data/readme/config.jpg +0 -0
- data/readme/db.jpg +0 -0
- data/readme/db_edit.jpg +0 -0
- data/readme/dev.jpg +0 -0
- data/readme/exception_controller.jpg +0 -0
- data/readme/exceptions_app.png +0 -0
- data/readme/layout.jpg +0 -0
- data/readme/parser.jpg +0 -0
- data/readme/rubygems.jpg +0 -0
- data/readme/source/screen.psd +0 -0
- data/readme/source/subtitle.psd +0 -0
- data/readme/source/title.psd +0 -0
- data/readme/subtitle.jpg +0 -0
- data/readme/title.jpg +0 -0
- data/readme/titles/bugs.png +0 -0
- data/readme/titles/contents.png +0 -0
- data/readme/titles/contribution.png +0 -0
- data/readme/titles/custom_error_pages.png +0 -0
- data/readme/titles/support.png +0 -0
- data/readme/titles/testing.png +0 -0
- data/readme/titles/title.psd +0 -0
- data/readme/view.jpg +0 -0
|
@@ -2,34 +2,26 @@ module ExceptionHandler
|
|
|
2
2
|
class ExceptionController < ApplicationController
|
|
3
3
|
|
|
4
4
|
#Response
|
|
5
|
+
#http://www.justinweiss.com/articles/respond-to-without-all-the-pain/
|
|
5
6
|
respond_to :html, :xml, :json
|
|
6
7
|
|
|
7
|
-
#Dependencies
|
|
8
|
-
before_action :status, :app_details
|
|
9
|
-
|
|
10
8
|
#Layout
|
|
11
|
-
layout :
|
|
9
|
+
layout :layout
|
|
12
10
|
|
|
13
11
|
#Helpers
|
|
14
|
-
helper ExceptionHandler::
|
|
12
|
+
helper ExceptionHandler::Engine.helpers #-> HELPERS http://stackoverflow.com/questions/9809787/why-is-my-rails-mountable-engine-not-loading-helper-methods-correctly
|
|
15
13
|
include Rails.application.routes.url_helpers #-> ROUTES http://stackoverflow.com/a/6074911/1143732
|
|
16
14
|
|
|
17
15
|
####################
|
|
18
16
|
# Action #
|
|
19
17
|
####################
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
#Show
|
|
20
|
+
#Amend responses in tests
|
|
21
|
+
#Need to test validity of JSON responses etc
|
|
22
22
|
def show
|
|
23
|
-
@
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
## Config "404 block" handler ##
|
|
27
|
-
if /^(5[0-9]{2})$/ !~ @status.to_s && ExceptionHandler.config.layouts["404"] #-> http://www.justskins.com/forums/ruby-s-regexp-is-52846.html
|
|
28
|
-
eval ExceptionHandler.config.layouts["404"]
|
|
29
|
-
else
|
|
30
|
-
## Render (if eval do anything) ##
|
|
31
|
-
render status: @status
|
|
32
|
-
end
|
|
23
|
+
@exception = ExceptionHandler::Exception.new request #-> Service Object
|
|
24
|
+
render status: @exception.status #-> Show apppropriate response
|
|
33
25
|
end
|
|
34
26
|
|
|
35
27
|
####################
|
|
@@ -38,23 +30,8 @@ module ExceptionHandler
|
|
|
38
30
|
|
|
39
31
|
protected
|
|
40
32
|
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
@exception = env['action_dispatch.exception']
|
|
44
|
-
@status = ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
|
|
45
|
-
@response = ActionDispatch::ExceptionWrapper.rescue_responses[@exception.class.name]
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
#Format
|
|
49
|
-
def details
|
|
50
|
-
@details ||= {}.tap do |h|
|
|
51
|
-
I18n.with_options scope: [:exception, :show, @response], exception_name: @exception.class.name, exception_message: @exception.message do |i18n|
|
|
52
|
-
h[:name] = i18n.t "#{@exception.class.name.underscore}.title", default: i18n.t(:title, default: @exception.class.name)
|
|
53
|
-
h[:message] = i18n.t "#{@exception.class.name.underscore}.description", default: i18n.t(:description, default: @exception.message)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
helper_method :details
|
|
33
|
+
# Status declarations moved to "show" w/ service object
|
|
34
|
+
# Details moved to "View Helper"
|
|
58
35
|
|
|
59
36
|
####################
|
|
60
37
|
# Layout #
|
|
@@ -63,19 +40,11 @@ module ExceptionHandler
|
|
|
63
40
|
private
|
|
64
41
|
|
|
65
42
|
#Layout
|
|
66
|
-
def
|
|
67
|
-
|
|
68
|
-
when 404
|
|
69
|
-
ExceptionHandler.config.layouts["400"] || nil #-> inherits ApplicationController layout
|
|
70
|
-
else
|
|
71
|
-
ExceptionHandler.config.layouts["500"] #-> should pull default if none sepecified
|
|
72
|
-
end
|
|
43
|
+
def layout
|
|
44
|
+
(/^(5[0-9]{2})$/ !~ @exception.code.to_s) ? (ExceptionHandler.config.layouts["400"] || nil) : ExceptionHandler.config.layouts["500"] #-> if not 500, use predefined layout
|
|
73
45
|
end
|
|
74
46
|
|
|
75
|
-
|
|
76
|
-
def app_details
|
|
77
|
-
@app_name = Rails.application.class.parent_name
|
|
78
|
-
end
|
|
47
|
+
####################
|
|
79
48
|
|
|
80
49
|
end
|
|
81
50
|
end
|
|
@@ -1,32 +1,56 @@
|
|
|
1
1
|
module ExceptionHandler
|
|
2
|
-
|
|
2
|
+
module ApplicationHelper
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
#http://stackoverflow.com/a/5795683/1143732
|
|
6
|
-
#http://stackoverflow.com/questions/8028021/helpers-in-rails-engine
|
|
7
|
-
#ActiveSupport.on_load( :action_view ){ include ExceptionHandler::ViewHelpers }
|
|
4
|
+
##################
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
#Refs
|
|
7
|
+
#http://stackoverflow.com/a/5795683/1143732
|
|
8
|
+
#http://stackoverflow.com/questions/8028021/helpers-in-rails-engine
|
|
9
|
+
#ActiveSupport.on_load( :action_view ){ include ExceptionHandler::ViewHelpers }
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
services.except(:url).compact.each do |service,username| #-> except http://stackoverflow.com/a/11105831/1143732
|
|
16
|
-
output.push link_to(image_tag("exception_handler/connect/#{service}.png", title: "Find us on " + service.to_s.titleize), link(service), target: :blank, class: service.to_s)
|
|
17
|
-
end
|
|
11
|
+
##################
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
#App (Application name)
|
|
14
|
+
def app
|
|
15
|
+
Rails.application.class.parent_name
|
|
16
|
+
end
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
#Details
|
|
19
|
+
def details
|
|
20
|
+
@details ||= {}.tap do |h|
|
|
21
|
+
I18n.with_options scope: [:exception, :show, @exception.response], message: @exception.message do |i18n|
|
|
22
|
+
h[:name] = i18n.t "#{@exception.class.name.underscore}.title", default: i18n.t(:title, default: @exception.class.name)
|
|
23
|
+
h[:description] = i18n.t "#{@exception.class.name.underscore}.description", default: i18n.t(:description, default: @exception.message)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
url.join("/")
|
|
29
|
-
end
|
|
28
|
+
#Social
|
|
29
|
+
def social *services
|
|
30
|
+
output = []
|
|
31
|
+
# options = args.extract_options! http://simonecarletti.com/blog/2009/09/inside-ruby-on-rails-extract_options-from-arrays/ - args for hash
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
services = ExceptionHandler.config.social unless services.any? #-> http://api.rubyonrails.org/classes/Hash.html#method-i-compact
|
|
34
|
+
services.except(:url).compact.each do |service,username| #-> except http://stackoverflow.com/a/11105831/1143732
|
|
35
|
+
output.push link_to(image_tag("exception_handler/connect/#{service}.png", title: "Find us on " + service.to_s.titleize), link(service), target: :blank, class: service.to_s)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
output.join("").html_safe #-> ruby returns last line
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
##################
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def link service #-> bloated way to allow single references in config
|
|
47
|
+
url = []
|
|
48
|
+
url.push ExceptionHandler.config.social[:url][service]
|
|
49
|
+
url.push ExceptionHandler.config.social[service]
|
|
50
|
+
url.join("/")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
##################
|
|
54
|
+
|
|
55
|
+
end
|
|
32
56
|
end
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
module ExceptionHandler
|
|
2
|
-
|
|
3
|
-
#Table is called "errors"
|
|
4
|
-
#Dev needs to use migration to create db
|
|
5
|
-
def self.table_name
|
|
6
|
-
ExceptionHandler.config.db
|
|
7
|
-
end
|
|
2
|
+
class Error < ActiveRecord::Base
|
|
8
3
|
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
#Table is called "errors"
|
|
5
|
+
#Dev needs to use migration to create db
|
|
6
|
+
def self.table_name
|
|
7
|
+
ExceptionHandler.config.db
|
|
8
|
+
end
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
#Associations
|
|
11
|
+
belongs_to :usable, polymorphic: true
|
|
12
|
+
|
|
13
|
+
end
|
|
13
14
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ExceptionHandler
|
|
2
|
+
class Exception #-> https://www.netguru.co/blog/service-objects-in-rails-will-help
|
|
3
|
+
attr_reader :exception, :request, :class, :message
|
|
4
|
+
|
|
5
|
+
######################
|
|
6
|
+
|
|
7
|
+
def initialize request
|
|
8
|
+
@request = request
|
|
9
|
+
@exception = request.env['action_dispatch.exception']
|
|
10
|
+
|
|
11
|
+
@class = @exception.class
|
|
12
|
+
@message = @exception.message
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
######################
|
|
16
|
+
|
|
17
|
+
# Status code (404, 500 etc)
|
|
18
|
+
def code
|
|
19
|
+
ActionDispatch::ExceptionWrapper.new(@request.env, @exception).status_code
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Server Response ("Not Found" etc)
|
|
23
|
+
def response
|
|
24
|
+
ActionDispatch::ExceptionWrapper.rescue_responses[@exception.class.name]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
######################
|
|
28
|
+
|
|
29
|
+
alias_method :status, :code #-> http://stackoverflow.com/a/11848832/1143732 (has to be below methods)
|
|
30
|
+
|
|
31
|
+
######################
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
<div class="error">
|
|
2
|
-
<% if /^(5[0-9]{2})$/ =~ @status.to_s %>
|
|
2
|
+
<% if /^(5[0-9]{2})$/ =~ @exception.status.to_s %>
|
|
3
3
|
|
|
4
4
|
<!--Message -->
|
|
5
5
|
<%= content_tag :div, class: "message" do %>
|
|
6
6
|
<%= content_tag :div, class: "title" do %>
|
|
7
|
-
<span><%= "#{@status} Error - #{details[:name]}" %></span>
|
|
7
|
+
<span><%= "#{@exception.status} Error - #{details[:name]}" %></span>
|
|
8
8
|
<%= link_to image_tag("exception_handler/close.png"), main_app.root_url, title: "Close (Go back home)", class: "close" %>
|
|
9
9
|
<% end %>
|
|
10
|
+
|
|
10
11
|
<%= content_tag :div, class: "details" do %>
|
|
11
|
-
<%= image_tag "exception_handler/alert.png", title: "#{@status} Error" %>
|
|
12
|
-
<div class="status"><%= @status %> Error</div>
|
|
12
|
+
<%= image_tag "exception_handler/alert.png", title: "#{@exception.status} Error" %>
|
|
13
|
+
<div class="status"><%= @exception.status %> Error</div>
|
|
13
14
|
<% end %>
|
|
15
|
+
|
|
14
16
|
<%= content_tag :div, class: "info" do %>
|
|
15
|
-
<span><%=
|
|
17
|
+
<span><%= details[:description] %></span>
|
|
16
18
|
<div class="notification">
|
|
17
19
|
<%= link_to image_tag("exception_handler/home.png", title: "Go Back Home"), main_app.root_url, class: "home" %>
|
|
18
20
|
<div class="version">v<%= Rails.version %></div>
|
|
19
21
|
<strong>Our developers have been notified - we're working on it!</strong>
|
|
20
22
|
</div>
|
|
21
23
|
<% end %>
|
|
24
|
+
|
|
22
25
|
<% end %>
|
|
23
26
|
|
|
24
27
|
<% else %>
|
|
25
28
|
|
|
26
|
-
<%= content_tag :div,
|
|
29
|
+
<%= content_tag :div, details[:description], class: "message" %>
|
|
27
30
|
|
|
28
31
|
<% end %>
|
|
29
32
|
</div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
|
|
5
5
|
<!--Info -->
|
|
6
|
-
<title><%= "
|
|
6
|
+
<title><%= "Error - #{@exception.status} Error (#{details[:name]})" %></title>
|
|
7
7
|
<%= stylesheet_link_tag "exception_handler/error" %>
|
|
8
8
|
|
|
9
9
|
</head>
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
<%= social %>
|
|
21
21
|
</div>
|
|
22
22
|
<div class="app">
|
|
23
|
-
<strong><%= link_to
|
|
24
|
-
<span> - <%= @status %> Error</span>
|
|
23
|
+
<strong><%= link_to app, main_app.root_url, title: "Go to index" %></strong>
|
|
24
|
+
<span> - <%= @exception.status %> Error</span>
|
|
25
25
|
</div>
|
|
26
26
|
</footer>
|
|
27
27
|
|
data/exception_handler.gemspec
CHANGED
|
@@ -4,26 +4,36 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
4
4
|
require 'exception_handler/version'
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
|
+
|
|
8
|
+
# General
|
|
7
9
|
s.name = "exception_handler"
|
|
8
10
|
s.version = ExceptionHandler::VERSION
|
|
9
|
-
s.authors = ["Richard Peck"
|
|
10
|
-
s.email = ["rpeck@frontlineutilities.co.uk"
|
|
11
|
-
s.summary = %q{Rails gem to show custom error pages in production. Also logs errors in
|
|
11
|
+
s.authors = ["Richard Peck"]
|
|
12
|
+
s.email = ["rpeck@frontlineutilities.co.uk"]
|
|
13
|
+
s.summary = %q{Rails gem to show custom error pages in production. Also logs errors in db & sends notification emails}
|
|
12
14
|
s.description = %q{Rails gem to create custom error pages. Captures exceptions using "exception_app" callback, routing to "Exception" controller, rendering the view as required.}
|
|
13
|
-
s.homepage = "http://
|
|
15
|
+
s.homepage = "http://github.com/richpeck/exception_handler"
|
|
14
16
|
s.license = "MIT"
|
|
15
17
|
|
|
18
|
+
# Files
|
|
16
19
|
s.files = `git ls-files -z`.split("\x0")
|
|
20
|
+
s.files.reject! { |fn| fn.include? "readme" } #-> https://github.com/gauntlt/gauntlt/blob/master/gauntlt.gemspec#L16
|
|
21
|
+
|
|
17
22
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
-
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
|
23
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/}) unless RUBY_VERSION >= "2.2.0" #-> deprecated in Ruby 2.2.0
|
|
19
24
|
s.require_paths = ["lib"]
|
|
20
25
|
|
|
26
|
+
# Options
|
|
21
27
|
s.post_install_message = File.read(File.join(File.dirname(__FILE__), 'post_install_message.md')) #-> https://github.com/jarrett/ichiban/blob/master/ichiban.gemspec#L35
|
|
22
28
|
|
|
29
|
+
# dev Dependencies
|
|
23
30
|
s.add_development_dependency "bundler", "~> 1.6"
|
|
24
31
|
s.add_development_dependency "rails", "~> 4.0.0"
|
|
25
32
|
s.add_development_dependency "activerecord"
|
|
26
33
|
s.add_development_dependency "activesupport"
|
|
27
34
|
s.add_development_dependency "rake"
|
|
28
|
-
s.add_development_dependency "rspec"
|
|
35
|
+
s.add_development_dependency "rspec", "~> 3.3"
|
|
36
|
+
s.add_development_dependency "rspec-rails", "~> 3.3"
|
|
37
|
+
s.add_development_dependency "sqlite3", "~> 1.3.10"
|
|
38
|
+
|
|
29
39
|
end
|
data/lib/exception_handler.rb
CHANGED
|
@@ -13,41 +13,76 @@ Dir.glob(File.join(File.dirname(__FILE__), "exception_handler", '**/*.rb'), &met
|
|
|
13
13
|
|
|
14
14
|
module ExceptionHandler
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
#Config
|
|
17
|
+
#Invoke instance of config (ExceptionHandler.config) -- loads defaults -- can merge through class
|
|
18
|
+
mattr_accessor :config
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
mattr_accessor :config
|
|
20
|
+
#Default (has to init so is available in all areas)
|
|
21
|
+
@@config = "" #-> should initialize class & then append in initializer
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
# Class methods
|
|
24
|
+
class << self
|
|
25
|
+
# Don't have prefix method return anything.
|
|
24
26
|
# This will keep Rails Engine from generating all table prefixes with the engines name
|
|
25
27
|
# http://stackoverflow.com/questions/19435214/rails-mountable-engine-with-isolate-namespace-but-without-prefixed-namespace-on
|
|
26
|
-
def
|
|
27
|
-
|
|
28
|
+
def table_name_prefix
|
|
29
|
+
#No prefix
|
|
28
30
|
end
|
|
31
|
+
end
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
33
|
+
#########################
|
|
34
|
+
|
|
35
|
+
#Exception Handler
|
|
36
|
+
class Engine < Rails::Engine
|
|
37
|
+
#Keep helpers in your engine
|
|
38
|
+
#http://guides.rubyonrails.org/engines.html#inside-an-engine
|
|
39
|
+
#http://stackoverflow.com/questions/31877839/accessing-helpers-from-the-parent-app-in-an-isolated-rails-engine
|
|
40
|
+
#use main_app to call "main app" helpers etc http://stackoverflow.com/a/9178022/1143732 + http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#class-Rails::Engine-label-Using+Engine-27s+routes+outside+Engine
|
|
41
|
+
isolate_namespace ExceptionHandler
|
|
42
|
+
|
|
43
|
+
#Tests (generates dummy Rails app)
|
|
44
|
+
#http://stackoverflow.com/q/32082637/1143732 (ref in question)
|
|
45
|
+
config.generators do |g|
|
|
46
|
+
g.test_framework :rspec
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#Assets
|
|
50
|
+
config.assets.precompile << %w(exception_handler/**)
|
|
51
|
+
|
|
52
|
+
#Config
|
|
53
|
+
config.before_initialize do |app|
|
|
54
|
+
ExceptionHandler.config = ExceptionHandler::Config.new app.config.try(:exception_handler) #-> Var
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
#Boot order:
|
|
58
|
+
#http://api.rubyonrails.org/classes/Rails/Application.html#class-Rails::Application-label-Booting+process
|
|
59
|
+
#1) require "config/boot.rb" to setup load paths
|
|
60
|
+
#2) require railties and engines
|
|
61
|
+
#3) Define Rails.application as "class MyApp::Application < Rails::Application"
|
|
62
|
+
#4) Run config.before_configuration callbacks
|
|
63
|
+
#5) Load config/environments/ENV.rb
|
|
64
|
+
#6) Run config.before_initialize callbacks
|
|
65
|
+
#7) Run Railtie#initializer defined by railties, engines and application.
|
|
66
|
+
# One by one, each engine sets up its load paths, routes and runs its config/initializers/* files.
|
|
67
|
+
#8) Custom Railtie#initializers added by railties, engines and applications are executed
|
|
68
|
+
#9) Build the middleware stack and run to_prepare callbacks
|
|
69
|
+
#10) Run config.before_eager_load and eager_load! if eager_load is true
|
|
70
|
+
#11) Run config.after_initialize callbacks
|
|
71
|
+
|
|
72
|
+
#Hook
|
|
73
|
+
#Needs to fire before better_errors (for dev)
|
|
74
|
+
initializer :exception_handler, before: "better_errors.configure_rails_initialization" do |app| #-> "before" ref - http://blog.carbonfive.com/2011/02/25/configure-your-gem-the-rails-way-with-railtie/ && http://apidock.com/rails/Rails/Initializable/Initializer/before - should degrade gracefully
|
|
75
|
+
|
|
76
|
+
#Action
|
|
77
|
+
app.config.middleware.use ExceptionHandler::Parse if ExceptionHandler.config.try(:db) #-> DB
|
|
78
|
+
app.config.exceptions_app = ->(env) { ExceptionHandler::ExceptionController.action(:show).call(env) } #-> Controller
|
|
79
|
+
|
|
80
|
+
#Dev
|
|
81
|
+
#Logic needed after initialize (app data)
|
|
82
|
+
app.config.consider_all_requests_local = false if Rails.env.development? and ExceptionHandler.config.try(:dev)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
###########################################
|