exception_handler 0.0.25 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3ecf6db313677575e4982d5feb980e84aaf6c1a
4
- data.tar.gz: 04f89200bc55afdd98c2ee56a31576742d6d7a2b
3
+ metadata.gz: e1e32a60e6d820806fc19a72664d3713630b4986
4
+ data.tar.gz: 6ba577f2b71bc13222d2cfa88a970736c53fc089
5
5
  SHA512:
6
- metadata.gz: 2f92d3453a3c1f2e51325d5edf12ab5dc1deaf54636f6f2607866893ed0fb3cb3ee4f4d09994df22de0156fe5d573b38f0f5ee177e334cac11061119b62eaceb
7
- data.tar.gz: 3401ff97b938d7eef821f9796ac7a84f87eed0c06eebe7f7fe87ae6d6cd2509c8bef90157de8465167c1381b070d1958d65c4cee425db4bb62d42576f6d13447
6
+ metadata.gz: 1c9bc99f7043be2a6266afed2ecabca7f01927565f8098e85d607dd533df13eb3f8ca5a8b8e84f93d34586a2c942a08c4d2d9e00f3b13163c9cd6229242277ce
7
+ data.tar.gz: f13e51b07425ace2e5849859861f076d8b2c36c2f63be93b0853c399c7f1f13aa3e89b8a0ca18de9860a4c3b9958d161032078e1345e73b09d9443dcc95547f7
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 2.0.0
3
+ - 2.1.1
4
+ - ruby-head
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in exception_handler.gemspec
4
- gemspec
3
+ # Specify your gem's dependencies in custom_error_pages.gemspec
4
+ gemspec
data/README.md CHANGED
@@ -1,11 +1,18 @@
1
1
  # ExceptionHandler
2
2
 
