class WsdlMapper::Runtime::Middlewares::SimpleDispatcher
Attributes
cnx[R]
logger[RW]
Public Class Methods
new(connection = Faraday.new, auto_retry = false, logger = nil)
click to toggle source
@param [Faraday::Connection] connection A faraday connection to use.
# File lib/wsdl_mapper/runtime/middlewares/simple_dispatcher.rb, line 16 def initialize(connection = Faraday.new, auto_retry = false, logger = nil) @cnx = connection @auto_retry = auto_retry @logger = logger || Logger.new(File::NULL).tap { |l| l.level = Logger::FATAL } end
Public Instance Methods
call(operation, request)
click to toggle source
Dispatches the request via the configured {#cnx} and returns the HTTP response. @param [WsdlMapper::Runtime::Operation] operation @param [WsdlMapper::Runtime::Request] request @return [Array<WsdlMapper::Runtime::Operation, Faraday::Response>] @raise [WsdlMapper::Runtime::Errors::TransportError] if a network error occured
# File lib/wsdl_mapper/runtime/middlewares/simple_dispatcher.rb, line 27 def call(operation, request) retries = 0 begin http_response = execute_request(request) [operation, http_response] rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Faraday::Error => e if @auto_retry && retries <= @auto_retry retries += 1 @logger.debug { "Error occured: #{e}, attempting retry #{retries}."} retry end raise TransportError.new(e.message, e, request) rescue HTTPError => e if @auto_retry && retries <= @auto_retry retries += 1 @logger.debug { "Error occured: #{e}, attempting retry #{retries}."} retry end raise e end end
execute_request(request)
click to toggle source
# File lib/wsdl_mapper/runtime/middlewares/simple_dispatcher.rb, line 50 def execute_request(request) http_response = cnx.post do |c| c.url request.url c.body = request.xml request.http_headers.each do |key, val| c[key] = val end end if http_response.status.to_s !~ /^2/ raise HTTPError.new(http_response.status, http_response.body, nil, request) end http_response end