nap 0.7.0 → 0.8.0.pre
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 +18 -2
- data/lib/rest.rb +7 -3
- data/lib/rest/error.rb +91 -0
- data/lib/rest/request.rb +1 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b399814b5fbc094bb5c2a5d620034ac4476ff58
|
4
|
+
data.tar.gz: 78e178d833e8229ed7171ca4fd67c27723b3372e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3186e5ea15c41e9d5300b7fe30f9e9cdda734672a6266a8ccb31b9277f1720126627eb0961da2b3d2257c0f1df69703ffd7c39d73e42fea362cabf32191ae7e0
|
7
|
+
data.tar.gz: 15f7fbd148fbf9e294cae5b75e7af2532e4830ea93576c01468d580bff3b4e7b26d5c8cffe8aea12dd82cf36510fe079658b1dfdb8109c741cb65d13bf1ea2ec
|
data/README.md
CHANGED
@@ -26,8 +26,7 @@ fire off HTTP requests without having to research net/http internals.
|
|
26
26
|
|
27
27
|
## Advanced request configuration
|
28
28
|
|
29
|
-
If you need more control over the Net::HTTP request you can pass a block to
|
30
|
-
all of the request methods.
|
29
|
+
If you need more control over the Net::HTTP request you can pass a block to all of the request methods.
|
31
30
|
|
32
31
|
response = REST.get('http://google.com') do |http_request|
|
33
32
|
http_request.open_timeout = 15
|
@@ -40,6 +39,23 @@ To enable the proxy settings in Nap, you can either use the HTTP\_PROXY or http\
|
|
40
39
|
|
41
40
|
$ env HTTP_PROXY=http://rob:secret@192.167.1.254:665 ruby app.rb
|
42
41
|
|
42
|
+
## Exceptions
|
43
|
+
|
44
|
+
Nap defines one top-level and three main error types which allow you to catch a whole range of exceptions thrown by underlying protocol implementations.
|
45
|
+
|
46
|
+
* *REST::Error*: Any type of error
|
47
|
+
* *REST::Timeout*: Read timeouts of various sorts
|
48
|
+
* *REST::Connection*: Connection errors caused by dropped sockets
|
49
|
+
* *REST::Protocol*: Request failed because of a problem when handling the HTTP request or response
|
50
|
+
|
51
|
+
In the most basic case you can rescue from the top-level type to warn about fetching problems.
|
52
|
+
|
53
|
+
begin
|
54
|
+
REST.get('http://example.com/pigeons/12')
|
55
|
+
rescue REST::Error
|
56
|
+
puts "[!] Failed to fetch Pigeon number 12."
|
57
|
+
end
|
58
|
+
|
43
59
|
## Contributions
|
44
60
|
|
45
61
|
Nap couldn't be the shining beacon in the eternal darkness without help from:
|
data/lib/rest.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'uri'
|
2
2
|
|
3
|
-
# REST is basically a convenience wrapper around Net::HTTP. It defines a simple and consistant API
|
4
|
-
# HTTP calls.
|
3
|
+
# REST is basically a convenience wrapper around Net::HTTP. It defines a simple and consistant API
|
4
|
+
# for doing REST-style HTTP calls.
|
5
|
+
#
|
6
|
+
# In addition it provides wrappers for the many error classes that can be raised while making
|
7
|
+
# requests. See REST::Error for a complete discussion of options.
|
5
8
|
module REST
|
6
9
|
# Library version
|
7
|
-
VERSION = '0.
|
10
|
+
VERSION = '0.8.0.pre'
|
8
11
|
|
9
12
|
# Raised when the remote server disconnects when reading the response
|
10
13
|
class DisconnectedError < StandardError; end
|
@@ -101,5 +104,6 @@ module REST
|
|
101
104
|
end
|
102
105
|
end
|
103
106
|
|
107
|
+
require File.expand_path('../rest/error', __FILE__)
|
104
108
|
require File.expand_path('../rest/request', __FILE__)
|
105
109
|
require File.expand_path('../rest/response', __FILE__)
|
data/lib/rest/error.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module REST
|
4
|
+
# This constant can be used to rescue any of the known `Timeout`, `Connection`, and `Protocol`
|
5
|
+
# error classes.
|
6
|
+
#
|
7
|
+
# For instance, to rescue _any_ type of error that could be raise while making a request:
|
8
|
+
#
|
9
|
+
# begin
|
10
|
+
# REST.get('http://example.com/pigeons/12')
|
11
|
+
# rescue REST::Error => e
|
12
|
+
# p e # => Timeout::Error
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# If you want to rescue only `Timeout` related error classes, however, you can limit the scope:
|
16
|
+
#
|
17
|
+
# begin
|
18
|
+
# REST.get('http://example.com/pigeons/12')
|
19
|
+
# rescue REST::Error::Timeout => e
|
20
|
+
# p e # => Timeout::Error
|
21
|
+
# end
|
22
|
+
module Error
|
23
|
+
# This constant can be used to rescue only the known `Timeout` error classes.
|
24
|
+
module Timeout
|
25
|
+
def self.class_names
|
26
|
+
%w(
|
27
|
+
Errno::ETIMEDOUT
|
28
|
+
Timeout::Error
|
29
|
+
Net::OpenTimeout
|
30
|
+
Net::ReadTimeout
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# This constant can be used to rescue only the known `Connection` error classes.
|
36
|
+
module Connection
|
37
|
+
def self.class_names
|
38
|
+
%w(
|
39
|
+
EOFError
|
40
|
+
Errno::ECONNABORTED
|
41
|
+
Errno::ECONNREFUSED
|
42
|
+
Errno::ECONNRESET
|
43
|
+
Errno::EHOSTUNREACH
|
44
|
+
Errno::EINVAL
|
45
|
+
Errno::ENETUNREACH
|
46
|
+
SocketError
|
47
|
+
OpenSSL::SSL::SSLError
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# This constant can be used to rescue only the known `Protocol` error classes.
|
53
|
+
module Protocol
|
54
|
+
def self.class_names
|
55
|
+
%w(
|
56
|
+
Net::HTTPBadResponse
|
57
|
+
Net::HTTPHeaderSyntaxError
|
58
|
+
Net::ProtocolError
|
59
|
+
Zlib::GzipFile::Error
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
[Timeout, Connection, Protocol].each do |mod|
|
67
|
+
mod.send(:include, Error)
|
68
|
+
|
69
|
+
# Collect all the error classes that exist at runtime.
|
70
|
+
def mod.classes
|
71
|
+
class_names.map do |name|
|
72
|
+
begin
|
73
|
+
# MRI < 2 does not support full constant paths for `Object.const_get`.
|
74
|
+
name.split('::').inject(Object) do |current, const|
|
75
|
+
current.const_get(const)
|
76
|
+
end
|
77
|
+
rescue NameError
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
end.compact
|
81
|
+
end
|
82
|
+
|
83
|
+
# Include the `mod` into the classes.
|
84
|
+
def mod.extend_classes!
|
85
|
+
classes.each { |klass| klass.send(:include, self) }
|
86
|
+
end
|
87
|
+
|
88
|
+
mod.extend_classes!
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/rest/request.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manfred Stienstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- LICENSE
|
52
52
|
- README.md
|
53
53
|
- lib/rest.rb
|
54
|
+
- lib/rest/error.rb
|
54
55
|
- lib/rest/request.rb
|
55
56
|
- lib/rest/response.rb
|
56
57
|
- support/cacert.pem
|
@@ -70,9 +71,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
71
|
version: '0'
|
71
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
73
|
requirements:
|
73
|
-
- - "
|
74
|
+
- - ">"
|
74
75
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
+
version: 1.3.1
|
76
77
|
requirements: []
|
77
78
|
rubyforge_project:
|
78
79
|
rubygems_version: 2.2.0
|