rexception 0.0.1 → 0.1.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 +4 -4
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +3 -0
- data/README.md +61 -0
- data/Rakefile +4 -0
- data/lib/rexception.rb +23 -6
- data/lib/rexception/config.rb +12 -0
- data/lib/rexception/{controller.rb → exceptions_controller.rb} +8 -4
- data/lib/rexception/railtie.rb +0 -2
- data/lib/rexception/version.rb +1 -1
- data/rexception.gemspec +21 -0
- data/spec/dummy/app/views/errors_dir/application.html.erb +1 -0
- data/spec/dummy/app/views/errors_dir/forbidden.html.erb +1 -0
- data/spec/dummy/app/views/errors_dir/not_found.html.erb +1 -0
- data/spec/dummy/app/views/layouts/layout.html.erb +1 -0
- data/spec/dummy/application.rb +48 -0
- data/spec/dummy/bin/rails +5 -0
- data/spec/dummy/config.ru +1 -0
- data/spec/requests/error_pages_spec.rb +24 -0
- data/spec/spec_helper.rb +9 -0
- metadata +25 -11
- data/lib/rexception/setting.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f1548316fad12668415072e05a723299ebce5b2
|
4
|
+
data.tar.gz: 624cc7489047fec4d5778db9ec3519ae492b402a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d059c5e073e1e4c761cf73dd0f6b963e5b0b6fa6780723ced702512c8e8711b110db07ef1701c73c4dadc18f3bce592536469a6ccab3d2add0b726918634ecda
|
7
|
+
data.tar.gz: dcc9fe3ff08f459b831eba0976f3f8e74608a1242d8afb5caa13418c96eeeee30aa6ed3aee4775d6e4aa82408d7bfc61a5b9c04e310aaa6a49ac012251a9dfb7
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Rexception
|
2
|
+
|
3
|
+
[](https://travis-ci.org/kami30k/rexception)
|
4
|
+
[](http://badge.fury.io/rb/rexception)
|
5
|
+
|
6
|
+
Rexception is a Rails plugin that renders error pages dynamically, such as 403, 404, 500, and so on.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'rexception'
|
14
|
+
```
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
```
|
19
|
+
$ bundle
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
The simplest way, just add `app/views/errors/application.html.erb`.
|
25
|
+
That's it, and Rails application render it when raise any errors.
|
26
|
+
|
27
|
+
If you placed specific views, such as `forbidden.html.erb` or `not_found.html.erb`, Rexception prefers these views to `application.html.erb`.
|
28
|
+
(File name is see also: [ActionDispatch::ExceptionWrapper.rescue_responses](https://github.com/rails/rails/blob/083f657c0f1990e980d33f89f44d8943a9270475/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb#L9-L19))
|
29
|
+
|
30
|
+
And you can specify layout file name, directory name to place views, and custom exceptions.
|
31
|
+
Create `config/initializers/rexception.rb` and add following lines:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
Rexception.configure do |config|
|
35
|
+
# Layout file name to use for rendering error page.
|
36
|
+
config.layout = 'application'
|
37
|
+
|
38
|
+
# Directory name where you place error pages.
|
39
|
+
config.errors_dir = 'errors_dir'
|
40
|
+
|
41
|
+
# Pairs of custom exceptions and statuses.
|
42
|
+
config.rescue_responses = {
|
43
|
+
'CustomException' => :not_found
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
```
|
48
|
+
|
49
|
+
In `development` mode, you should add this line to `config/environments/development.rb` to render error pages:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
config.consider_all_requests_local = false
|
53
|
+
```
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
|
57
|
+
1. Fork it ( https://github.com/kami30k/rexception/fork )
|
58
|
+
2. Create your feature branch (git checkout -b my-new-feature)
|
59
|
+
3. Commit your changes (git commit -am 'Add some feature')
|
60
|
+
4. Push to the branch (git push origin my-new-feature)
|
61
|
+
5. Create a new Pull Request
|
data/Rakefile
CHANGED
data/lib/rexception.rb
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
require 'rexception/version'
|
2
|
-
require 'rexception/controller'
|
3
2
|
require 'rexception/railtie' if defined?(Rails)
|
4
3
|
|
5
4
|
module Rexception
|
6
|
-
autoload :
|
5
|
+
autoload :ExceptionsController, 'rexception/exceptions_controller'
|
7
6
|
|
8
7
|
class << self
|
9
|
-
|
10
|
-
|
8
|
+
# Layout file name to use for rendering error page.
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
attr_accessor :layout
|
12
|
+
|
13
|
+
# Directory name where you place error pages.
|
14
|
+
#
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :errors_dir
|
17
|
+
|
18
|
+
# Pairs of custom exceptions and statuses.
|
19
|
+
#
|
20
|
+
# @return [Hash{String => Symbol}]
|
21
|
+
def rescue_responses=(rescue_responses)
|
22
|
+
ActionDispatch::ExceptionWrapper.rescue_responses.merge!(rescue_responses)
|
11
23
|
end
|
12
24
|
|
13
|
-
|
14
|
-
|
25
|
+
# Configuring module attributes by initializer.
|
26
|
+
#
|
27
|
+
# @yield Rexception
|
28
|
+
def configure
|
29
|
+
yield self
|
15
30
|
end
|
16
31
|
end
|
17
32
|
end
|
33
|
+
|
34
|
+
require 'rexception/config'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Rexception.configure do |config|
|
2
|
+
# Layout file name to use for rendering error page.
|
3
|
+
config.layout = 'application'
|
4
|
+
|
5
|
+
# Directory name where you place error pages.
|
6
|
+
config.errors_dir = 'errors_dir'
|
7
|
+
|
8
|
+
# Pairs of custom exceptions and statuses.
|
9
|
+
config.rescue_responses = {
|
10
|
+
'CustomException' => :not_found
|
11
|
+
}
|
12
|
+
end
|
@@ -10,20 +10,24 @@ module Rexception
|
|
10
10
|
RUBY
|
11
11
|
end
|
12
12
|
|
13
|
-
layout -> {
|
13
|
+
layout -> { layout }
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def view(status = status())
|
18
|
-
"#{
|
18
|
+
"#{errors_dir}/#{status}"
|
19
19
|
end
|
20
20
|
|
21
21
|
def status
|
22
22
|
self.class.status(env)
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
26
|
-
Rexception.
|
25
|
+
def layout
|
26
|
+
Rexception.layout
|
27
|
+
end
|
28
|
+
|
29
|
+
def errors_dir
|
30
|
+
Rexception.errors_dir
|
27
31
|
end
|
28
32
|
|
29
33
|
class << self
|
data/lib/rexception/railtie.rb
CHANGED
data/lib/rexception/version.rb
CHANGED
data/rexception.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'rexception/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'rexception'
|
7
|
+
s.version = Rexception::VERSION
|
8
|
+
s.authors = 'kami'
|
9
|
+
s.email = 'kami30k@gmail.com'
|
10
|
+
s.homepage = 'https://github.com/kami30k/rexception'
|
11
|
+
s.summary = 'Rendering error pages for Rails application.'
|
12
|
+
s.description = 'Rendering error pages for Rails application.'
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.files = `git ls-files -z`.split("\x0")
|
16
|
+
|
17
|
+
s.add_dependency 'rails'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec-rails'
|
20
|
+
s.add_development_dependency 'capybara'
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Application Error
|
@@ -0,0 +1 @@
|
|
1
|
+
Forbidden
|
@@ -0,0 +1 @@
|
|
1
|
+
Not Found
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yield %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
$:.unshift File.expand_path('../../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'action_controller/railtie'
|
4
|
+
require 'action_view/railtie'
|
5
|
+
|
6
|
+
require 'rexception'
|
7
|
+
|
8
|
+
module Dummy
|
9
|
+
class Application < Rails::Application
|
10
|
+
config.secret_token = 'abcdefghijklmnopqrstuvwxyz0123456789'
|
11
|
+
config.session_store :cookie_store, key: '_dummy_session'
|
12
|
+
config.eager_load = false
|
13
|
+
config.active_support.deprecation = :log
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Dummy::Application.initialize!
|
18
|
+
|
19
|
+
Dummy::Application.routes.draw do
|
20
|
+
get '/application_error', to: 'errors#application_error'
|
21
|
+
get '/forbidden', to: 'errors#forbidden'
|
22
|
+
end
|
23
|
+
|
24
|
+
class CustomException < StandardError
|
25
|
+
end
|
26
|
+
|
27
|
+
class ApplicationController < ActionController::Base
|
28
|
+
end
|
29
|
+
|
30
|
+
class ErrorsController < ApplicationController
|
31
|
+
def application_error
|
32
|
+
raise Exception
|
33
|
+
end
|
34
|
+
|
35
|
+
def forbidden
|
36
|
+
raise CustomException
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Rexception.configure do |config|
|
41
|
+
config.layout = 'layout'
|
42
|
+
|
43
|
+
config.errors_dir = 'errors_dir'
|
44
|
+
|
45
|
+
config.rescue_responses = {
|
46
|
+
'CustomException' => :forbidden
|
47
|
+
}
|
48
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
run Rails.application
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Error pages' do
|
4
|
+
shared_examples_for 'error page' do |path, code, content|
|
5
|
+
it "should return #{code}" do
|
6
|
+
visit path
|
7
|
+
|
8
|
+
expect(page.status_code).to eq code
|
9
|
+
expect(page).to have_content content
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'access to 403 page' do
|
14
|
+
it_behaves_like 'error page', '/forbidden', 403, 'Forbidden'
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'access to 404 page' do
|
18
|
+
it_behaves_like 'error page', '/not_found', 404, 'Not Found'
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'access to 500 page' do
|
22
|
+
it_behaves_like 'error page', '/application_error', 500, 'Application Error'
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexception
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kami
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec-rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Rendering error pages for Rails application.
|
56
|
-
email:
|
57
|
-
- kami30k@gmail.com
|
56
|
+
email: kami30k@gmail.com
|
58
57
|
executables: []
|
59
58
|
extensions: []
|
60
59
|
extra_rdoc_files: []
|
61
60
|
files:
|
61
|
+
- ".gitignore"
|
62
|
+
- ".rspec"
|
63
|
+
- ".travis.yml"
|
64
|
+
- Gemfile
|
62
65
|
- MIT-LICENSE
|
66
|
+
- README.md
|
63
67
|
- Rakefile
|
64
68
|
- lib/rexception.rb
|
65
|
-
- lib/rexception/
|
69
|
+
- lib/rexception/config.rb
|
70
|
+
- lib/rexception/exceptions_controller.rb
|
66
71
|
- lib/rexception/railtie.rb
|
67
|
-
- lib/rexception/setting.rb
|
68
72
|
- lib/rexception/version.rb
|
73
|
+
- rexception.gemspec
|
74
|
+
- spec/dummy/app/views/errors_dir/application.html.erb
|
75
|
+
- spec/dummy/app/views/errors_dir/forbidden.html.erb
|
76
|
+
- spec/dummy/app/views/errors_dir/not_found.html.erb
|
77
|
+
- spec/dummy/app/views/layouts/layout.html.erb
|
78
|
+
- spec/dummy/application.rb
|
79
|
+
- spec/dummy/bin/rails
|
80
|
+
- spec/dummy/config.ru
|
81
|
+
- spec/requests/error_pages_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
69
83
|
homepage: https://github.com/kami30k/rexception
|
70
84
|
licenses:
|
71
85
|
- MIT
|
@@ -86,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
100
|
version: '0'
|
87
101
|
requirements: []
|
88
102
|
rubyforge_project:
|
89
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.4.5
|
90
104
|
signing_key:
|
91
105
|
specification_version: 4
|
92
106
|
summary: Rendering error pages for Rails application.
|
data/lib/rexception/setting.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
|
-
module Rexception
|
4
|
-
class Setting
|
5
|
-
include Singleton
|
6
|
-
|
7
|
-
attr_accessor :layout
|
8
|
-
attr_accessor :errors_dir
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
defaults.each { |k, v| instance_variable_set("@#{k}", v) }
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup
|
15
|
-
yield self
|
16
|
-
end
|
17
|
-
|
18
|
-
def rescue_responses=(rescue_responses)
|
19
|
-
ActionDispatch::ExceptionWrapper.rescue_responses.merge!(rescue_responses)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def defaults
|
25
|
-
@defaults ||= {
|
26
|
-
layout: 'application',
|
27
|
-
errors_dir: 'errors'
|
28
|
-
}
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|