Class: Spree::Addresses::Update
- Inherits:
-
Object
- Object
- Spree::Addresses::Update
- Includes:
- Helper, ServiceModule::Base
- Defined in:
- app/services/spree/addresses/update.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#country ⇒ Object
Returns the value of attribute country.
Instance Method Summary collapse
Methods included from ServiceModule::Base
Instance Attribute Details
#country ⇒ Object
Returns the value of attribute country.
7 8 9 |
# File 'app/services/spree/addresses/update.rb', line 7 def country @country end |
Instance Method Details
#call(address:, address_params:, **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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/services/spree/addresses/update.rb', line 9 def call(address:, address_params:, **opts) order = opts[:order] default_billing = opts.fetch(:default_billing, false) default_shipping = opts.fetch(:default_shipping, false) address_changes_except = opts.fetch(:address_changes_except, []) create_new_address_on_update = opts.fetch(:create_new_address_on_update, false) prepare_address_params!(address, address_params) address.assign_attributes(address_params) address_changed = address.changes.except(*address_changes_except).any? if !address_changed && defaults_changed?(address, default_billing, default_shipping) assign_to_user_as_default( user: address.user, address_id: address.id, default_billing: default_billing, default_shipping: default_shipping ) end return success(address) unless address_changed if address.editable? && !create_new_address_on_update if address.update(address_params) if address.user.present? assign_to_user_as_default( user: address.user, address_id: address.id, default_billing: default_billing, default_shipping: default_shipping ) end order.update(state: 'address') if order.present? success(address) else failure(address) end elsif new_address(address_params).valid? address.destroy unless create_new_address_on_update if new_address.user.present? default_billing = (!create_new_address_on_update && address.user_default_billing?) || default_billing default_shipping = (!create_new_address_on_update && address.user_default_shipping?) || default_shipping assign_to_user_as_default( user: new_address.user, address_id: new_address.id, default_billing: default_billing, default_shipping: default_shipping ) end if order.present? order.ship_address = new_address if !create_new_address_on_update && order.ship_address_id == address.id order.bill_address = new_address if !create_new_address_on_update && order.bill_address_id == address.id order.state = 'address' order.save end success(new_address) else failure(new_address) end end |