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