temescal 0.1.0 → 0.1.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/README.md +1 -1
- data/lib/temescal/middleware.rb +8 -1
- data/lib/temescal/version.rb +1 -1
- data/spec/lib/temescal/middleware_spec.rb +25 -0
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d87fe04c5479ea7fc4081a5c20c1e00ecab56f7
|
4
|
+
data.tar.gz: 311bdc3696f87f883d63b77924f05a1d9c448518
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f478224b88e7cd8ca0bd5ecf9119c5593856c3c355a808953a0837ddd5f978c7a0e7529ec491306913e9365063095f2d3554f116c3cb3c099af31817606c7437
|
7
|
+
data.tar.gz: f713acaf1042b6864275125bfcdd01c2bb448a33119248b8ff9e548d978a5ce92f6e9e2a3bdc862b7b7e6f71c4ee81f0e3cb913dc4a97bac5e95c6820ca71475
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
temescal
|
2
2
|
========
|
3
3
|
|
4
|
-
[](https://travis-ci.org/todd/temescal) [](https://coveralls.io/r/todd/temescal?branch=master) [](https://codeclimate.com/github/todd/temescal) [](https://gemnasium.com/todd/temescal)
|
4
|
+
[](http://badge.fury.io/rb/temescal) [](https://travis-ci.org/todd/temescal) [](https://coveralls.io/r/todd/temescal?branch=master) [](https://codeclimate.com/github/todd/temescal) [](https://gemnasium.com/todd/temescal)
|
5
5
|
|
6
6
|
Temescal is Rack middleware that will automatically rescue exceptions for JSON APIs and render a nice, clean JSON response with the error information. No need to write custom error handling logic for your apps - Temescal will take care of it for you!
|
7
7
|
## Getting Started
|
data/lib/temescal/middleware.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Temescal
|
2
2
|
class Middleware
|
3
|
+
NOT_FOUND_ERRORS = ["ActiveRecord::RecordNotFound", "Sinatra::NotFound"]
|
3
4
|
|
4
5
|
# Public: Initializes the middleware.
|
5
6
|
#
|
@@ -31,7 +32,7 @@ module Temescal
|
|
31
32
|
$stderr.print formatted_error
|
32
33
|
configuration.monitors.each { |monitor| monitor.report(@error) }
|
33
34
|
|
34
|
-
@status =
|
35
|
+
@status = set_status
|
35
36
|
@response = Response.build(@status, @error, message)
|
36
37
|
@headers = { "Content-Type" => "application/json" }
|
37
38
|
end
|
@@ -51,5 +52,11 @@ module Temescal
|
|
51
52
|
message << @error.backtrace.join("\n ")
|
52
53
|
message << "\n\n"
|
53
54
|
end
|
55
|
+
|
56
|
+
# Private: Returns the proper error code for the exception.
|
57
|
+
def set_status
|
58
|
+
return 404 if NOT_FOUND_ERRORS.include? @error.class.to_s
|
59
|
+
@error.respond_to?(:http_status) ? @error.http_status : 500
|
60
|
+
end
|
54
61
|
end
|
55
62
|
end
|
data/lib/temescal/version.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
+
require "active_record"
|
4
|
+
require "sinatra"
|
5
|
+
|
3
6
|
describe Temescal::Middleware do
|
4
7
|
context "Ok response" do
|
5
8
|
let(:app) { ->(env) { [200, env, "app" ] } }
|
@@ -86,6 +89,28 @@ describe Temescal::Middleware do
|
|
86
89
|
expect(json["message"]).to eq "An error has occured - we'll get on it right away!"
|
87
90
|
end
|
88
91
|
end
|
92
|
+
|
93
|
+
context "with a Sinatra::NotFound error" do
|
94
|
+
it "should build a response with a 404 status code" do
|
95
|
+
app = ->(env) { raise Sinatra::NotFound.new }
|
96
|
+
middleware = Temescal::Middleware.new(app)
|
97
|
+
|
98
|
+
code, _, _ = middleware.call env_for("http://foobar.com")
|
99
|
+
|
100
|
+
expect(code).to eq 404
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "with an ActiveRecord::RecordNotFound error" do
|
105
|
+
it "should build a response with a 404 status code" do
|
106
|
+
app = ->(env) { raise ActiveRecord::RecordNotFound.new }
|
107
|
+
middleware = Temescal::Middleware.new(app)
|
108
|
+
|
109
|
+
code, _, _ = middleware.call env_for("http://foobar.com")
|
110
|
+
|
111
|
+
expect(code).to eq 404
|
112
|
+
end
|
113
|
+
end
|
89
114
|
end
|
90
115
|
|
91
116
|
context "Override middleware to raise exception" do
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temescal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Bealmear
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
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
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Rack Middleware for gracefully handling exceptions for JSON APIs.
|
@@ -48,17 +48,17 @@ files:
|
|
48
48
|
- LICENSE
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
|
-
- temescal.
|
51
|
+
- lib/temescal.rb
|
52
52
|
- lib/temescal/configuration.rb
|
53
53
|
- lib/temescal/middleware.rb
|
54
54
|
- lib/temescal/monitors.rb
|
55
55
|
- lib/temescal/response.rb
|
56
56
|
- lib/temescal/version.rb
|
57
|
-
- lib/temescal.rb
|
58
57
|
- spec/lib/temescal/configuration_spec.rb
|
59
58
|
- spec/lib/temescal/middleware_spec.rb
|
60
59
|
- spec/lib/temescal/monitors_spec.rb
|
61
60
|
- spec/spec_helper.rb
|
61
|
+
- temescal.gemspec
|
62
62
|
homepage: https://github.com/todd/temescal
|
63
63
|
licenses:
|
64
64
|
- MIT
|
@@ -69,17 +69,17 @@ require_paths:
|
|
69
69
|
- lib
|
70
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- -
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- -
|
77
|
+
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
80
|
requirements: []
|
81
81
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
82
|
+
rubygems_version: 2.2.0
|
83
83
|
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Rack Middleware for gracefully handling exceptions for JSON APIs.
|