Sha256: f99621e1d9d3f6df70632a1e5ad70401964b3a296fdec987bf14ccd9b7629640

Contents?: true

Size: 968 Bytes

Versions: 3

Compression:

Stored size: 968 Bytes

Contents

module ShoppingCart
  class CheckoutStepper < Rectify::Command
    def initialize(steps:, step:, order:, user:, edit: false)
      @steps = steps
      @current_step = step
      @order = order
      @user = user
      @editable = edit
    end

    def call
      return broadcast(:empty_cart) if empty_cart?

      showable_step
      return broadcast(:invalid) if @current_step == @step

      broadcast(:ok, @step)
    end

    private

    def showable_step
      return @step = @current_step if @editable && completed?(@current_step)

      @steps.reverse_each do |step|
        @step = step unless completed?(step)
      end
    end

    def completed?(step)
      {
        login: @user,
        address: @order.billing_address,
        delivery: @order.delivery,
        payment: @order.credit_card,
        confirm: @order.in_queue?
      }[step]
    end

    def empty_cart?
      return true unless @order

      @order.order_items.empty?
    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_stepper.rb
loker-shopping-cart-0.1.2 app/services/shopping_cart/checkout_stepper.rb
loker-shopping-cart-0.1.1 app/services/shopping_cart/checkout_stepper.rb