class NetRegistry::ResponseBuilder

Attributes

response[R]

Public Class Methods

new() click to toggle source
# File lib/net_registry/response_builder.rb, line 32
def initialize
  @response = NetRegistry::Response.new
end

Public Instance Methods

create() click to toggle source
# File lib/net_registry/response_builder.rb, line 65
def create
  @response
end
parse(response) click to toggle source

parse HTTP request response body into a response object return builder itself. To get the response object, use create method

# File lib/net_registry/response_builder.rb, line 72
def parse(response)
  raise TypeError, "Response is not a string" if !response.is_a?(String)
  @full_response = response.split("\n").map(&:strip)
  if @full_response.first == "failed"
    parse_failed_response
  else
    @full_response.each do |line|
      data  = line.split("=")
      parse_success_line(key: data[0], value: data[1])
    end
    @receipt = @full_response.drop_while { |line| !line.include?("Reciept follows") }
    if @receipt.include?("Reciept follows")
      # Don't want the "Reciept follows" line, nor the "." and "done" line.
      # Only want the receipt in between
      @receipt = @receipt[1...-2]
      @response.transaction.receipt = @receipt.join("\n")
    end
  end

  self
end
verify_params(params = {}) click to toggle source

command (String): Denotes which action we're taking.

Only accepts the following actions:
purchase, refund, preauth, status.

params (Hash): Variables to pass to NetRegistry

# File lib/net_registry/response_builder.rb, line 40
def verify_params(params = {})
  success = false
  params  = process_params(params)
  case params[:COMMAND]
  when "purchase"
    @response.text, success = validate_purchase_params(params)
  when "refund"
    @response.text, success = validate_refund_params(params)
  when "preauth"
    @response.text, success = validate_preauth_params(params)
  when "status"
    @response.text, success = validate_status_params(params)
  when "completion"
    @response.text, success = validate_completion_params(params)
  else
    @response.text = "Invalid command. Only [purchase status preauth refund completion] are valid."
    success        = false
  end
  @response.code   = 0  if success
  @response.result = 0  if success
  @response.status = "" if success

  @response.success?
end

Protected Instance Methods

parse_failed_response() click to toggle source
# File lib/net_registry/response_builder.rb, line 95
def parse_failed_response
  # remove all spaces until the dot
  lines = @full_response.drop_while { |x| x != "." }
  if lines.empty?
    @response.text = @full_response[1]
  else
    lines.shift
    lines[0].slice!("response_text=")
    @response.text = lines[0]
  end
  @response.status = "failed"
  @response.code   = -1
end
parse_success_line(key:, value:) click to toggle source
# File lib/net_registry/response_builder.rb, line 109
def parse_success_line(key:, value:)
  case key
  when "card_number", "card_no"
    @response.transaction.card.number = value
  when "response_text"
    @response.text = value
  when "response_code"
    @response.code = value
  when "status"
    @response.status = value
  when "result"
    @response.result = value
  when "amount", "total_amount"
    @response.transaction.amount = value
  when "time"
    @response.transaction.time = value
  when "command"
    @response.transaction.command = value
  when "txnref", "txn_ref"
    @response.transaction.reference = value
  when "transaction_no"
    @response.transaction.number = value
  when "bank_ref"
    @response.transaction.bank_reference = value
  when "settlement_date"
    @response.transaction.settlement_date = value
  when "rrn"
    @response.transaction.rrn = value
  when "MID"
    @response.transaction.merchant_id = value
  when "card_type"
    @response.transaction.card.type = value
  when "card_expiry"
    @response.transaction.card.expiry = value
  when "card_desc"
    @response.transaction.card.description = value
  end
end
process_params(params) click to toggle source

Pre-process parameters. In this instance, pre-process all parameters into strings, for easy params validation

# File lib/net_registry/response_builder.rb, line 224
def process_params(params)
  params.each { |key, value| params[key] = value.to_s }
end
valid_expiry_format?(card_expiry) click to toggle source
# File lib/net_registry/response_builder.rb, line 212
def valid_expiry_format?(card_expiry)
  raise TypeError if !card_expiry.is_a?(String)
  begin
    Date.parse(card_expiry)
    !NetRegistry::Helpers::EXPIRY_REGEX.match(card_expiry).nil?
  rescue ArgumentError
    false
  end
end
validate_completion_params(params) click to toggle source
# File lib/net_registry/response_builder.rb, line 196
def validate_completion_params(params)
  if params[:PREAUTHNUM].nil? || params[:PREAUTHNUM].empty?
    return "PREAUTHNUM not found", false
  elsif params[:CCNUM].nil? || params[:CCNUM].empty?
    return "CCNUM not found", false
  elsif params[:CCEXP].nil? || params[:CCEXP].empty?
    return "CCEXP not found", false
  elsif !valid_expiry_format?(params[:CCEXP])
    return "CCEXP invalid format", false
  elsif params[:AMOUNT].nil? || params[:AMOUNT].empty?
    return "AMOUNT not found", false
  else
    return "", true
  end
end
validate_preauth_params(params) click to toggle source
# File lib/net_registry/response_builder.rb, line 174
def validate_preauth_params(params)
  if params[:CCNUM].nil? || params[:CCNUM].empty?
    return "CCNUM not found", false
  elsif params[:CCEXP].nil? || params[:CCEXP].empty?
    return "CCEXP not found", false
  elsif !valid_expiry_format?(params[:CCEXP])
    return "CCEXP invalid format", false
  elsif params[:AMOUNT].nil? || params[:AMOUNT].empty?
    return "AMOUNT not found", false
  else
    return "", true
  end
end
validate_purchase_params(params) click to toggle source

Preliminary validation for the purchase method Returns a Response Object

# File lib/net_registry/response_builder.rb, line 150
def validate_purchase_params(params)
  if params[:AMOUNT].nil?   || params[:AMOUNT].empty?
    return "AMOUNT not found", false
  elsif params[:CCNUM].nil? || params[:CCNUM].empty?
    return "CCNUM not found", false
  elsif params[:CCEXP].nil? || params[:CCEXP].empty?
    return "CCEXP not found", false
  elsif !valid_expiry_format?(params[:CCEXP])
    return "CCEXP invalid format", false
  else
    return "", true
  end
end
validate_refund_params(params) click to toggle source
# File lib/net_registry/response_builder.rb, line 164
def validate_refund_params(params)
  if params[:AMOUNT].nil? || params[:AMOUNT].empty?
    return "AMOUNT not found", false
  elsif params[:TXNREF].nil? || params[:TXNREF].empty?
    return "TXNREF not found", false
  else
    return "", true
  end
end
validate_status_params(params) click to toggle source
# File lib/net_registry/response_builder.rb, line 188
def validate_status_params(params)
  if params[:TXNREF].nil? || params[:TXNREF].empty?
    return "TXNREF not found", false
  else
    return "", true
  end
end