NerdDiffer/job_tracker

View on GitHub
app/controllers/job_applications/cover_letters_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
module JobApplications
  class CoverLettersController < ApplicationController
    include SortingHelper
    include ScaffoldedActions
    include OwnResources

    attr_reader :cover_letter

    helper_method :sort_column, :sort_direction

    before_action :logged_in_user
    before_action :set_cover_letter, only: [:show, :edit, :update, :destroy]
    before_action :check_user,       only: [:show, :edit, :update, :destroy]

    # GET /cover_letters
    # GET /cover_letters.json
    def index
      @cover_letters = collection_belonging_to_user
      @cover_letters = @cover_letters.sorted
      @cover_letters = custom_index_sort if params[:sort]
    end

    # GET /cover_letters/1
    # GET /cover_letters/1.json
    def show
    end

    # GET /cover_letters/new
    def new
      job_application_id = params[:job_application_id]

      opts = {
        job_application_id: job_application_id,
        sent_date: Time.now.utc
      }

      @cover_letter = CoverLetter.new(opts)
    end

    # GET /cover_letters/1/edit
    def edit
    end

    # POST /cover_letters
    # POST /cover_letters.json
    def create
      @cover_letter = CoverLetter.new(cover_letter_params_with_associated_ids)

      respond_to do |format|
        if cover_letter.save
          successful_creation(format, cover_letter.job_application)
        else
          failed_creation(format, cover_letter)
        end
      end
    end

    # PATCH/PUT /cover_letters/1
    # PATCH/PUT /cover_letters/1.json
    def update
      respond_to do |format|
        if cover_letter.update(cover_letter_params)
          successful_update(format, cover_letter.job_application)
        else
          failed_update(format, cover_letter)
        end
      end
    end

    # DELETE /cover_letters/1
    # DELETE /cover_letters/1.json
    def destroy
      @cover_letter.destroy
      respond_to do |format|
        destruction(format, cover_letter.job_application)
      end
    end

    private

    def set_cover_letter
      id = params[:job_application_id]
      @cover_letter = CoverLetter.find_by_job_application_id(id)
    end

    def whitelisted_attr
      [:job_application_id, :sent_date, :content, :job_application_title]
    end

    def cover_letter_params
      params.require(:job_applications_cover_letter).permit(whitelisted_attr)
    end

    def cover_letter_params_with_associated_ids
      job_application_id = params[:job_application_id]
      cover_letter_params.merge(job_application_id: job_application_id)
    end

    def model
      CoverLetter
    end

    def collection
      @cover_letters
    end

    def member
      @cover_letter
    end

    def default_sorting_column
      'sent_date'
    end
  end
end