Sha256: a50689c655a782fe5aaf646320996419bf94ca4d9272b43c1efbc44c862ec6f6

Contents?: true

Size: 1.48 KB

Versions: 17

Compression:

Stored size: 1.48 KB

Contents

module ActiveZuora
  class Connection

    attr_reader :soap_client
    attr_accessor :custom_header

    WSDL = File.expand_path('../../../wsdl/zuora.wsdl', __FILE__)

    def initialize(configuration={})
      # Store login credentials and create SOAP client.
      @username = configuration[:username]
      @password = configuration[:password]
      @session_timeout = configuration[:session_timeout] || 15.minutes
      @soap_client = Savon::Client.new do
        wsdl.document = configuration[:wsdl] || WSDL
        http.proxy = configuration[:http_proxy] if configuration[:http_proxy]
      end
    end

    def login
      # Returns a session_id upon success, raises an exception on failure.
      # Instance variables aren't available within the soap request block.
      body = { :username => @username, :password => @password }
      @soap_client.request(:login){ soap.body = body }[:login_response][:result][:session]
    end

    def request(*args, &block)
      # instance variables aren't available within the soap request block for some reason.
      header = { 'SessionHeader' => { 'session' => @session_id } }
      header.merge!(@custom_header) if @custom_header

      @soap_client.request(*args) do
        soap.header = header
        yield(soap)
      end
    rescue Savon::SOAP::Fault => exception
      # Catch invalid sessions, and re-issue the request.
      raise unless exception.message =~ /INVALID_SESSION/
      @session_id = login
      request(*args, &block)
    end

  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
active_zuora-2.2.7 lib/active_zuora/connection.rb
active_zuora-2.2.6 lib/active_zuora/connection.rb
active_zuora-2.2.5 lib/active_zuora/connection.rb
active_zuora-2.2.4 lib/active_zuora/connection.rb
active_zuora-2.2.3 lib/active_zuora/connection.rb
active_zuora-2.2.2 lib/active_zuora/connection.rb
active_zuora-2.2.1 lib/active_zuora/connection.rb
active_zuora-2.2.0 lib/active_zuora/connection.rb
active_zuora-2.1.4 lib/active_zuora/connection.rb
active_zuora-2.1.3 lib/active_zuora/connection.rb
active_zuora-2.1.2 lib/active_zuora/connection.rb
active_zuora-2.1.1 lib/active_zuora/connection.rb
active_zuora-2.0.6 lib/active_zuora/connection.rb
active_zuora-2.1.0 lib/active_zuora/connection.rb
active_zuora-2.0.5 lib/active_zuora/connection.rb
active_zuora-2.0.4 lib/active_zuora/connection.rb
active_zuora-2.0.3 lib/active_zuora/connection.rb