From b0420dfa072e423fd82081611e6d9705351dab90 Mon Sep 17 00:00:00 2001 From: Mike Dalton Date: Fri, 19 Feb 2016 09:20:06 -0500 Subject: [PATCH] Add support for local request headers --- lib/savon/operation.rb | 3 ++- lib/savon/options.rb | 4 ++++ lib/savon/request.rb | 5 +++-- spec/savon/options_spec.rb | 11 +++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/savon/operation.rb b/lib/savon/operation.rb index 37078107..9489d60e 100644 --- a/lib/savon/operation.rb +++ b/lib/savon/operation.rb @@ -100,7 +100,8 @@ def build_request(builder) request = SOAPRequest.new(@globals).build( :soap_action => soap_action, - :cookies => @locals[:cookies] + :cookies => @locals[:cookies], + :headers => @locals[:headers] ) request.url = endpoint diff --git a/lib/savon/options.rb b/lib/savon/options.rb index 93bd7e50..b1108fe9 100644 --- a/lib/savon/options.rb +++ b/lib/savon/options.rb @@ -406,5 +406,9 @@ def response_parser(parser) def multipart(multipart) @options[:multipart] = multipart end + + def headers(headers) + @options[:headers] = headers + end end end diff --git a/lib/savon/request.rb b/lib/savon/request.rb index 920fbebf..668bc9c3 100644 --- a/lib/savon/request.rb +++ b/lib/savon/request.rb @@ -74,7 +74,7 @@ def build(options = {}) configure_proxy configure_cookies options[:cookies] configure_timeouts - configure_headers options[:soap_action] + configure_headers options[:soap_action], options[:headers] configure_ssl configure_auth configure_redirect_handling @@ -88,8 +88,9 @@ def configure_cookies(cookies) @http_request.set_cookies(cookies) if cookies end - def configure_headers(soap_action) + def configure_headers(soap_action, headers) @http_request.headers = @globals[:headers] if @globals.include? :headers + @http_request.headers.merge!(headers) if headers @http_request.headers["SOAPAction"] ||= %{"#{soap_action}"} if soap_action @http_request.headers["Content-Type"] ||= CONTENT_TYPE[@globals[:soap_version]] % @globals[:encoding] end diff --git a/spec/savon/options_spec.rb b/spec/savon/options_spec.rb index 5d570e46..0e5c03a7 100644 --- a/spec/savon/options_spec.rb +++ b/spec/savon/options_spec.rb @@ -1046,6 +1046,17 @@ def to_s end end + context "request :headers" do + it "sets headers" do + client = new_client(:endpoint => @server.url(:inspect_request)) + + response = client.call(:authenticate, :headers => { "X-Token" => "secret" }) + x_token = inspect_request(response).x_token + + expect(x_token).to eq("secret") + end + end + def new_client(globals = {}, &block) globals = { :wsdl => Fixture.wsdl(:authentication), :log => false }.merge(globals) Savon.client(globals, &block)