Sha256: 6bdaa67f56609b303651e3b538de9f6a0dfb47f87f7f05b674c53dff1be9f089

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

module Shopper
  class CheckoutController < ShopperController
    include Shopper::CheckoutWizard

    before_action :fast_authenticate_customer!
    before_action :check_empty_cart
    before_action :check_accesability, except: :complete

    before_action :set_progress_presenter

    rescue_from Wicked::Wizard::InvalidStepError do |_|
      redirect_to cart_path, alert: t('checkout.failure.invalid_step')
    end

    rescue_from Shopper::CheckoutWizard::EmptyCardError do |_|
      redirect_to cart_path, alert: t('checkout.failure.cart_empty')
    end

    rescue_from Shopper::CheckoutWizard::CantAccessError do |_|
      redirect_to checkout_path(minimal_accessible_step),
                  flash: { error: t('checkout.failure.must_fill_previous') }
    end

    def show
      present step_presenter.new(current_order)
      render_wizard
    end

    def update
      Shopper::CheckoutPage::ProceedCheckout.call(current_order, params, step) do
        on(:invalid) do |*attrs|
          present step_presenter.new(*attrs)
          render_wizard
        end
        on(:ok) { redirect_to_next_step }
      end
    end

    def complete
      Shopper::CheckoutPage::PlaceOrder.call(current_order, params) do
        on(:invalid) { redirect_to cart_path, alert: t('checkout.failure.invalid_step') }
        on(:ok) do |old_order|
          present step_presenter.new(old_order)
          render_wizard
        end
      end
    end

    private

    def set_progress_presenter
      select_up_to_step = if step == :complete
                            :complete
                          else
                            minimal_accessible_step
                          end
      present Shopper::CheckoutPage::ProgressPresenter.new(
        steps,
        step,
        select_up_to_step
      ), for: :progress
    end

    def step_presenter
      "Shopper::CheckoutPage::#{step.capitalize}StepPresenter".constantize
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoppper-0.1.0 app/controllers/shopper/checkout_controller.rb