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