class Trustev::Transaction
Constants
- COUNTRY_CODES
- CURRENCY_CODES
- SERVICE_URL
Public Class Methods
new(transaction_number)
click to toggle source
# File lib/trustev/transaction.rb, line 42 def initialize(transaction_number) raise Error.new('TransactionNumber is required.') if transaction_number.nil? @transaction_number = transaction_number end
Public Instance Methods
create(transaction=nil)
click to toggle source
# File lib/trustev/transaction.rb, line 47 def create(transaction=nil) raise Error.new('Transaction options are missing') if transaction.nil? validate(transaction) Trustev.send_request SERVICE_URL, build(transaction), 'POST' end
set_bin(bin)
click to toggle source
# File lib/trustev/transaction.rb, line 71 def set_bin(bin) raise Error.new('BIN is required') if bin.nil? body = { BINNumber: bin } Trustev.send_request "#{SERVICE_URL}/#{@transaction_number}/BIN", body, 'PUT' end
set_status(status, reason, comment)
click to toggle source
# File lib/trustev/transaction.rb, line 59 def set_status(status, reason, comment) raise Error.new('Invalid Status Code') if Trustev::STATUS_TYPES.key(status).nil? raise Error.new('Invalid Reason Code') if Trustev::REASON_TYPES.key(reason).nil? raise Error.new('Status comment cannot be blank') if comment.nil? || comment.empty? body = { Status: status, Reason: reason, Comment: comment } Trustev.send_request "#{SERVICE_URL}/#{@transaction_number}/Status", body, 'PUT' end
update(transaction=nil)
click to toggle source
# File lib/trustev/transaction.rb, line 53 def update(transaction=nil) raise Error.new('Transaction options are missing') if transaction.nil? validate(transaction) Trustev.send_request "#{SERVICE_URL}/#{@transaction_number}", build(transaction), 'PUT' end
Private Instance Methods
address_to_object(address)
click to toggle source
# File lib/trustev/transaction.rb, line 179 def address_to_object(address) { Type: address[:type], FirstName: address[:first_name] || ' ', LastName: address[:last_name] || ' ', Address1: address[:address_1] || ' ', Address2: address[:address_2] || ' ', Address3: address[:address_3] || ' ', City: address[:city] || ' ', State: address[:state] || ' ', PostalCode: address[:postal_code] || ' ', CountryIsoA2Code: address[:country_code] } end
build(transaction)
click to toggle source
# File lib/trustev/transaction.rb, line 106 def build(transaction) built_transaction = { TransactionNumber: @transaction_number, TransactionData: { Currency: transaction[:transaction_data][:currency_code], TotalDelivery: transaction[:transaction_data][:total_delivery] || 0, TotalBeforeTax: transaction[:transaction_data][:total_before_tax] || 0, TotalDiscount: transaction[:transaction_data][:total_discount] || 0, TotalTax: transaction[:transaction_data][:total_tax] || 0, TotalTransactionValue: transaction[:transaction_data][:total_transaction_value], Timestamp: "\/Date(#{transaction[:transaction_data][:timestamp]})\/" }, Customer: { FirstName: transaction[:customer][:first_name] || ' ', LastName: transaction[:customer][:last_name] || ' ', PhoneNumber: transaction[:customer][:phone_number] || '0000', Email: [] }, SessionId: transaction[:session_id] } built_transaction[:Customer][:DateOfBirth] = "\/Date(#{transaction[:customer][:dob]})\/" unless transaction[:customer][:dob].nil? unless transaction[:social_network].nil? built_transaction[:SocialNetwork] = { Type: transaction[:social_network][:type], Id: transaction[:social_network][:id] } end unless transaction[:transaction_data][:address].nil? || transaction[:transaction_data][:address].size == 0 built_transaction[:TransactionData][:Address] = [] transaction[:transaction_data][:address].each do | address | built_transaction[:TransactionData][:Address].push(address_to_object address) end end unless transaction[:transaction_data][:item].nil? || transaction[:transaction_data][:item].size == 0 built_transaction[:TransactionData][:Item] = [] transaction[:transaction_data][:item].each do | item | built_transaction[:TransactionData][:Item].push({ Name: item[:name] || ' ', URL: item[:url] || ' ', ImageURL: item[:image_url] || ' ', Quantity: item[:quantity] || 0, TotalBeforeTax: item[:total_before_tax] || 0, TotalDiscount: item[:total_discount] || 0, TotalTax: item[:total_tax] || 0, TotalItemValue: item[:total_item_value] || 0 }) end end transaction[:customer][:email].each do | email | built_transaction[:Customer][:Email].push({ IsDefault: email[:is_default] || false, EmailAddress: email[:address] || ' ' }) end unless transaction[:customer][:address].nil? || transaction[:customer][:address].size == 0 built_transaction[:Customer][:Address] = [] transaction[:customer][:address].each do | address | address_object = address_to_object address address_object[:IsDefault] = address[:is_default] || false built_transaction[:Customer][:Address].push(address_object) end end built_transaction end
validate(transaction)
click to toggle source
# File lib/trustev/transaction.rb, line 81 def validate(transaction) raise Error.new('Session ID is required.') if transaction[:session_id].nil? unless transaction[:social_network].nil? raise Error.new('Social Network Type is required') if transaction[:social_network][:type].nil? && !transaction[:social_network][:id].nil? raise Error.new('Social Network ID is required') if transaction[:social_network][:id].nil? && !transaction[:social_network][:type].nil? end raise Error.new('Invalid Currency Code') if CURRENCY_CODES.index(transaction[:transaction_data][:currency_code]).nil? raise Error.new('Total Transaction Value is required') if transaction[:transaction_data][:total_transaction_value].nil? transaction[:transaction_data][:address].each_with_index do | address, i | transaction[:transaction_data][:address][i] = validate_address address end raise Error.new('Customer is required') if transaction[:customer].nil? transaction[:customer][:address].each_with_index do | address, i | transaction[:customer][:address][i] = validate_address address end raise Error.new('Customer email is required') if transaction[:customer][:email].nil? || transaction[:customer][:email].size == 0 end
validate_address(address)
click to toggle source
# File lib/trustev/transaction.rb, line 99 def validate_address(address) address[:country_code] = 'NS' if address[:country_code].nil? raise Error.new('Invalid Country Code') if COUNTRY_CODES.index(address[:country_code]).nil? raise Error.new('Invalid Address Type') if Trustev::ADDRESS_TYPES.key(address[:type]).nil? address end