Class: Spree::CheckoutController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/spree/checkout_controller.rb

Overview

Handles checkout logic. This is somewhat contrary to standard REST convention since there is not actually a Checkout object. There’s enough distinct logic specific to checkout which has nothing to do with updating an order that this approach is waranted.

Much of this file, especially the update action is overriden in the promo gem. This is to allow for the promo behavior but also allow the promo gem to be removed if the functionality is not needed.

Instance Attribute Summary

Attributes included from Spree::Core::ControllerHelpers

#title

Instance Method Summary collapse

Methods included from Spree::Core::ControllerHelpers

#associate_user, included, #try_spree_current_user

Instance Method Details

#updateObject

Updates the order and advances to the next state (when possible.) Overriden by the promo gem if it exists.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/controllers/spree/checkout_controller.rb', line 22

def update
  if @order.update_attributes(object_params)
    fire_event('spree.checkout.update')

    if @order.next
      state_callback(:after)
    else
      flash[:error] = t(:payment_processing_failed)
      respond_with(@order, :location => checkout_state_path(@order.state))
      return
    end

    if @order.state == "complete" || @order.completed?
      flash.notice = t(:order_processed_successfully)
      flash[:commerce_tracking] = "nothing special"
      respond_with(@order, :location => completion_route)
    else
      respond_with(@order, :location => checkout_state_path(@order.state))
    end
  else
    respond_with(@order) { |format| format.html { render :edit } }
  end
end