Skip to content

Commit baa5e16

Browse files
committed
Merge branch 'raise_on_regexpr' of https://github.com/ryanfox1985/httparty into ryanfox1985-raise_on_regexpr
2 parents 1aa552f + c630a95 commit baa5e16

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

lib/httparty.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def logger(logger, level = :info, format = :apache)
8383
#
8484
# class Foo
8585
# include HTTParty
86-
# raise_on [404, 500]
86+
# raise_on [404, 500, '5[0-9]*']
8787
# end
8888
def raise_on(codes = [])
8989
default_options[:raise_on] = *codes

lib/httparty/response.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def method_missing(name, *args, &block)
133133
end
134134

135135
def throw_exception
136-
if @request.options[:raise_on] && @request.options[:raise_on].include?(code)
136+
if @request.options[:raise_on].to_a.detect { |c| code.to_s.match(/#{c.to_s}/) }
137137
::Kernel.raise ::HTTParty::ResponseError.new(@response), "Code #{code} - #{body}"
138138
end
139139
end

spec/httparty/response_spec.rb

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,29 +50,50 @@
5050
expect(unparseable_response.http_version).to eq(@response_object.http_version)
5151
end
5252

53-
context 'when raise_on is supplied' do
53+
context 'test raise_on requests' do
5454
let(:request) { HTTParty::Request.new(Net::HTTP::Get, '/', raise_on: [404]) }
55+
let(:body) { 'Not Found' }
56+
let(:response) { Net::HTTPNotFound.new('1.1', 404, body) }
5557

56-
context "and response's status code is in range" do
57-
let(:body) { 'Not Found' }
58-
let(:response) { Net::HTTPNotFound.new('1.1', 404, body) }
58+
subject { described_class.new(request, response, @parsed_response) }
5959

60-
before do
61-
allow(response).to receive(:body).and_return(body)
60+
before do
61+
allow(response).to receive(:body).and_return(body)
62+
end
63+
64+
context 'when raise_on is a number' do
65+
let(:raise_on) { [404] }
66+
67+
context "and response's status code is in range" do
68+
it 'throws exception' do
69+
expect{ subject }.to raise_error(HTTParty::ResponseError, "Code 404 - #{body}")
70+
end
6271
end
6372

64-
subject { described_class.new(request, response, @parsed_response) }
73+
context "and response's status code is not in range" do
74+
subject { described_class.new(request, @response_object, @parsed_response) }
6575

66-
it 'throws exception' do
67-
expect{ subject }.to raise_error(HTTParty::ResponseError, "Code 404 - #{body}")
76+
it 'does not throw exception' do
77+
expect{ subject }.not_to raise_error
78+
end
6879
end
6980
end
7081

71-
context "and response's status code is not in range" do
72-
subject { described_class.new(request, @response_object, @parsed_response) }
82+
context 'when raise_on is a regexpr' do
83+
let(:raise_on) { ['4[0-9]*'] }
84+
85+
context "and response's status code is in range" do
86+
it 'throws exception' do
87+
expect{ subject }.to raise_error(HTTParty::ResponseError, "Code 404 - #{body}")
88+
end
89+
end
90+
91+
context "and response's status code is not in range" do
92+
subject { described_class.new(request, @response_object, @parsed_response) }
7393

74-
it 'does not throw exception' do
75-
expect{ subject }.not_to raise_error
94+
it 'does not throw exception' do
95+
expect{ subject }.not_to raise_error
96+
end
7697
end
7798
end
7899
end

0 commit comments

Comments
 (0)