Sha256: f22353b584400960ced7477acd956b7d5a9c24f5bbc5973faf61414232728899

Contents?: true

Size: 1.27 KB

Versions: 3

Compression:

Stored size: 1.27 KB

Contents

module ShoppingCart
  class CheckoutUpdater < Rectify::Command
    STEPS = {
      address: :update_address,
      delivery: :update_delivery,
      payment: :update_credit_card,
      confirm: :confirm_order
    }.freeze

    def initialize(step:, params:, order:, user:)
      @step = step
      @params = params
      @order = order
      @user = user
    end

    def call
      send(STEPS[@step]) if STEPS[@step]
    end

    private

    def update_address
      billing = CheckoutAddresser.new(params: @params, type: :billing).call
      shipping = CheckoutAddresser.new(params: @params, type: :shipping).call
      return broadcast(:only_billing_address, billing) if @params[:use_billing]['true'] == '1'

      return broadcast(:both_addresses, billing, shipping) if billing.save

      shipping.save
      broadcast(:invalid_addresses, billing, shipping)
    end

    def update_delivery
      @order.delivery_id = @params[:delivery_id] if @params[:delivery_id]
      broadcast(:delivery_ok, @order)
    end

    def update_credit_card
      credit_card = CheckoutPayment.new(@params).call
      broadcast(:payment_ok, credit_card)
    end

    def confirm_order
      placed_order = ConfirmOrder.new(order: @order, user: @user).call
      broadcast(:confirm_ok, placed_order)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
loker-shopping-cart-0.1.3 app/services/shopping_cart/checkout_updater.rb
loker-shopping-cart-0.1.2 app/services/shopping_cart/checkout_updater.rb
loker-shopping-cart-0.1.1 app/services/shopping_cart/checkout_updater.rb