rasti-web 1.0.0 → 1.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/lib/rasti/web.rb +1 -0
- data/lib/rasti/web/controller.rb +12 -5
- data/lib/rasti/web/version.rb +1 -1
- data/rasti-web.gemspec +2 -0
- data/spec/controller_spec.rb +24 -6
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8be22c6b9730ecebfc6deb7449fc33fc580eedfa
|
4
|
+
data.tar.gz: 260d7b82a6a975f7872c0e6d5a2cff49f526272f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2255e469c1232c3f66a83e17aea842e34f55d51e7c23656be60f30b90785c864e08aed79dd6f6a6f7ebc72256ab95bfc218c6a077418ec0c09c3821e16fdc119
|
7
|
+
data.tar.gz: ee292a32f9ec7142d1bb0ab386d635fb128bcc277e44bda50430761b183d361d699bdce02e531766bf5513a4ae08011081ddda445c1258146387e95af144a4c8
|
data/lib/rasti/web.rb
CHANGED
data/lib/rasti/web/controller.rb
CHANGED
@@ -24,8 +24,9 @@ module Rasti
|
|
24
24
|
begin
|
25
25
|
controller.public_send action_name
|
26
26
|
rescue => ex
|
27
|
-
|
28
|
-
|
27
|
+
exception_class = handled_exceptions.detect { |klass| ex.is_a? klass }
|
28
|
+
if exception_class
|
29
|
+
controller.instance_exec ex, &exception_handlers[exception_class]
|
29
30
|
else
|
30
31
|
raise ex
|
31
32
|
end
|
@@ -35,10 +36,16 @@ module Rasti
|
|
35
36
|
|
36
37
|
alias_method :>>, :action
|
37
38
|
|
39
|
+
def exception_handlers
|
40
|
+
@exception_handlers ||= superclass.respond_to?(:exception_handlers) ? superclass.exception_handlers : {}
|
41
|
+
end
|
42
|
+
|
43
|
+
def handled_exceptions
|
44
|
+
@handled_exceptions ||= ClassAncestrySort.desc exception_handlers.keys
|
45
|
+
end
|
46
|
+
|
38
47
|
def rescue_from(exception_class, &block)
|
39
|
-
|
40
|
-
instance_exec ex, &block
|
41
|
-
end
|
48
|
+
exception_handlers[exception_class] = block
|
42
49
|
end
|
43
50
|
end
|
44
51
|
|
data/lib/rasti/web/version.rb
CHANGED
data/rasti-web.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'class_config', '~> 0.0.2'
|
25
25
|
spec.add_dependency 'hash_ext', '~> 0.1'
|
26
26
|
spec.add_dependency 'content-type', '~> 0.0'
|
27
|
+
spec.add_dependency 'class_ancestry_sort', '~> 0.1'
|
27
28
|
|
28
29
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
29
30
|
spec.add_development_dependency 'rake', '~> 11.0'
|
@@ -39,5 +40,6 @@ Gem::Specification.new do |spec|
|
|
39
40
|
spec.add_development_dependency 'term-ansicolor', '~> 1.3.0'
|
40
41
|
spec.add_development_dependency 'tins', '~> 1.6.0'
|
41
42
|
spec.add_development_dependency 'json', '~> 1.8'
|
43
|
+
spec.add_development_dependency 'parslet', '~> 1.7.0'
|
42
44
|
end
|
43
45
|
end
|
data/spec/controller_spec.rb
CHANGED
@@ -11,13 +11,22 @@ class TestController < Rasti::Web::Controller
|
|
11
11
|
raise 'Unexpected error'
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
raise CustomError, '
|
14
|
+
def explicit_fail
|
15
|
+
raise CustomError, 'Explicit error'
|
16
|
+
end
|
17
|
+
|
18
|
+
def implicit_fail
|
19
|
+
raise EOFError, 'Implicit error'
|
16
20
|
end
|
17
21
|
|
18
22
|
rescue_from CustomError do |ex|
|
19
23
|
render.status 500, ex.message
|
20
24
|
end
|
25
|
+
|
26
|
+
rescue_from IOError do |ex|
|
27
|
+
render.status 500, ex.message
|
28
|
+
end
|
29
|
+
|
21
30
|
end
|
22
31
|
|
23
32
|
describe Rasti::Web::Controller do
|
@@ -38,13 +47,22 @@ describe Rasti::Web::Controller do
|
|
38
47
|
error.message.must_equal "Undefined action 'invalid' in TestController"
|
39
48
|
end
|
40
49
|
|
41
|
-
it 'Rescue exception' do
|
42
|
-
action = TestController.action :
|
43
|
-
env = Rack::MockRequest.env_for '/
|
50
|
+
it 'Rescue explicit exception' do
|
51
|
+
action = TestController.action :explicit_fail
|
52
|
+
env = Rack::MockRequest.env_for '/explicit_fail'
|
53
|
+
status, headers, response = action.call env
|
54
|
+
|
55
|
+
status.must_equal 500
|
56
|
+
response.body.must_equal ['Explicit error']
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'Rescue implicit exception' do
|
60
|
+
action = TestController.action :implicit_fail
|
61
|
+
env = Rack::MockRequest.env_for '/implicit_fail'
|
44
62
|
status, headers, response = action.call env
|
45
63
|
|
46
64
|
status.must_equal 500
|
47
|
-
response.body.must_equal ['
|
65
|
+
response.body.must_equal ['Implicit error']
|
48
66
|
end
|
49
67
|
|
50
68
|
it 'Unexpected exception' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: class_ancestry_sort
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|