class Agris::SavonRequest

Public Class Methods

new(base_url, credentials, logger, log_level, proxy_url = nil) click to toggle source
# File lib/agris/savon_request.rb, line 7
def initialize(base_url, credentials, logger, log_level, proxy_url = nil)
  @base_url = base_url
  @credentials = credentials
  @logger = logger
  @log_level = log_level
  @proxy_url = proxy_url
end

Public Instance Methods

process_message(context, message_number, input) click to toggle source
# File lib/agris/savon_request.rb, line 15
def process_message(context, message_number, input)
  response = client.call(
    :process_message,
    message: {
      AgContext_str_p: context,
      AgMessage_int_p: message_number,
      AgInput_obj_p: input
    }
  )
  message_response = parse_response(response)

  fail response_error(message_response.error_info) \
    if message_response.error?

  message_response
end

Protected Instance Methods

client() click to toggle source
# File lib/agris/savon_request.rb, line 42
def client
  options = {
    wsdl: wsdl,
    convert_request_keys_to: :none,
    raise_errors: false,
    logger: @logger,
    log: true,
    log_level: @log_level || :debug
  }
  options = options.merge(proxy: @proxy_url) unless @proxy_url.to_s == ''
  options = @credentials.apply(options)

  Savon.client(options)
end
parse_response(response) click to toggle source
# File lib/agris/savon_request.rb, line 34
def parse_response(response)
  ProcessMessageResponse.new(
    response.body[:process_message_result],
    response.body[:process_message_response][:ag_output_obj_p],
    response.body[:process_message_response][:ag_error_str_p]
  )
end
response_error(error_info) click to toggle source
# File lib/agris/savon_request.rb, line 57
def response_error(error_info)
  Object.const_get(
    format(
      'Agris::%<error_name>sError',
      error_name: error_info.type.to_s.split('_').map(&:capitalize).join
    )
  ).new(error_info.payload)
end
wsdl() click to toggle source
# File lib/agris/savon_request.rb, line 66
def wsdl
  format(
    '%<base_url>s/%<path>s',
    base_url: @base_url,
    path: 'agris/AGRIS.Env.MessageRouter/AGRIS.Env.MessageRouter.asmx?WSDL'
  )
end