box_view 0.0.3 → 0.0.4
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 +8 -8
- data/box_view.gemspec +3 -0
- data/lib/box_view/http.rb +43 -6
- data/lib/box_view/models/base.rb +4 -4
- data/lib/box_view/version.rb +1 -1
- data/lib/box_view.rb +2 -0
- data/spec/http_spec.rb +58 -3
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDNiODM0YTdhMjdiMTk4ODg2ZDQ5ZjgzNjdhZTU2M2FmMWNiOTI5ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTRhYWVlNmE1MTEzODM0NmE1N2RkN2RhOWI2MDU3OGVjN2NiYWM4OA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTBmZjViZmI4YzQwOTI1OGVmNGRkOGY2NzRkM2JhYzZjYjE2MDRjOTEzMTk3
|
10
|
+
NjJmZjExNzIxYjM0NGM5NWQyYmFiZTQ2YTk2ZjU1YjhhZDg2NmY4ZWI3ZWFi
|
11
|
+
MDE3NDExMTg1NWNlODlhYTczZTgxNDg4ZGZiMDU1Y2JkYzJlMDA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YWQ3MDljNjhlMDBlYWE1Y2JjNjg2Y2JlMDE4NGFjMWI3MjljZDA4NjJkMDEz
|
14
|
+
ZmMzNGJkMmY5NmU2MTQ4M2NlMzAyNGM5YWUxZDJmMTI0OTI0MTI0OTBjMzhj
|
15
|
+
Y2I2NGUyM2M5MGYzNzExNDc2NTY5ZjYwNGVhMzA5NzM5NjE5NTQ=
|
data/box_view.gemspec
CHANGED
@@ -13,6 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://github.com/reillyforshaw/box_view"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
+
spec.required_ruby_version = '>= 1.9'
|
17
|
+
|
16
18
|
spec.files = `git ls-files`.split($/)
|
17
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
@@ -20,4 +22,5 @@ Gem::Specification.new do |spec|
|
|
20
22
|
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec"
|
23
26
|
end
|
data/lib/box_view/http.rb
CHANGED
@@ -2,7 +2,19 @@ module BoxView
|
|
2
2
|
module Http
|
3
3
|
|
4
4
|
require 'time'
|
5
|
-
|
5
|
+
|
6
|
+
class Error < BoxView::Error; end
|
7
|
+
|
8
|
+
class BadRequestError < BoxView::Http::Error; end
|
9
|
+
class RetryNeededError < BoxView::Http::Error
|
10
|
+
attr_reader :retry_after
|
11
|
+
|
12
|
+
def initialize(msg, retry_after)
|
13
|
+
@retry_after = retry_after
|
14
|
+
super(msg)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
6
18
|
def base_uri(path, params = {})
|
7
19
|
uri = URI.parse("https://view-api.box.com")
|
8
20
|
uri.path = path
|
@@ -52,17 +64,32 @@ module BoxView
|
|
52
64
|
res = n.start do |http|
|
53
65
|
http.request(req)
|
54
66
|
end
|
67
|
+
check_for_error(res)
|
55
68
|
parse ? parse_response(res) : res.body
|
56
69
|
end
|
57
70
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
71
|
+
def check_for_error(res)
|
72
|
+
case res
|
73
|
+
when Net::HTTPAccepted
|
74
|
+
if res['Retry-After']
|
75
|
+
raise BoxView::Http::RetryNeededError.new('Retry Needed', res['Retry-After'])
|
76
|
+
end
|
77
|
+
when Net::HTTPBadRequest
|
78
|
+
msg = 'Bad Request'
|
79
|
+
if err_dets = error_details(res)
|
80
|
+
msg += " (#{err_dets})"
|
81
|
+
end
|
82
|
+
|
83
|
+
raise BoxView::Http::BadRequestError.new(msg)
|
63
84
|
end
|
64
85
|
end
|
65
86
|
|
87
|
+
def parse_response(res)
|
88
|
+
JSON.parse(res.body)
|
89
|
+
rescue JSON::ParserError
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
|
66
93
|
def convert_params(params)
|
67
94
|
params.each_pair do |key, val|
|
68
95
|
if [Date, Time, DateTime].include?(val.class)
|
@@ -74,6 +101,16 @@ module BoxView
|
|
74
101
|
|
75
102
|
private
|
76
103
|
|
104
|
+
def error_details(res)
|
105
|
+
if resp_json = parse_response(res)
|
106
|
+
if details = resp_json['details']
|
107
|
+
details.map { |d| [d['field'], d['message']].join(': ') }.join(' ')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
rescue
|
111
|
+
nil
|
112
|
+
end
|
113
|
+
|
77
114
|
def api_prefix()
|
78
115
|
"/1"
|
79
116
|
end
|
data/lib/box_view/models/base.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module BoxView
|
2
2
|
module Models
|
3
3
|
|
4
|
-
class ReadOnlyAttribute <
|
5
|
-
class ResourceNotSaved <
|
6
|
-
|
4
|
+
class ReadOnlyAttribute < BoxView::Error; end
|
5
|
+
class ResourceNotSaved < BoxView::Error; end
|
6
|
+
|
7
7
|
class Base
|
8
8
|
|
9
9
|
require 'time'
|
@@ -83,4 +83,4 @@ module BoxView
|
|
83
83
|
|
84
84
|
end
|
85
85
|
end
|
86
|
-
end
|
86
|
+
end
|
data/lib/box_view/version.rb
CHANGED
data/lib/box_view.rb
CHANGED
data/spec/http_spec.rb
CHANGED
@@ -5,11 +5,66 @@ describe BoxView::Http do
|
|
5
5
|
|
6
6
|
describe "#parse_response" do
|
7
7
|
context "when given ill-formed JSON" do
|
8
|
-
let(:response) {
|
9
|
-
|
8
|
+
let(:response) { double("Net::HTTPResponse", body: "foo") }
|
9
|
+
|
10
10
|
it "should return nil" do
|
11
11
|
expect(http.parse_response(response)).to be_nil
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
|
+
describe '#check_for_error' do
|
17
|
+
let(:response) { }
|
18
|
+
subject { http.check_for_error(response) }
|
19
|
+
|
20
|
+
context 'given a 202 response' do
|
21
|
+
let(:response) { Net::HTTPAccepted.new('1.1', '202', 'ACCEPTED') }
|
22
|
+
|
23
|
+
context 'that does not have a Retry-After header' do
|
24
|
+
it 'should not raise an error' do
|
25
|
+
expect { subject }.not_to raise_error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'that does have a Retry-After header' do
|
30
|
+
let(:response) { super().tap { |r| r['Retry-After'] = '10' } }
|
31
|
+
it 'should raise a BoxView::Http:RetryNeeded' do
|
32
|
+
expect { subject }.to raise_error(BoxView::Http::RetryNeededError) do |error|
|
33
|
+
error.retry_after.should == '10'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'given a 400 response' do
|
40
|
+
let(:body) { }
|
41
|
+
let(:response) do
|
42
|
+
Net::HTTPBadRequest.new('1.1', '400', 'BAD REQUEST').tap do |r|
|
43
|
+
r.stub(:body).and_return(body)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'without a parseable error message' do
|
48
|
+
let(:body) { 'NOT JSON' }
|
49
|
+
|
50
|
+
it 'should raise a BoxView::Http:BadRequest' do
|
51
|
+
expect { subject }.to raise_error(BoxView::Http::BadRequestError)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'with a parseable error message' do
|
56
|
+
let(:body) do
|
57
|
+
'{"message": "Bad request",
|
58
|
+
"type": "error",
|
59
|
+
"details": [{"field": "height",
|
60
|
+
"message": "Ensure this value is less than or equal to 768."}],
|
61
|
+
"request_id": "999605a17b974850baaccbe2ae479c75"}'
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should raise a BoxView::Http:BadRequest with a message indicating the problem' do
|
65
|
+
expect { subject }.to raise_error(BoxView::Http::BadRequestError, /height/)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: box_view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reilly Forshaw
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: API client for Box View
|
42
56
|
email:
|
43
57
|
- reilly.forshaw@goclio.com
|
@@ -88,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
102
|
requirements:
|
89
103
|
- - ! '>='
|
90
104
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
105
|
+
version: '1.9'
|
92
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - ! '>='
|