rescue-dog 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +21 -6
- data/deploy_gem.sh +2 -2
- data/lib/rescue/controller/dynamic.rb +6 -11
- data/lib/rescue/controller/static.rb +5 -10
- data/lib/rescue/controller.rb +25 -7
- data/lib/rescue/version.rb +1 -1
- data/lib/rescue-dog.rb +6 -0
- data/spec/rails_spec_app.rb +8 -2
- metadata +2 -2
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Rescue Dog
|
2
2
|
|
3
|
-
|
3
|
+
The Rescue-Dog responds HTTP status (the code and message) when raise the exception.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,27 +18,42 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
1. Include `Rescue::Controller::Static` or `Rescue::Controller::Dynamic`.
|
22
|
+
2. Call `rescue_associate` method. And then, the exception class is defined and added to `rescue_handlers`.
|
23
|
+
3. Raise the exception or Call `response_status` method.
|
24
|
+
|
21
25
|
### Render Static Files
|
26
|
+
Render /public/400(.:format) if you raise BadRequest exception.
|
27
|
+
|
22
28
|
$ vim app/controllers/application_controller.rb
|
23
29
|
class ApplicationController
|
24
30
|
|
25
31
|
include Rescue::Controller::Static
|
26
|
-
|
32
|
+
rescue_associate :BadRequest ,with: 400
|
33
|
+
rescue_associate :Unauthorized ,with: 401
|
34
|
+
rescue_associate :NotFound ,with: 404
|
35
|
+
rescue_associate :ServerError ,with: 500
|
27
36
|
|
28
37
|
### Render Template
|
38
|
+
Render app/views/errors/404(.:format) if you raise NotFound exception.
|
39
|
+
|
29
40
|
$ vim app/controllers/application_controller.rb
|
30
41
|
class ApplicationController
|
31
42
|
|
32
43
|
include Rescue::Controller::Dynamic
|
33
|
-
|
44
|
+
rescue_associate :BadRequest ,with: 400
|
45
|
+
rescue_associate :Unauthorized ,with: 401
|
46
|
+
rescue_associate :NotFound ,with: 404
|
47
|
+
rescue_associate :ServerError ,with: 500
|
34
48
|
|
35
49
|
### Associated with the exceptions
|
36
|
-
Call the response method when raise an exception
|
50
|
+
Call the response method when raise an exception.
|
37
51
|
|
38
52
|
#### for ActiveRecord
|
39
|
-
|
53
|
+
rescue_associate ActiveRecord::RecordNotFound ,with: 404
|
40
54
|
#### for Mongoid
|
41
|
-
|
55
|
+
rescue_associate Mongoid::Errors::DocumentNotFound, BSON::InvalidObjectId, with: 404
|
56
|
+
|
42
57
|
|
43
58
|
## Contributing
|
44
59
|
|
data/deploy_gem.sh
CHANGED
@@ -3,21 +3,15 @@
|
|
3
3
|
module Rescue
|
4
4
|
module Controller
|
5
5
|
module Dynamic
|
6
|
-
def self.included(base)
|
7
|
-
base.extend ClassMethods
|
8
|
-
base.extend Rescue::Controller::ClassMethods
|
9
|
-
end
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
return if method_defined?(name)
|
15
|
-
define_method name do |code, exception = nil|
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
define_method Rescue::Bind.respond_name do |code, exception = nil|
|
16
10
|
e = {}
|
17
11
|
e[:code] = code
|
18
12
|
e[:status] = Rack::Utils::HTTP_STATUS_CODES[code]
|
19
13
|
e[:message] = exception.message if exception
|
20
|
-
|
14
|
+
|
21
15
|
respond_to do |format|
|
22
16
|
format.html { render status: code, template: "/errors/#{code}" }
|
23
17
|
format.json { render status: code, json: { errors: [e] } }
|
@@ -25,8 +19,9 @@ module Rescue
|
|
25
19
|
end
|
26
20
|
end
|
27
21
|
end
|
28
|
-
|
22
|
+
base.extend Rescue::Controller::ClassMethods
|
29
23
|
end
|
24
|
+
|
30
25
|
end
|
31
26
|
end
|
32
27
|
end
|
@@ -3,21 +3,16 @@
|
|
3
3
|
module Rescue
|
4
4
|
module Controller
|
5
5
|
module Static
|
6
|
+
|
6
7
|
def self.included(base)
|
7
|
-
base.
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
|
13
|
-
def define_respond_method name
|
14
|
-
return if method_defined?(name)
|
15
|
-
define_method name do |code, exception = nil|
|
8
|
+
base.class_eval do
|
9
|
+
define_method Rescue::Bind.respond_name do |code, exception = nil|
|
16
10
|
render status: code, file: "#{Rails.root}/public/#{code}", layout: false and return
|
17
11
|
end
|
18
12
|
end
|
19
|
-
|
13
|
+
base.extend Rescue::Controller::ClassMethods
|
20
14
|
end
|
15
|
+
|
21
16
|
end
|
22
17
|
end
|
23
18
|
end
|
data/lib/rescue/controller.rb
CHANGED
@@ -7,16 +7,34 @@ module Rescue
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
define_respond_method respond
|
10
|
+
def rescue_associate *klasses, &block
|
11
|
+
options = klasses.extract_options!
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
unless block_given?
|
14
|
+
if options.has_key?(:with)
|
15
|
+
if options[:with].is_a?(Integer)
|
16
|
+
block = lambda {|e| send(Rescue::Bind.respond_name, options[:with], e) }
|
17
|
+
elsif options[:with].is_a?(Proc)
|
18
|
+
block = options[:with]
|
19
|
+
end
|
20
|
+
else
|
21
|
+
raise ArgumentError, "Need a handler. Supply an options hash that has a :with key as the last argument."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
klasses.each do |klass|
|
26
|
+
key = if klass.is_a?(Class) && klass <= Exception
|
27
|
+
klass.name
|
28
|
+
elsif klass.is_a?(String) || klass.is_a?(Symbol)
|
29
|
+
Rescue::Bind.define_error_class klass, StandardError
|
30
|
+
klass
|
31
|
+
else
|
32
|
+
raise ArgumentError, "#{klass} is neither an Exception nor a String"
|
33
|
+
end
|
34
|
+
self.rescue_handlers += [[key, block]]
|
17
35
|
end
|
18
36
|
end
|
19
|
-
end
|
20
37
|
|
38
|
+
end
|
21
39
|
end
|
22
40
|
end
|
data/lib/rescue/version.rb
CHANGED
data/lib/rescue-dog.rb
CHANGED
@@ -5,10 +5,16 @@ module Rescue
|
|
5
5
|
|
6
6
|
class Bind
|
7
7
|
class << self
|
8
|
+
|
9
|
+
def respond_name
|
10
|
+
:respond_status
|
11
|
+
end
|
12
|
+
|
8
13
|
def define_error_class class_name, superclass = nil
|
9
14
|
return if Object.const_defined?(class_name)
|
10
15
|
Object.const_set(class_name, Class.new(superclass||StandardError))
|
11
16
|
end
|
17
|
+
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
data/spec/rails_spec_app.rb
CHANGED
@@ -31,7 +31,10 @@ class ApplicationController < ActionController::Base ; end
|
|
31
31
|
|
32
32
|
class StaticController < ApplicationController
|
33
33
|
include Rescue::Controller::Static
|
34
|
-
|
34
|
+
rescue_associate :BadRequest ,with: 400
|
35
|
+
rescue_associate :Unauthorized ,with: 401
|
36
|
+
rescue_associate :NotFound ,with: 404
|
37
|
+
rescue_associate :ServerError ,with: 500
|
35
38
|
|
36
39
|
STATUSES.each do |name, code|
|
37
40
|
class_name = "#{name}".classify
|
@@ -43,7 +46,10 @@ end
|
|
43
46
|
|
44
47
|
class DynamicController < ApplicationController
|
45
48
|
include Rescue::Controller::Dynamic
|
46
|
-
|
49
|
+
rescue_associate :BadRequest ,with: 400
|
50
|
+
rescue_associate :Unauthorized ,with: 401
|
51
|
+
rescue_associate :NotFound ,with: 404
|
52
|
+
rescue_associate :ServerError ,with: 500
|
47
53
|
|
48
54
|
STATUSES.each do |name, code|
|
49
55
|
class_name = "#{name}".classify
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rescue-dog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|