Skip to content

Commit 3b50252

Browse files
authored
Add gzip middleware when Accept-Encoding includes gzip (#1030)
* Adds gzip middleware to request/response when Accept-Encoding includes gzip * Adds specs for automatically adding handling of gzipped request/responses
1 parent 55d2dde commit 3b50252

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

lib/savon/request.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ def configure_logging
8080
connection.response(:logger, @globals[:logger], headers: @globals[:log_headers]) if @globals[:log]
8181
end
8282

83+
def configure_gzip
84+
if connection.headers['Accept-Encoding'] && connection.headers['Accept-Encoding'].include?('gzip')
85+
connection.request :gzip
86+
end
87+
end
88+
8389
protected
8490
attr_reader :connection
8591
end
@@ -94,6 +100,7 @@ def build
94100
configure_adapter
95101
configure_logging
96102
configure_headers
103+
configure_gzip
97104
connection
98105
end
99106

@@ -121,6 +128,7 @@ def build(options = {})
121128
configure_adapter
122129
configure_logging
123130
configure_redirect_handling
131+
configure_gzip
124132
yield(connection) if block_given?
125133
connection
126134
end

spec/savon/request_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,28 @@ def new_soap_request
274274
end
275275
end
276276

277+
describe "gzip" do
278+
it "is set when Accept-Encoding with gzip is specified" do
279+
globals.headers("Accept-Encoding" => "gzip,deflate")
280+
http_connection.expects(:request).with(:gzip)
281+
282+
new_soap_request.build
283+
end
284+
285+
it "is not set when Acccept-Encoding does not include gzip" do
286+
globals.headers("Accept-Encoding" => "deflate")
287+
http_connection.expects(:request).with(:gzip).never
288+
289+
new_soap_request.build
290+
end
291+
292+
it "is not set otherwise" do
293+
http_connection.expects(:request).with(:gzip).never
294+
295+
new_soap_request.build
296+
end
297+
end
298+
277299
describe "SOAPAction header" do
278300
it "is set and wrapped in parenthesis" do
279301
configured_http_request = new_soap_request.build(:soap_action => "findUser")

0 commit comments

Comments
 (0)