Sha256: 206ae4fb36d10a9cffd436f51087cc667cbd694673b8ca77603031c66777e3d1

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

module SolidusNexio
  module NexioData
    extend self

    def one_time_token(order:, user:)
      acc = { customer: {} }

      if order
        add_order_data(acc, order)
        add_customer_data(acc, order.user || user)
      else
        acc[:total] = 0
        add_customer_data(acc, user)
      end

      acc.delete(:customer) if acc[:customer].blank?

      acc
    end

    private

    def add_order_data(acc, order)
      acc[:currency] = order.currency
      acc[:customer].merge!(address_to_name(order.billing_address)).merge!(email: order.email)
      acc[:address] = address_data(order.shipping_address)
      acc[:billing_address] = address_data(order.billing_address)
      acc[:order] = { number: order.number }
      acc[:order][:date] = order.completed_at.to_date if order.completed_at
      acc
    end

    def add_customer_data(acc, user)
      return acc unless user

      acc[:customer][:email] = user.email if user.respond_to?(:email)
      acc[:customer][:first_name] = user.first_name if user.respond_to?(:first_name)
      acc[:customer][:last_name] = user.last_name if user.respond_to?(:last_name)
      acc
    end

    def address_data(address)
      {
        address1: address.address1,
        address2: address.address2,
        city: address.city,
        country: address.country&.iso.to_s,
        phone: address.phone,
        zip: address.zipcode,
        state: address.state_name
      }
    end

    def line_item_data(line_item)
      {
        id: line_item.id,
        description: line_item.product.name,
        price: line_item.price,
        quantity: line_item.quantity
      }
    end

    if SolidusSupport.combined_first_and_last_name_in_address?
      def address_to_name(address)
        parts = address.name.split(' ')
        { first_name: parts[0], last_name: parts[1..-1].join(' ') }
      end
    else
      def address_to_name(address)
        { first_name: address.firstname, last_name: address.lastname }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
solidus_nexio-0.1.0 app/services/solidus_nexio/nexio_data.rb