class Smartpay::Requests::CheckoutSession

Constants

CAN_FALLBACK_KEYS
REQUIREMENT_KEY_NAME

Attributes

payload[RW]

Public Class Methods

new(raw_payload) click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 11
def initialize(raw_payload)
  @payload = raw_payload.transform_keys(&:to_sym)
end

Public Instance Methods

as_hash() click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 15
def as_hash
  check_requirement!
  normalize_payload
end

Private Instance Methods

check_requirement!() click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 22
def check_requirement!
  REQUIREMENT_KEY_NAME.each do |key_name|
    next if CAN_FALLBACK_KEYS.include?(key_name)
    raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
  end
end
get_total_amount() click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 120
def get_total_amount
  total_amount = payload.dig(:amount) || payload.dig('amount')

  if total_amount.nil?
    items = payload.dig(:items)

    if !items.nil? && items.count > 0
      total_amount = items.inject(0) { |sum, item| sum + (item[:amount] || item['amount'] || 0) }
    end

    shipping_fee = payload.dig(:shippingInfo, :feeAmount) ||
                    payload.dig(:shippingInfo, 'feeAmount') ||
                    0
    total_amount = shipping_fee + (total_amount || 0)
  end

  total_amount
end
normalize_customer_info(info) click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 52
def normalize_customer_info(info)
  return if info.nil?
  customer = info.transform_keys(&:to_sym)
  {
    accountAge: customer.dig(:accountAge),
    emailAddress: customer.dig(:emailAddress) || customer.dig(:email),
    firstName: customer.dig(:firstName),
    lastName: customer.dig(:lastName),
    firstNameKana: customer.dig(:firstNameKana),
    lastNameKana: customer.dig(:lastNameKana),
    address: customer.dig(:address),
    phoneNumber: customer.dig(:phoneNumber) || customer.dig(:phone),
    dateOfBirth: customer.dig(:dateOfBirth),
    legalGender: customer.dig(:legalGender) || customer.dig(:gender),
    reference: customer.dig(:reference)
  }
end
normalize_items(data) click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 92
def normalize_items(data)
  return [] if data.nil?

  data.map do |item|
    line_item = item.transform_keys(&:to_sym)
    {
      quantity: line_item.dig(:quantity),
      label: line_item.dig(:label),
      name: line_item.dig(:name),
      amount: line_item.dig(:amount),
      currency: line_item.dig(:currency),
      brand: line_item.dig(:brand),
      categories: line_item.dig(:categories),
      gtin: line_item.dig(:gtin),
      images: line_item.dig(:images),
      reference: line_item.dig(:reference),
      url: line_item.dig(:url),
      description: line_item.dig(:description),
      priceDescription: line_item.dig(:priceDescription),
      productDescription: line_item.dig(:productDescription),
      metadata: line_item.dig(:metadata),
      productMetadata: line_item.dig(:productMetadata),
      priceMetadata: line_item.dig(:priceMetadata)
    }
  end
end
normalize_payload() click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 29
def normalize_payload
  shipping_info = payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping))
  if shipping_info && shipping_info[:feeCurrency].nil? && !(shipping_info[:feeAmount].nil?)
    shipping_info[:feeCurrency] = payload.dig(:currency)
  end

  total_amount = get_total_amount

  {
    customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
    amount: total_amount,
    captureMethod: payload.dig(:captureMethod),
    currency: payload.dig(:currency),
    description: payload.dig(:description),
    shippingInfo: shipping_info,
    items: normalize_items(payload.dig(:items)),
    metadata: payload.dig(:metadata) || {},
    reference: payload.dig(:reference),
    successUrl: payload.dig(:successUrl),
    cancelUrl: payload.dig(:cancelUrl),
  }
end
normalize_shipping(shipping) click to toggle source
# File lib/smartpay/requests/checkout_session.rb, line 70
def normalize_shipping(shipping)
  return if shipping.nil?
  shipping= shipping.transform_keys(&:to_sym)
  {
    address: shipping.dig(:address) || {
      line1: shipping.dig(:line1),
      line2: shipping.dig(:line2),
      line3: shipping.dig(:line3),
      line4: shipping.dig(:line4),
      line5: shipping.dig(:line5),
      subLocality: shipping.dig(:subLocality),
      locality: shipping.dig(:locality),
      administrativeArea: shipping.dig(:administrativeArea),
      postalCode: shipping.dig(:postalCode),
      country: shipping.dig(:country),
    },
    addressType: shipping.dig(:addressType),
    feeAmount: shipping.dig(:feeAmount),
    feeCurrency: shipping.dig(:feeCurrency),
  }
end