Skip to content

Commit 33c6de6

Browse files
committed
Handle rate limit responses gracefully
1 parent f18373c commit 33c6de6

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

lib/drip/response.rb

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,20 @@ def parse_meta
4444
end
4545

4646
def parse_members
47-
{}.tap do |members|
48-
if body.is_a?(Hash)
49-
body.each do |key, value|
50-
klass = if value.is_a?(Array)
51-
Drip::Collections.find_class(key)
52-
else
53-
Drip::Resources.find_class(key)
54-
end
47+
if status == 429
48+
body
49+
else
50+
{}.tap do |members|
51+
if body.is_a?(Hash)
52+
body.each do |key, value|
53+
klass = if value.is_a?(Array)
54+
Drip::Collections.find_class(key)
55+
else
56+
Drip::Resources.find_class(key)
57+
end
5558

56-
members[key] = klass.new(value)
59+
members[key] = klass.new(value)
60+
end
5761
end
5862
end
5963
end

test/drip/response_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,16 @@ class Drip::ResponseTest < Drip::TestCase
121121
assert_equal 1, @subject.subscribers.count
122122
end
123123
end
124+
125+
context "rate limit response" do
126+
setup do
127+
@body = {"message"=>"API rate limit exceeded. Please try again in an hour."}
128+
@subject = Drip::Response.new(429, @body)
129+
end
130+
131+
should "parse correctly" do
132+
assert_equal 429, @subject.status
133+
assert_equal @body["message"], @subject.message
134+
end
135+
end
124136
end

0 commit comments

Comments
 (0)