92da0010f0175533c7cbe3474d95bcfc

I came across this monster method in a controller and it looks like it needs a diet.

def create
  @partner = Partner.new(params[:partner])
  if(params[:partner_request_id])
    @partner_request = PartnerRequest.find(params[:partner_request_id])
  end
  unless (params['other_messaging_type'])
    @partner.other_messaging_type = nil 
  end

  @admin_contact_email = Email.find_or_create_by_address(
    params[:admin_contact_email])
  if(@admin_contact_email.account)
    @account = @admin_contact_email.account
    @partner.account = @account
  else
    @account = @partner.build_account
    @account.password = Account.generate_random_password(8)
  end

  if (@account.address)
    @address = Contact.new
    @address.build_address
    @address.attributes = params[:address]
    @account.contacts << @address
  else
    @address = @account.build_address(params[:address]) # general contact
  end
  @address.person_optional = true
  @address.account = @account

  @partner.general_contact = @address

  @admin_contact = @partner.build_admin_contact(params[:admin_contact])
  @admin_contact.address = @address.address
  @admin_contact.account = @account
  @admin_contact_email.account = @account
  @admin_contact.emails << @admin_contact_email
  @account.contacts << @admin_contact

  if @partner.tech_contact_same_as_admin?
    @partner.tech_contact = @partner.admin_contact
  else
    @tech_contact = @partner.build_tech_contact(params[:tech_contact])
    @tech_contact.address = @address.address
    @tech_contact.account = @account
    @tech_contact_email = Email.find_or_create_by_address(
      params[:tech_contact_email])
    @tech_contact.emails << @tech_contact_email
    @tech_contact_email.require_account = false
    @account.contacts << @tech_contact
  end

  @website = @partner.build_website(params[:website])

  if ((params[:commit] == 'Create Partner') && @partner.save)
    flash[:success] = 'Partner Created'
    if (@partner_request)
      @partner_request.set_accepted
      @partner_request.partner = @partner
      @partner_request.save_without_validation
    end
    redirect_to edit_images_partner_url(:id => @partner.id)
  else
    if @partner.valid?
      @confirmation = true if (params[:commit] == 'Review Partner')
    end
    setup_form
    render :action => 'new'
  end
end

Refactorings

No refactoring yet !

Your refactoring





Format Copy from initial code

or Cancel