class AddressesController < ApplicationController include IsSneaky before_action :set_address, only: [ :show, :edit, :update, :destroy ] before_action :hide_some_data_away, only: %i[program_create_address] def index @addresses = current_identity.addresses end def show end def new build_address end def create @address = current_identity.addresses.new(address_params) if @address.save if current_identity.primary_address.nil? current_identity.update(primary_address: @address) end if params[:address][:from_program] == "true" redirect_to safe_redirect_url("address_return_to") || addresses_path, notice: "address created successfully!", allow_other_host: true else redirect_to addresses_path, notice: "address created successfully!" end else render params[:address][:from_program] == "true" ? :program_create_address : :new end end def program_create_address build_address end def edit end def update if params[:make_primary] == "true" current_identity.update(primary_address: @address) redirect_to addresses_path, notice: "Primary address updated!" elsif @address.update(address_params) redirect_to addresses_path, notice: "address updated successfully!" else render :edit end end def destroy if current_identity.primary_address == @address if Rails.env.production? flash[:alert] = "can't delete your primary address..." redirect_to addresses_path return else current_identity.update(primary_address: nil) end end @address.destroy redirect_to addresses_path, notice: "address deleted successfully!" end private def build_address @address = current_identity.addresses.build( country: current_identity.country, first_name: current_identity.first_name, last_name: current_identity.last_name, ) end def set_address @address = current_identity.addresses.find(params[:id]) end def address_params params.require(:address).permit(:first_name, :last_name, :line_1, :line_2, :city, :state, :postal_code, :country) end end