Class: Spree::Carts::Create

Inherits:
Object
  • Object
show all
Includes:
ServiceModule::Base
Defined in:
app/services/spree/carts/create.rb

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(params: {}) ⇒ Object



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
# File 'app/services/spree/carts/create.rb', line 6

def call(params: {})
  @params = params.to_h.deep_symbolize_keys

  store = @params.delete(:store)
  return failure(:store_is_required) if store.nil?

  cart = store.carts.create!(
    user: @params.delete(:user),
    market: @params.delete(:market) || Spree::Current.market,
    currency: @params.delete(:currency) || store.default_currency,
    locale: @params.delete(:locale) || Spree::Current.locale
  )

  # Delegate all attribute/address/item processing to Carts::Update
  if @params.present?
    result = Spree::Carts::Update.call(cart: cart, params: @params)
    return result if result.failure?
  end

  success(cart.reload)
rescue ActiveRecord::RecordNotFound
  raise
rescue StandardError => e
  failure(nil, e.message)
end