3
- Exception Handler is a gem to help you better capture & handle exceptions in production Rails apps.
3
+ [![Gem Version](https://badge.fury.io/rb/exception_handler.svg)](http://badge.fury.io/rb/exception_handler)
4
+ [![Code Climate](https://codeclimate.com/github/richpeck/exception_handler.png)](https://codeclimate.com/github/richpeck/exception_handler)
5
+ [![Coverage Status](https://coveralls.io/repos/richpeck/exception_handler/badge.png)](https://coveralls.io/r/richpeck/exception_handler)
6
+ [![Build Status](https://travis-ci.org/richpeck/exception_handler.svg?branch=master)](https://travis-ci.org/richpeck/exception_handler)
4
7
 
5
- Firstly, the gem includes Middleware to save errors in your database.
6
- Second, it includes an `exception` controller to route your errors to specific pages.
8
+ **ExceptionHandler** Rails Gem (adapted from [this tutorial](https://gist.github.com/wojtha/8433843))
7
9
 
8
- The gem is born out of our work at [frontline utilities](http://frontlineutilities.co.uk/ruby-on-rails/exception-handler)
10
+ Works with the [`config.exceptions_app`](http://guides.rubyonrails.org/configuring.html#rails-general-configuration) hook in Rails' middleware stack:
11
+
12
+ ```config.exceptions_app sets the exceptions application invoked by the ShowException middleware when an exception happens. Defaults to ActionDispatch::PublicExceptions.new(Rails.public_path).```
13
+
14
+
15
+ ---------
9
16
 
10
17
  ## Installation
11
18
 
@@ -21,8 +28,30 @@ Or install it yourself as:
21
28
 
22
29
  $ gem install exception_handler
23
30
 
31
+ ---------
32
+
24
33
  ## Usage
25
34
 
26
- TODO: Write usage instructions here
35
+ ###Dev
36
+
37
+ #config/environments/development.rb
38
+ config.consider_all_requests_local = false # true
39
+
40
+ `config.exceptions_app` is used in Rails' production environment. Therefore, if you wish to test the gem in dev,
41
+ you'll need to make your app process requests as `production` for now. This is a temporary step, and will be
42
+ resolved in a new version
43
+
44
+ ###Production
45
+
46
+ No action required
47
+
48
+
49
+ --------
50
+
51
+ ## Contributing
27
52
 
28
- ## Contributing
53
+ 1. Fork it ( https://github.com/richpeck/exception_handler/fork )
54
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
55
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
56
+ 4. Push to the branch (`git push origin my-new-feature`)
57
+ 5. Create a new Pull Request
@@ -0,0 +1,58 @@
1
+ module ExceptionHandler
2
+ class ExceptionController < ApplicationController
3
+
4
+ #Response
5
+ respond_to :html, :xml, :json
6
+
7
+ #Dependencies
8
+ before_action :status
9
+
10
+ #Layout
11
+ layout :layout_status
12
+
13
+ ####################
14
+ # Action #
15
+ ####################
16
+
17
+ #Show
18
+ def show
19
+ respond_with status: @status
20
+ end
21
+
22
+ ####################
23
+ # Dependencies #
24
+ ####################
25
+
26
+ protected
27
+
28
+ #Info
29
+ def status
30
+ @exception = env['action_dispatch.exception']
31
+ @status = ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
32
+ @response = ActionDispatch::ExceptionWrapper.rescue_responses[@exception.class.name]
33
+ end
34
+
35
+ #Format
36
+ def details
37
+ @details ||= {}.tap do |h|
38
+ I18n.with_options scope: [:exception, :show, @response], exception_name: @exception.class.name, exception_message: @exception.message do |i18n|
39
+ h[:name] = i18n.t "#{@exception.class.name.underscore}.title", default: i18n.t(:title, default: @exception.class.name)
40
+ h[:message] = i18n.t "#{@exception.class.name.underscore}.description", default: i18n.t(:description, default: @exception.message)
41
+ end
42
+ end
43
+ end
44
+ helper_method :details
45
+
46
+ ####################
47
+ # Layout #
48
+ ####################
49
+
50
+ private
51
+
52
+ #Layout
53
+ def layout_status
54
+ @status.to_s == "404" ? "application" : "error"
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,5 @@
1
+ .box
2
+ %h1
3
+ = details[:name]
4
+ %p
5
+ = details[:message]
@@ -0,0 +1,57 @@
1
+ !!!
2
+ %html
3
+ %head
4
+
5
+ /Info
6
+ = meta_tags
7
+
8
+ /Styling
9
+ :sass
10
+ html
11
+ height: 100%
12
+ background: #fff url(#{image_path "custom_error_pages/bg.png"}) bottom repeat-x
13
+
14
+ body
15
+ font-family: Helvetica, Arial, Sans-Serif
16
+ font-size: 14px
17
+
18
+ .error_container
19
+ display: block
20
+ margin: auto
21
+ margin: 10% auto 0 auto
22
+ width: 40%
23
+
24
+ .error_container .error
25
+ display: block
26
+ text-align: center
27
+
28
+ .error_container .error img
29
+ display: block
30
+ margin: 0 auto 15px auto
31
+
32
+ .error_container .message > *
33
+ display: block
34
+
35
+ .error_container .message strong
36
+ font-weight: bold
37
+ color: #f00
38
+
39
+ .error_container .contact_info
40
+ display: block
41
+ text-align: center
42
+ margin: 25px 0 0 0
43
+
44
+ .error_container .contact_info a
45
+ display: inline-block
46
+ margin: 0
47
+ opacity: 0.4
48
+ transition: opacity 0.15s ease
49
+
50
+ .error_container .contact_info a:hover
51
+ opacity: 0.8
52
+
53
+
54
+ /Body
55
+ %body
56
+ .error_container
57
+ = yield
@@ -6,21 +6,20 @@ require 'exception_handler/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "exception_handler"
8
8
  spec.version = ExceptionHandler::VERSION
9
- spec.authors = ["Richard Peck", "Joe Hilton"]
10
- spec.email = ["rpeck@frontlineutilities.co.uk", "jhilton@frontlineutilities.co.uk"]
11
- spec.summary = %q{Middleware & Controller To Handle Errors In Production Rails Apps}
12
- spec.description = %q{Exception Handler gives you middleware & an exception controller, to both capture exceptions & store them in your db; and to have custom error pages.}
13
- spec.homepage = "http://frontlineutilities.co.uk/ruby-on-rails/exception-handler"
9
+ spec.authors = ["Richard Peck"]
10
+ spec.email = ["rpeck@frontlineutilities.co.uk"]
11
+ spec.summary = %q{Rails gem to show custom error pages in production. Also logs errors in "errors" db if required}
12
+ spec.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
+ spec.homepage = "http://frontlineutilities.co.uk/ror/custom_error_pages"
14
14
  spec.license = "MIT"
15
- spec.metadata = { "source" => "https://github.com/richpeck/exception_handler" }
16
15
 
17
16
  spec.files = `git ls-files -z`.split("\x0")
18
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.post_install_message = "Thank you for installing!"
23
-
24
21
  spec.add_development_dependency "bundler", "~> 1.6"
25
- spec.add_development_dependency "rake"
26
- end
22
+ spec.add_development_dependency "rails", "~> 4.0.0"
23
+ spec.add_development_dependency "haml", "~> 4.0.5"
24
+ spec.add_development_dependency "sass", "~> 3.3.7"
25
+ end
@@ -1,48 +1,20 @@
1
- ######################################################
1
+ ###########################################
2
2
 
3
3
  require "action_dispatch"
4
+
4
5
  require "exception_handler/version"
5
6
  require "exception_handler/parser"
6
7
 
7
- ######################################################
8
+ ###########################################
8
9
 
9
10
  module ExceptionHandler
10
11
 
11
- #Hook
12
- class Engine < ::Rails::Engine
13
- config.middleware.use 'ExceptionHandler::Message' #DB / Email
14
- config.exceptions_app = ->(env) { ExceptionController.action(:show).call(env) } #Error Pages
15
- end
16
-
17
- #DB / Email
18
- class Message
19
-
20
- # Init
21
- def initialize(app)
22
- @app = app
23
- end
24
-
25
- #Error
26
- def call(env)
27
- @app.call(env)
28
-
29
- rescue Exception => exception
30
- request = ActionDispatch::Request.new(env)
31
- controller = env['action_controller.instance']
32
-
33
- ErrorHandler::Parser.new(exception, request, controller).save unless self.ignore?(exception, request)
34
- raise exception
35
- end
36
-
37
- #Ignore
38
- def ignore?(exception, request, ignored = {})
39
- ignored[:errors] = [ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound]
40
- ignored[:bots] = /\b(Baidu|Gigabot|Googlebot|libwww-per|lwp-trivial|msnbot|SiteUptime|Slurp|Wordpress|ZIBB|ZyBorg|Yandex|Jyxobot|Huaweisymantecspider|ApptusBot)\b/i
41
-
42
- return true if ignored[:errors].include?(exception.class) && request.referer.blank?
43
- return true if request.user_agent =~ ignored[:bots]
12
+ #Exception Handler
13
+ class Exceptions < Rails::Engine
14
+ initializer "exception_handler.configure_rails_initialization" do |app|
15
+ app.config.middleware.use "ExceptionHandler::Message" #Parser
16
+ app.config.exceptions_app = ->(env) { ExceptionHandler::ExceptionController.action(:show).call(env) } #Pages
44
17
  end
45
-
46
18
  end
47
19
 
48
20
  end
@@ -1,4 +1,37 @@
1
- module ErrorHandler
1
+ module ExceptionHandler
2
+
3
+ #Message
4
+ class Message
5
+
6
+ # Init
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ #Error
12
+ def call(env)
13
+ @app.call(env)
14
+
15
+ rescue Exception => exception
16
+ request = ActionDispatch::Request.new(env)
17
+ controller = env['action_controller.instance']
18
+
19
+ ExceptionHandler::Parser.new(exception, request, controller).save unless self.ignore?(exception, request)
20
+ raise exception
21
+ end
22
+
23
+ #Ignore
24
+ def ignore?(exception, request, ignored = {})
25
+ ignored[:errors] = [ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound]
26
+ ignored[:bots] = /\b(Baidu|Gigabot|Googlebot|libwww-per|lwp-trivial|msnbot|SiteUptime|Slurp|Wordpress|ZIBB|ZyBorg|Yandex|Jyxobot|Huaweisymantecspider|ApptusBot)\b/i
27
+
28
+ return true if ignored[:errors].include?(exception.class) && request.referer.blank?
29
+ return true if request.user_agent =~ ignored[:bots]
30
+ end
31
+
32
+ end
33
+
34
+ #Parse
2
35
  class Parser
3
36
 
4
37
  #Init
@@ -9,7 +42,7 @@ module ErrorHandler
9
42
  #Save
10
43
  def save
11
44
  ActiveRecord::Base.logger.silence do
12
- Error.create(relevant_info)
45
+ #ExceptionHandler::Error.create(relevant_info)
13
46
  end
14
47
  log(relevant_info)
15
48
  end
@@ -1,3 +1,3 @@
1
1
  module ExceptionHandler
2
- VERSION = "0.0.25"
3
- end
2
+ VERSION = "0.2.0"
3
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.25
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Peck
8
- - Joe Hilton
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-26 00:00:00.000000000 Z
11
+ date: 2014-05-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
@@ -26,43 +25,74 @@ dependencies:
26
25
  - !ruby/object:Gem::Version
27
26
  version: '1.6'
28
27
  - !ruby/object:Gem::Dependency
29
- name: rake
28
+ name: rails
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
- - - '>='
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: haml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
33
46
  - !ruby/object:Gem::Version
34
- version: '0'
47
+ version: 4.0.5
35
48
  type: :development
36
49
  prerelease: false
37
50
  version_requirements: !ruby/object:Gem::Requirement
38
51
  requirements:
39
- - - '>='
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 4.0.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.3.7
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
40
67
  - !ruby/object:Gem::Version
41
- version: '0'
42
- description: Exception Handler gives you middleware & an exception controller, to
43
- both capture exceptions & store them in your db; and to have custom error pages.
68
+ version: 3.3.7
69
+ description: Rails gem to create custom error pages. Captures exceptions using "exception_app"
70
+ callback, routing to "Exception" controller, rendering the view as required.
44
71
  email:
45
72
  - rpeck@frontlineutilities.co.uk
46
- - jhilton@frontlineutilities.co.uk
47
73
  executables: []
48
74
  extensions: []
49
75
  extra_rdoc_files: []
50
76
  files:
51
77
  - .gitignore
78
+ - .travis.yml
52
79
  - Gemfile
53
80
  - LICENSE.txt
54
81
  - README.md
55
82
  - Rakefile
83
+ - app/controllers/exception_handler/exception_controller.rb
84
+ - app/views/exception_handler/exception/show.html.haml
85
+ - app/views/layouts/error.html.haml
56
86
  - exception_handler.gemspec
57
87
  - lib/exception_handler.rb
58
88
  - lib/exception_handler/parser.rb
59
89
  - lib/exception_handler/version.rb
60
- homepage: http://frontlineutilities.co.uk/ruby-on-rails/exception-handler
90
+ - vendor/assets/images/exception_handler/bg.png
91
+ homepage: http://frontlineutilities.co.uk/ror/custom_error_pages
61
92
  licenses:
62
93
  - MIT
63
- metadata:
64
- source: https://github.com/richpeck/exception_handler
65
- post_install_message: Thank you for installing!
94
+ metadata: {}
95
+ post_install_message:
66
96
  rdoc_options: []
67
97
  require_paths:
68
98
  - lib
@@ -81,5 +111,6 @@ rubyforge_project:
81
111
  rubygems_version: 2.0.14
82
112
  signing_key:
83
113
  specification_version: 4
84
- summary: Middleware & Controller To Handle Errors In Production Rails Apps
114
+ summary: Rails gem to show custom error pages in production. Also logs errors in "errors"
115
+ db if required
85
116
  test_files: []