class MarketTown::Checkout::AddressStep
Handles addresses by validating them and optionally storing them.
Dependencies:
- fulfilments#can_fulfil_address? - address_storage#store - fulfilments#propose_shipments - finish#address_step
Protected Instance Methods
ensure_delivery(state)
click to toggle source
Tries to ensure delivery can be made to address
@raise [CannotFulfilAddressError]
# File lib/market_town/checkout/steps/address_step.rb, line 49 def ensure_delivery(state) unless deps.fulfilments.can_fulfil_address?(state) raise CannotFulfilAddressError.new(state[:delivery_address]) end rescue MissingDependency add_dependency_missing_warning(state, :cannot_ensure_delivery) end
finish_address_step(state)
click to toggle source
Finishes address step
# File lib/market_town/checkout/steps/address_step.rb, line 76 def finish_address_step(state) deps.finish.address_step(state) end
propose_shipments(state)
click to toggle source
Tries to proposes shipments to delivery address ready to be confirmed at delivery step.
# File lib/market_town/checkout/steps/address_step.rb, line 68 def propose_shipments(state) deps.fulfilments.propose_shipments(state) rescue MissingDependency add_dependency_missing_warning(state, :cannot_propose_shipments) end
store_addresses(state)
click to toggle source
Tries to store addresses
# File lib/market_town/checkout/steps/address_step.rb, line 59 def store_addresses(state) deps.address_storage.store(state) rescue MissingDependency add_dependency_missing_warning(state, :cannot_store_address) end
use_billing_address_as_delivery_address(state)
click to toggle source
Copies billing address into delivery address if requested
# File lib/market_town/checkout/steps/address_step.rb, line 33 def use_billing_address_as_delivery_address(state) if state[:use_billing_address] == true state.merge(delivery_address: state[:billing_address]) end end
validate_billing_address(state)
click to toggle source
@raise [InvalidAddressError]
# File lib/market_town/checkout/steps/address_step.rb, line 27 def validate_billing_address(state) validate_address(:billing, state[:billing_address]) end
validate_delivery_address(state)
click to toggle source
@raise [InvalidAddressError]
# File lib/market_town/checkout/steps/address_step.rb, line 41 def validate_delivery_address(state) validate_address(:delivery, state[:delivery_address]) end
Private Instance Methods
validate_address(type, address)
click to toggle source
# File lib/market_town/checkout/steps/address_step.rb, line 82 def validate_address(type, address) Address.validate!(address) rescue Address::InvalidError => e raise InvalidAddressError.new({ type: type }.merge(e.data)) end