Skip to content

Commit 767b13c

Browse files
author
Erwin Fedasz
authored
Merge pull request #55 from basecrm/error_without_content_type
Error without content type
2 parents 9255091 + 4c4165f commit 767b13c

5 files changed

Lines changed: 63 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
## CHANGELOG
22

3+
v1.3.2 (2018-01-11)
4+
**Features and Improvements**
5+
6+
* Fixed undefined method exception on error handling [issue #54](https://github.com/basecrm/basecrm-ruby/issues/54)
7+
38
v1.3.1 (2017-12-08)
49
**Features and Improvements**
510

@@ -54,8 +59,8 @@ v1.2.1 (2016-11-18)
5459

5560
* Sync API support
5661
* better handling of unexpected entity types
57-
* `BaseCRM::SyncService#fetch` method returns `BaseCRM::Meta`instead of `BaseCRM::SyncMeta`.
58-
This gives you additional information such as type.
62+
* `BaseCRM::SyncService#fetch` method returns `BaseCRM::Meta`instead of `BaseCRM::SyncMeta`.
63+
This gives you additional information such as type.
5964
* High-level `BaseCRM::Sync` wrapper expects either `meta.sync.ack` or `meta.sync.nack` to be called.
6065

6166
### v1.1.0 (2015-05-29)

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.3.1
1+
1.3.2

lib/basecrm/middlewares/raise_error.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ def on_complete(env)
88

99
content_type = env[:response_headers]['content-type']
1010

11-
unless content_type.include?('json')
12-
raise "status=#{status} error=Unknown error occurred."
13-
end
1411

1512
error_klass = case status
1613
when 422 then BaseCRM::ResourceError
1714
when 400...500 then BaseCRM::RequestError
1815
when 500...600 then BaseCRM::ServerError
1916
end
2017

21-
raise errors_collection(env, error_klass)
18+
if !content_type.nil? && content_type.include?('json')
19+
raise errors_collection(env, error_klass)
20+
else
21+
error = {:error=>{:code=>status, :message=>"Unknown error occurred."}, :meta=>{}}
22+
raise error_klass.new(error)
23+
end
2224
end
2325

2426
def errors_collection(env, error_klass)

lib/basecrm/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module BaseCRM
2-
VERSION = "1.3.1"
2+
VERSION = "1.3.2"
33
end
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
require "spec_helper"
2+
3+
describe BaseCRM::Middlewares::RaiseError do
4+
before { @raise_error = BaseCRM::Middlewares::RaiseError.new }
5+
6+
describe :on_complete do
7+
8+
it "returns nil when code 200..300" do
9+
expect { @raise_error.on_complete({:status => 204}) }.not_to raise_error
10+
end
11+
12+
it "raises ResourceError when code 422 and no content type" do
13+
expect { @raise_error.on_complete({:status => 422, :response_headers => {}}) }
14+
.to raise_error do |error|
15+
expect(error).to be_a(BaseCRM::ResourceError)
16+
expect(error.code).to eql(422)
17+
expect(error.message).to eql("Unknown error occurred.")
18+
end
19+
end
20+
21+
it "raises RequestError when code 400..500 and no content type" do
22+
expect { @raise_error.on_complete({:status => 400, :response_headers => {}}) }
23+
.to raise_error do |error|
24+
expect(error).to be_a(BaseCRM::RequestError)
25+
expect(error.code).to eql(400)
26+
expect(error.message).to eql("Unknown error occurred.")
27+
end
28+
end
29+
30+
it "raises ServerError when code 500..600 and no content type" do
31+
expect { @raise_error.on_complete({:status => 500, :response_headers => {}}) }
32+
.to raise_error do |error|
33+
expect(error).to be_a(BaseCRM::ServerError)
34+
expect(error.code).to eql(500)
35+
expect(error.message).to eql("Unknown error occurred.")
36+
end
37+
end
38+
39+
it "raises ResourceError when code 422 and XML (not supported) content type" do
40+
expect { @raise_error.on_complete({:status => 422, :response_headers => {'content-type' => "application/xml"}}) }
41+
.to raise_error do |error|
42+
expect(error).to be_a(BaseCRM::ResourceError)
43+
expect(error.code).to eql(422)
44+
expect(error.message).to eql("Unknown error occurred.")
45+
end
46+
end
47+
end
48+
end

0 commit comments

Comments
 (0)