class RoyalMailApi::RequestHandler
Public Class Methods
request(request, attrs={})
click to toggle source
# File lib/royal_mail_api/request_handler.rb, line 4 def request(request, attrs={}) begin xml = build_xml(attrs) config.logger.info("CREATE SHIPMENT REQUEST: #{xml}") savon.call(request, xml: xml) rescue Savon::SOAPFault => e config.logger.error("CREATE SHIPMENT ERROR #{e.http.code}") config.logger.error("ERROR XML: #{e.xml}") raise RoyalMailApi::SoapError.new({ xml: e.xml, error_code: e.http.code }) end end
Private Class Methods
build_xml(attrs={})
click to toggle source
# File lib/royal_mail_api/request_handler.rb, line 21 def build_xml(attrs={}) XmlBuilder.new(:create_shipment, attrs.merge(security_attrs)).build end
config()
click to toggle source
# File lib/royal_mail_api/request_handler.rb, line 59 def config Client.config end
savon()
click to toggle source
# File lib/royal_mail_api/request_handler.rb, line 45 def savon Savon.client( adapter: config.adapter, wsdl: config.wsdl, endpoint: config.endpoint, namespace: config.endpoint, ssl_ca_cert_file: config.ssl_ca_cert_file, ssl_cert_file: config.ssl_cert_file, ssl_cert_key_file: config.ssl_cert_key_file, open_timeout: 600, read_timeout: 600 ) end
security_attrs()
click to toggle source
# File lib/royal_mail_api/request_handler.rb, line 25 def security_attrs # TODO move into own value object password = config.password creation_date = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%S') nonce = rand(999999).to_s hashedpassword = Digest::SHA1.base64digest(password) { username: config.username, application_id: config.application_id, creation_date: creation_date, encoded_nonce: Base64.encode64(nonce), password_digest: Digest::SHA1.base64digest( nonce + creation_date + hashedpassword ) } end