Sha256: f34c3b0802ae265c3f587e71de1ce4ec31eba4aa69efb5411d3ddc07adb5104d

Contents?: true

Size: 925 Bytes

Versions: 5

Compression:

Stored size: 925 Bytes

Contents

module Spree
  module Addresses
    class Update
      prepend Spree::ServiceModule::Base
      include Spree::Addresses::Helper

      attr_accessor :country

      def call(address:, address_params:)
        address_params[:country_id] ||= address.country_id
        address_params = fill_country_and_state_ids(address_params)
        address_params[:user_id] = address.user_id if address.user_id.present?

        if address&.editable?
          address.update(address_params) ? success(address) : failure(address)
        else
          if new_address(address_params).valid?
            address.destroy
            success(new_address)
          else
            failure(new_address)
          end
        end
      end

      private

      def new_address(address_params = {})
        @new_address ||= ::Spree::Address.find_or_create_by(address_params.except(:id, :updated_at, :created_at))
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spree_core-4.10.1 app/services/spree/addresses/update.rb
spree_core-4.10.0 app/services/spree/addresses/update.rb
spree_core-4.9.0 app/services/spree/addresses/update.rb
spree_core-4.8.3 app/services/spree/addresses/update.rb
spree_core-4.8.2 app/services/spree/addresses/update.rb