NerdDiffer/job_tracker

View on GitHub
app/controllers/recruitments_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class RecruitmentsController < ApplicationController
  attr_reader :recruitment, :company

  before_action :logged_in_user
  before_action :load_company
  before_action :set_recruitment, only: :destroy

  def new
    @recruitment = Recruitment.new
  end

  def create
    opts = build_recruitment_params
    @recruitment = Recruitment.new(opts)

    if recruitment.save
      flash[:success] = 'Client, Agency relationship successfully added'
      redirect_to company
    else
      render :new
    end
  end

  def destroy
    recruitment.destroy
    flash[:info] = 'Relationship removed'
    redirect_to company
  end

  private

  def load_company
    company_id = params[:company_id]
    @company = Company.find(company_id)
  end

  def set_recruitment
    id = params[:id]
    @recruitment = Recruitment.find(id)
  end

  def recruitment_params
    params.require(:recruitment).permit(whitelisted_attr)
  end

  def whitelisted_attr
    [:agency_id, :client_id]
  end

  def build_recruitment_params
    if company.agency?
      agency_id = company.id
      client_id = set_client_id
    else
      client_id = company.id
      agency_id = set_agency_id
    end

    recruitment_params_with_associated_ids(agency_id, client_id)
  end

  def set_client_id
    client_name = params[:recruitment][:client_name]
    Company.find_by_name(client_name).id
  end

  def set_agency_id
    agency_name = params[:recruitment][:agency_name]
    Company.find_by_name(agency_name).id
  end

  def recruitment_params_with_associated_ids(agency_id, client_id)
    recruit_id = current_user.id
    recruitment_params.merge(agency_id: agency_id,
                             client_id: client_id,
                             recruit_id: recruit_id)
  end
end