Class: Spree::Addresses::Create

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

Direct Known Subclasses

Spree::Account::Addresses::Create

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Attribute Details

#countryObject

Returns the value of attribute country.



7
8
9
# File 'app/services/spree/addresses/create.rb', line 7

def country
  @country
end

Instance Method Details

#call(address_params: {}, user: nil, **opts) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/services/spree/addresses/create.rb', line 9

def call(address_params: {}, user: nil, **opts)
  order = opts[:order]
  default_billing = opts.fetch(:default_billing, false)
  default_shipping = opts.fetch(:default_shipping, false)

  address_params = fill_country_and_state_ids(address_params)

  address = Spree::Address.new(address_params)
  address.user = user if user.present?

  ApplicationRecord.transaction do
    if address.save
      if user.present?
        if user.addresses.pluck(:id) == [address.id]
          user.update(bill_address_id: address.id, ship_address_id: address.id)
        else
          assign_to_user_as_default(
            user: user,
            address_id: address.id,
            default_billing: default_billing,
            default_shipping: default_shipping
          )
        end
      end

      assign_to_order(order: order, address_id: address.id) if order.present?
      success(address)
    else
      failure(address)
    end
  end
end