Class: Eloqua::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/eloqua/api.rb,
lib/eloqua/api/action.rb,
lib/eloqua/api/service.rb

Defined Under Namespace

Classes: Action, Service

Constant Summary collapse

XML_NS_ARRAY =

The namespace for Eloqua Array objects

'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
WSDL =

WSDLs are from 7-16-2012

{
  :service => File.dirname(__FILE__) + '/wsdl/service.wsdl',
  :data =>  File.dirname(__FILE__) + '/wsdl/data.wsdl',
  :email =>  File.dirname(__FILE__) + '/wsdl/email.wsdl',
  :action =>  File.dirname(__FILE__) + '/wsdl/action.wsdl'
}
@@clients =
{}

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.http_errorObject

Returns the value of attribute http_error.



34
35
36
# File 'lib/eloqua/api.rb', line 34

def http_error
  @http_error
end

.last_requestObject

Returns the value of attribute last_request.



34
35
36
# File 'lib/eloqua/api.rb', line 34

def last_request
  @last_request
end

.last_responseObject

Returns the value of attribute last_response.



34
35
36
# File 'lib/eloqua/api.rb', line 34

def last_response
  @last_response
end

.soap_errorObject

Returns the value of attribute soap_error.



34
35
36
# File 'lib/eloqua/api.rb', line 34

def soap_error
  @soap_error
end

Class Method Details

.builder(&block) ⇒ Object



61
62
63
# File 'lib/eloqua/api.rb', line 61

def builder(&block)
  Eloqua::Builder::Xml.create(:namespace => :wsdl, &block)
end

.client(type) ⇒ Object

There are four currently supported wsdl types for eloqua

  1. Service
  2. Data
  3. Email
  4. External Action


51
52
53
54
55
56
57
58
59
# File 'lib/eloqua/api.rb', line 51

def client(type)
  if(!Eloqua.user || !Eloqua.password)
    raise('Eloqua.user or Eloqua.password is not set see Eloqua.authenticate')
  end
  clients[type] = Savon::Client.new do
    wsdl.document = WSDL[type]
    wsse.credentials Eloqua.user, Eloqua.password
  end
end

.clientsObject



42
43
44
# File 'lib/eloqua/api.rb', line 42

def clients
  @@clients
end

.remote_type(name, type = 'Base', id = 0) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/eloqua/api.rb', line 65

def remote_type(name, type = 'Base', id = 0)
  {
    :name => name,
    :type => type,
    :id => id
  }
end

.request(type, name, soap_body = nil, &block) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/eloqua/api.rb', line 73

def request(type, name, soap_body = nil, &block)
  result = send_remote_request(type, name, soap_body, &block)

  self.last_request = client(type).soap.to_xml if client(type).soap
  self.last_response = result.to_xml if result.respond_to?(:to_xml)

  if(result)
    result = result.to_hash
    response_key = "#{name}_response".to_sym
    result_key = "#{name}_result".to_sym
    if(result.has_key?(response_key))
      result = result[response_key]
    end
    if(result.has_key?(result_key))
      result = result[result_key]
    end
  end
  result
end

.reset_clientsObject



38
39
40
# File 'lib/eloqua/api.rb', line 38

def reset_clients
  @@clients = {}
end

.response_errors(response) ⇒ Object

Raises:



108
109
110
111
112
113
114
# File 'lib/eloqua/api.rb', line 108

def response_errors(response)
  @soap_error = Eloqua::SoapError.new(response.http)
  @http_error = Eloqua::HTTPError.new(response.http)

  raise @soap_error if @soap_error.present?
  raise @http_error if @http_error.present?
end

.send_remote_request(type, name, soap_body = nil, &block) ⇒ Object

Sends remote request and returns a response object



94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/eloqua/api.rb', line 94

def send_remote_request(type, name, soap_body = nil, &block)
  @soap_error = nil
  @http_error = nil

  request = client(type).request(:wsdl, name) do
    soap.namespaces["xmlns:arr"] = XML_NS_ARRAY
    soap.element_form_default = :qualified
    soap.body = soap_body if soap_body
    instance_eval(&block) if block_given?
  end
  response_errors(request)
  request
end