class Arbetsformedlingen::API::BaseSOAPClient
Base client for SOAP clients
Attributes
namespace[R]
request[R]
service_url[R]
Public Class Methods
new(url, namespace)
click to toggle source
Initialize client
# File lib/arbetsformedlingen/api/base_soap_client.rb, line 13 def initialize(url, namespace) @service_url = url @namespace = namespace @request = SOAPRequest.new(url) end
Public Instance Methods
client_request(name, args: {})
click to toggle source
Perform client request @param [String] name of the main node @param args [Hash] optional arguments @return [Response]
# File lib/arbetsformedlingen/api/base_soap_client.rb, line 23 def client_request(name, args: {}) soap_body = SOAPBuilder.wrap do |body| # rubocop:disable Lint/UnusedBlockArgument # HACK: Work around the XMLBuilder DSL ruby_statements = args.map do |key, value| if value.is_a?(Array) inner_ruby_statements = value.map do |(k, v)| "inode.#{k}('#{v}')" end <<~RUBY_EVAL node.#{key} { |inode| #{inner_ruby_statements.join(';')} } RUBY_EVAL else "node.#{key}('#{value}')" end end ruby_xml_builder_code = <<~RUBY_EVAL body.#{name}(xmlns: namespace) { |node| #{ruby_statements.join(';')} } RUBY_EVAL instance_eval(ruby_xml_builder_code) end request.post(soap_body.to_xml) end