Method: EffectiveCartsHelper#current_cart

Defined in:
app/helpers/effective_carts_helper.rb

#current_cart(for_user = nil) ⇒ Object

TODO: Consider unique



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/helpers/effective_carts_helper.rb', line 3

def current_cart(for_user = nil)
  @cart ||= (
    user = for_user || (current_user rescue nil) # rescue protects me against Devise not being installed

    if user.present?
      user_cart = Effective::Cart.where(user: user).first_or_create

      # Merge session cart into user cart.
      if session[:cart].present?
        session_cart = Effective::Cart.where(user: nil).where(id: session[:cart]).first

        if session_cart
          session_cart.cart_items.each { |i| user_cart.add(i.purchasable, quantity: i.quantity, unique: i.unique) }
          session_cart.destroy
        end

        session[:cart] = nil
      end

      user_cart
    elsif session[:cart].present?
      Effective::Cart.where(user_id: nil).where(id: session[:cart]).first_or_create
    else
      cart = Effective::Cart.create!
      session[:cart] = cart.id
      cart
    end
  )
end