namira 1.1.0 → 1.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/namira.rb +1 -0
- data/lib/namira/error_helpers.rb +38 -0
- data/lib/namira/errors/http_error.rb +16 -3
- data/lib/namira/middleware/responder.rb +9 -5
- data/lib/namira/response.rb +10 -1
- data/lib/namira/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd40f31fd9c696c000f54eeb83a09db3c4213222
|
4
|
+
data.tar.gz: a707df33c8946cb12d735e7ba9ec5204c54ae3fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8149d922e3f943da4717c04df6aca73d51b27a8a45e69108e37b2d47bb35624e31638df989ca102b7288bb9c2524938509a7e1263406dd957357b1edf62b54c4
|
7
|
+
data.tar.gz: faca22f4f42291a472e2c19486b2953648e9dd29116a9f49b282d96eee27906b87994b89f7e240dcead130e357d88d67399145cc769179a9dd0bc65edfb134c2
|
data/CHANGELOG.md
CHANGED
data/lib/namira.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
begin
|
2
|
+
require 'bugsnag'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
6
|
+
require_relative 'errors'
|
7
|
+
|
8
|
+
if defined?(::Bugsnag)
|
9
|
+
module Namira
|
10
|
+
module ErrorHelpers
|
11
|
+
class Bugsnag
|
12
|
+
def initialize(bugsnag)
|
13
|
+
@bugsnag = bugsnag
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(notification)
|
17
|
+
notification.exceptions.each do |exception|
|
18
|
+
next unless exception.is_a?(Namira::Errors::HTTPError)
|
19
|
+
|
20
|
+
notification.add_tab("Namira #{exception.response.status.to_i}", {
|
21
|
+
headers: exception.response.headers.to_h,
|
22
|
+
body: exception.response.body.to_s[0...200],
|
23
|
+
method: exception.response.method.to_s,
|
24
|
+
url: exception.response.url.to_s,
|
25
|
+
redirected: (exception.response.redirect_count > 0).to_s
|
26
|
+
})
|
27
|
+
end
|
28
|
+
|
29
|
+
@bugsnag.call(notification)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
::Bugsnag.configure do |config|
|
36
|
+
config.middleware.use Namira::ErrorHelpers::Bugsnag
|
37
|
+
end
|
38
|
+
end
|
@@ -32,18 +32,29 @@ module Namira
|
|
32
32
|
klass_for_status(response.status).new("http_error/#{response.status}", response.status, response)
|
33
33
|
end
|
34
34
|
|
35
|
+
def generate_custom_classes
|
36
|
+
STATUS_MAPPING.each do |_, value|
|
37
|
+
klass_name = "#{value.tr(' ', '')}Error"
|
38
|
+
begin
|
39
|
+
HTTPError.const_get(klass_name)
|
40
|
+
rescue NameError
|
41
|
+
klass = Class.new(HTTPError) {}
|
42
|
+
HTTPError.const_set(klass_name, klass)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
35
47
|
private
|
36
48
|
|
37
49
|
def klass_for_status(status)
|
38
50
|
name = STATUS_MAPPING[status.to_i.to_s]
|
39
51
|
return HTTPError if name.nil?
|
52
|
+
|
40
53
|
klass_name = "#{name.tr(' ', '')}Error"
|
41
54
|
begin
|
42
55
|
HTTPError.const_get(klass_name)
|
43
56
|
rescue NameError
|
44
|
-
|
45
|
-
HTTPError.const_set(klass_name, klass)
|
46
|
-
retry
|
57
|
+
return HTTPError
|
47
58
|
end
|
48
59
|
end
|
49
60
|
end
|
@@ -101,3 +112,5 @@ module Namira
|
|
101
112
|
end
|
102
113
|
end
|
103
114
|
end
|
115
|
+
|
116
|
+
Namira::Errors::HTTPError.generate_custom_classes
|
@@ -12,16 +12,20 @@ module Namira
|
|
12
12
|
#
|
13
13
|
# @param env [Namira::Env] The request environment
|
14
14
|
def call(env)
|
15
|
-
handle_response(env
|
16
|
-
env.response = Namira::Response.new(env.response)
|
15
|
+
env.response = handle_response(env)
|
17
16
|
@app.call(env)
|
18
17
|
end
|
19
18
|
|
20
19
|
private
|
21
20
|
|
22
|
-
def handle_response(
|
23
|
-
final = Namira::Response.new(
|
24
|
-
|
21
|
+
def handle_response(env)
|
22
|
+
final = Namira::Response.new(
|
23
|
+
env.method,
|
24
|
+
env.uri,
|
25
|
+
env.redirect_count,
|
26
|
+
env.response
|
27
|
+
)
|
28
|
+
if (200...300).cover?(env.response.status)
|
25
29
|
final
|
26
30
|
else
|
27
31
|
raise Errors::HTTPError.create(final)
|
data/lib/namira/response.rb
CHANGED
@@ -2,9 +2,18 @@ module Namira
|
|
2
2
|
##
|
3
3
|
# HTTP response
|
4
4
|
class Response
|
5
|
+
attr_reader :method
|
6
|
+
|
7
|
+
attr_reader :url
|
8
|
+
|
9
|
+
attr_reader :redirect_count
|
10
|
+
|
5
11
|
##
|
6
12
|
# Create a new {Namira::Response}
|
7
|
-
def initialize(backing)
|
13
|
+
def initialize(method, url, redirect_count, backing)
|
14
|
+
@method = method
|
15
|
+
@url = url
|
16
|
+
@redirect_count = redirect_count
|
8
17
|
@backing = backing
|
9
18
|
end
|
10
19
|
|
data/lib/namira/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: namira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Skylar Schipper
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/namira.rb
|
151
151
|
- lib/namira/config.rb
|
152
152
|
- lib/namira/env.rb
|
153
|
+
- lib/namira/error_helpers.rb
|
153
154
|
- lib/namira/errors.rb
|
154
155
|
- lib/namira/errors/base_error.rb
|
155
156
|
- lib/namira/errors/http_error.rb
|
@@ -191,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
192
|
version: '0'
|
192
193
|
requirements: []
|
193
194
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.5.2
|
195
|
+
rubygems_version: 2.5.2.3
|
195
196
|
signing_key:
|
196
197
|
specification_version: 4
|
197
198
|
summary: A simple wrapper around HTTP
|