class Kampainer::Session

Constants

XMLNS

Attributes

base_url[R]
logger[RW]
password[R]
username[R]

Public Class Methods

new(username:, password:, base_url: nil, logger: nil) click to toggle source
# File lib/kampainer/session.rb, line 12
def initialize(username:, password:, base_url: nil, logger: nil)
  @base_url = base_url || 'https://ws.campaigner.com/'
  @username = username
  @password = password
  @logger = logger || Logger.new('/dev/null')
end

Public Instance Methods

call(url, action_name, *params) click to toggle source
# File lib/kampainer/session.rb, line 19
def call(url, action_name, *params)
  xml_request = build_xml_request(action_name, *params)
  commit(url, action_name, xml_request)
end

Protected Instance Methods

build_xml_request(action_name, *nodes) click to toggle source
# File lib/kampainer/session.rb, line 26
def build_xml_request(action_name, *nodes)
  RequestBody.new(action_name, username, password, nodes).to_xml
end
commit(url, action_name, xml_request) click to toggle source
# File lib/kampainer/session.rb, line 30
def commit(url, action_name, xml_request)
  headers = {
    'SOAPAction' => "#{XMLNS}/#{action_name}",
    'Content-Type' => 'text/xml; charset=utf-8',
    'Content-Length' => xml_request.size.to_s
  }
  request = HttpRequest.new('POST', url, headers, logger)
  parse request.send("#{XMLNS}/#{action_name}", xml_request)
end
parse(xml) click to toggle source
# File lib/kampainer/session.rb, line 40
def parse(xml)
  xmldoc = Nokogiri::XML(xml)

  header = xmldoc.xpath('//soap:Header/*')
  response_header = Kampainer.const_get(header[0].name).from_xml(header[0].to_s)
  raise Error, response_header.message if response_header.error_flag?

  body = xmldoc.xpath('//soap:Body/*[1]')[0]

  response = []

  body.xpath('*')&.each do |node|
    node.elements.each do |childnode|
      response << Kampainer.const_get(childnode.name).from_xml(childnode.to_s)
    rescue
      response << childnode.inner_text
    end
  end

  response
end