Class: SavonHelper::SOAPInterface

Inherits:
Object
  • Object
show all
Defined in:
lib/savon_helper/soap_interface.rb

Direct Known Subclasses

DeepSecurity::SOAPInterface

Request Helper collapse

Instance Method Summary collapse

Constructor Details

#initialize(wsdl_url, logger = Logger.new(STDERR), log_level = nil, options = {}) ⇒ SOAPInterface



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/savon_helper/soap_interface.rb', line 7

def initialize(wsdl_url, logger = Logger.new(STDERR), log_level = nil, options = {})
  HTTPI.log = (!log_level.nil?)
  HTTPI.logger = logger
  HTTPI.log_level = log_level

  @client = Savon.client(options.merge({:wsdl => wsdl_url,
                                        :logger => logger,
                                        :log_level => log_level,
                                        :log => (!log_level.nil?),
                                        :ssl_verify_mode => :none}))
  @logger = logger
end

Instance Method Details

#loggerObject



20
21
22
# File 'lib/savon_helper/soap_interface.rb', line 20

def logger
  @logger
end

#request_array(method_name, object_class, collection_name = nil, arguments = {}) ⇒ Array<object_class>

Helper Method deserializing the SOAP response into an array of objects.



56
57
58
59
60
61
# File 'lib/savon_helper/soap_interface.rb', line 56

def request_array(method_name, object_class, collection_name = nil, arguments={})
  data = send_soap(method_name, arguments)
  data = data[collection_name] unless collection_name.blank?
  ArrayMapping.to_native(ObjectMapping.new(object_class), data, self)
  # SavonHelper::ArrayMapping.new(SavonHelper::ObjectMapping.new(object_class)).from_savon_data(data)
end

#request_object(method_name, object_class, arguments = {}) ⇒ object_class

Helper Method deserializing the SOAP response into an object



43
44
45
46
47
48
# File 'lib/savon_helper/soap_interface.rb', line 43

def request_object(method_name, object_class, arguments={})
  data = send_soap(method_name, arguments)
  # ObjectMapping.to_native(object_class, data, self)
  object_class.from_savon(data, self)
  # raise "Halt"
end

#retryable(options = {}, &block) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/savon_helper/soap_interface.rb', line 65

def retryable(options = {}, &block)
  opts = {:tries => 1, :on => Exception}.merge(options)

  retry_exception, retries = opts[:on], opts[:tries]

  begin
    return yield
  rescue retry_exception
    retry if (retries -= 1) > 0
  end

  yield
end

#send_soap(method, arguments = {}) ⇒ Hash

Send a Request to the SOAP API for method with arguments and unwrap the response



30
31
32
33
34
35
36
# File 'lib/savon_helper/soap_interface.rb', line 30

def send_soap(method, arguments = {})
  logger.debug { "#{self.class}\##{__method__}(#{method.inspect}, #{arguments.inspect})" }
  retryable(:tries => 5, :on => Errno::ECONNRESET) do
    response = @client.call method, :message => arguments
    return response.to_hash[(method.to_s+"_response").to_sym][(method.to_s+"_return").to_sym]
  end
end