class WorldnetTps::Request::Base

Attributes

attributes[R]
date_time[R]
gateway[R]
request[R]
response[R]

Protected Class Methods

mandatory_attributes(_context) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 86
def self.mandatory_attributes(_context)
  []
end
optional_attributes(_context) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 90
def self.optional_attributes(_context)
  []
end
request_check_sum_keys(_context) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 98
def self.request_check_sum_keys(_context)
  []
end
response_check_sum_keys(_context, _response) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 94
def self.response_check_sum_keys(_context, _response)
  []
end

Public Instance Methods

invoke!() click to toggle source
# File lib/worldnet_tps/request/base.rb, line 31
def invoke!
  _invoke! invoke_method
end
process!(struct) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 19
def process!(struct)
  xml = build_xml(struct)
  validate_xml!(xml) if xsd_validation?
  uri = URI.parse(ws_url)
  http = Net::HTTP.new(uri.host, 443)
  http.use_ssl = true
  @request = Net::HTTP::Post.new(uri.request_uri)
  @request.body = xml
  @response = http.request(@request)
  build_response(@response)
end

Protected Instance Methods

_invoke!(action) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 72
def _invoke!(action)
  add_check_sum!
  verify_request_keys!(self.class.mandatory_attributes(self), self.attributes)
  attrs = (request_attributes).inject({}) do |h, i|
    h[i] = self.attributes[i]
    h
  end.reject { |_, v| v.nil? }
  process!(action => attrs)
end
build_failed_response(code, message) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 47
def build_failed_response(code, message)
  Response::Error.new(code, message)
end
build_response(http_response) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 56
def build_response(http_response)
  data = Hash.from_xml(http_response.body).values.first
  if data.keys[0] =~ /error/i
    build_failed_response(data['ERRORCODE'], data['ERRORSTRING'])
  else
    response_attributes = normalize_response_attributes(data)
    begin
      validate_hash!(response_attributes)
    rescue WorldnetTps::WsObject::InvalidHashError => e
      return Response::InvalidHash.new(response_attributes)
    end
    build_success_response(response_attributes)
  end
end
build_success_response(attributes) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 52
def build_success_response(attributes)
  Response::Success.new(attributes)
end
build_xml(struct) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 41
def build_xml(struct)
  root = struct.keys.first
  data = Hash[struct[root].map { |k, v| [prepare_key(k), v.to_s] }]
  data.to_xml(root: prepare_key(root))
end
request_attributes() click to toggle source
# File lib/worldnet_tps/request/base.rb, line 82
def request_attributes
  self.class.mandatory_attributes(self) + self.class.optional_attributes(self)
end
validate_xml!(xml) click to toggle source
# File lib/worldnet_tps/request/base.rb, line 37
def validate_xml!(xml)
  WorldnetTps::XSD.validate!(xml)
end
ws_url() click to toggle source
# File lib/worldnet_tps/request/base.rb, line 102
def ws_url
  gateway.ws_url
end