footrest 0.2.0 → 0.2.2
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.
- data/footrest.gemspec +3 -0
- data/lib/footrest/client.rb +1 -0
- data/lib/footrest/connection.rb +4 -2
- data/lib/footrest/http_error.rb +29 -1
- data/lib/footrest/pagination.rb +20 -0
- data/lib/footrest/version.rb +1 -1
- metadata +19 -3
- data/lib/faraday/response/raise_footrest_http_error.rb +0 -23
data/footrest.gemspec
CHANGED
@@ -29,4 +29,7 @@ Gem::Specification.new do |gem|
|
|
29
29
|
gem.add_dependency "faraday", "~> 0.8.8"
|
30
30
|
gem.add_dependency "faraday_middleware", "~> 0.9.0"
|
31
31
|
gem.add_dependency "activesupport", ">= 3.0.0"
|
32
|
+
|
33
|
+
# Parses Link headers formatted according to RFC 5988 draft spec
|
34
|
+
gem.add_dependency "link_header", ">= 0.0.7"
|
32
35
|
end
|
data/lib/footrest/client.rb
CHANGED
data/lib/footrest/connection.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'faraday_middleware'
|
3
|
-
require '
|
3
|
+
require 'footrest/http_error'
|
4
|
+
require 'footrest/pagination'
|
4
5
|
|
5
6
|
module Footrest
|
6
7
|
module Connection
|
@@ -15,7 +16,8 @@ module Footrest
|
|
15
16
|
faraday.adapter Faraday.default_adapter
|
16
17
|
faraday.use FaradayMiddleware::FollowRedirects
|
17
18
|
faraday.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/
|
18
|
-
faraday.use
|
19
|
+
faraday.use Footrest::RaiseFootrestErrors
|
20
|
+
faraday.use Footrest::Pagination
|
19
21
|
faraday.headers[:accept] = "application/json"
|
20
22
|
faraday.headers[:authorization] = "Bearer #{config[:token]}" if config[:token]
|
21
23
|
faraday.headers[:user_agent] = "Footrest"
|
data/lib/footrest/http_error.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
1
4
|
module Footrest
|
2
5
|
module HttpError
|
3
6
|
class ErrorBase < StandardError
|
@@ -10,7 +13,13 @@ module Footrest
|
|
10
13
|
@body = @response[:body]
|
11
14
|
@method = @response[:method]
|
12
15
|
|
13
|
-
super("HTTP ERROR: #{@status}")
|
16
|
+
super("HTTP ERROR: #{@status} #{errors}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def errors
|
20
|
+
JSON::pretty_generate(JSON::parse(@body)["errors"])
|
21
|
+
rescue
|
22
|
+
@body
|
14
23
|
end
|
15
24
|
end
|
16
25
|
|
@@ -21,6 +30,25 @@ module Footrest
|
|
21
30
|
).each do |error|
|
22
31
|
const_set error.to_sym, Class.new(ErrorBase)
|
23
32
|
end
|
33
|
+
end
|
24
34
|
|
35
|
+
class RaiseFootrestErrors < Faraday::Response::Middleware
|
36
|
+
ERROR_MAP = {
|
37
|
+
400 => Footrest::HttpError::BadRequest,
|
38
|
+
401 => Footrest::HttpError::Unauthorized,
|
39
|
+
403 => Footrest::HttpError::Forbidden,
|
40
|
+
404 => Footrest::HttpError::NotFound,
|
41
|
+
405 => Footrest::HttpError::MethodNotAllowed,
|
42
|
+
500 => Footrest::HttpError::InternalServerError,
|
43
|
+
501 => Footrest::HttpError::NotImplemented,
|
44
|
+
502 => Footrest::HttpError::BadGateway,
|
45
|
+
503 => Footrest::HttpError::ServiceUnavailable
|
46
|
+
}
|
47
|
+
|
48
|
+
def on_complete(response)
|
49
|
+
key = response[:status].to_i
|
50
|
+
raise ERROR_MAP[key].new(response) if ERROR_MAP.has_key? key
|
51
|
+
end
|
25
52
|
end
|
53
|
+
|
26
54
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'link_header'
|
2
|
+
|
3
|
+
module Footrest
|
4
|
+
class Pagination < Faraday::Response::Middleware
|
5
|
+
def on_complete(response)
|
6
|
+
if response[:response_headers]
|
7
|
+
if link = response[:response_headers][:link]
|
8
|
+
response[:next_page] = find_link(link, "next")
|
9
|
+
response[:first_page] = find_link(link, "first")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_link(header, rel)
|
15
|
+
link = ::LinkHeader.parse(header).links.find{ |link| link['rel'] == rel }
|
16
|
+
link.to_a.first if link
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/lib/footrest/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: footrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -156,6 +156,22 @@ dependencies:
|
|
156
156
|
- - ! '>='
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: 3.0.0
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: link_header
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.0.7
|
167
|
+
type: :runtime
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 0.0.7
|
159
175
|
description: Ruby interface for restful APIs
|
160
176
|
email:
|
161
177
|
- duane@instructure.com
|
@@ -166,10 +182,10 @@ extra_rdoc_files: []
|
|
166
182
|
files:
|
167
183
|
- Rakefile
|
168
184
|
- footrest.gemspec
|
169
|
-
- lib/faraday/response/raise_footrest_http_error.rb
|
170
185
|
- lib/footrest/client.rb
|
171
186
|
- lib/footrest/connection.rb
|
172
187
|
- lib/footrest/http_error.rb
|
188
|
+
- lib/footrest/pagination.rb
|
173
189
|
- lib/footrest/request.rb
|
174
190
|
- lib/footrest/version.rb
|
175
191
|
- lib/footrest.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'footrest/http_error'
|
3
|
-
|
4
|
-
module Faraday
|
5
|
-
class Response::RaiseFootrestHttpError < Response::Middleware
|
6
|
-
ERROR_MAP = {
|
7
|
-
400 => Footrest::HttpError::BadRequest,
|
8
|
-
401 => Footrest::HttpError::Unauthorized,
|
9
|
-
403 => Footrest::HttpError::Forbidden,
|
10
|
-
404 => Footrest::HttpError::NotFound,
|
11
|
-
405 => Footrest::HttpError::MethodNotAllowed,
|
12
|
-
500 => Footrest::HttpError::InternalServerError,
|
13
|
-
501 => Footrest::HttpError::NotImplemented,
|
14
|
-
502 => Footrest::HttpError::BadGateway,
|
15
|
-
503 => Footrest::HttpError::ServiceUnavailable
|
16
|
-
}
|
17
|
-
|
18
|
-
def on_complete(response)
|
19
|
-
key = response[:status].to_i
|
20
|
-
raise ERROR_MAP[key].new(response) if ERROR_MAP.has_key? key
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|