internetee/registry

View on GitHub
app/controllers/admin/disputes_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
97%
# frozen_string_literal: true

module Admin
  class DisputesController < BaseController
    load_and_authorize_resource
    before_action :set_dispute, only: %i[show edit update delete]

    # GET /admin/disputes
    def index
      params[:q] ||= {}
      @disputes = sortable_dispute_query_for(Dispute.active.all, params[:q])
      @closed_disputes = sortable_dispute_query_for(Dispute.closed.all, params[:q], closed: true)

      render_by_format('admin/disputes/index', 'disputes')
    end

    # GET /admin/disputes/1
    def show; end

    # GET /admin/disputes/new
    def new
      @dispute = Dispute.new
    end

    # GET /admin/disputes/1/edit
    def edit; end

    # POST /admin/disputes
    def create
      @dispute = Dispute.new(dispute_params)
      if @dispute.save
        notice = 'Dispute was successfully created'
        notice += @dispute.domain ? '.' : ' for domain that is not registered.'

        redirect_to admin_disputes_url, notice: notice
      else
        render :new
      end
    end

    # PATCH/PUT /admin/disputes/1
    def update
      if @dispute.update(dispute_params.except(:domain_name, :starts_at))
        redirect_to admin_disputes_url, notice: 'Dispute was successfully updated.'
      else
        render :edit
      end
    end

    # DELETE /admin/disputes/1
    def delete
      @dispute.close(initiator: 'Admin')
      redirect_to admin_disputes_url, notice: 'Dispute was successfully closed.'
    end

    private

    def sortable_dispute_query_for(disputes, query, closed: false)
      @q = disputes.order(:domain_name).ransack(query)
      @result = @q.result
      disputes = @result.page(closed ? params[:closed_page] : params[:page])
      return disputes.per(params[:results_per_page]) if params[:results_per_page].present?

      disputes
    end

    # Use callbacks to share common setup or constraints between actions.
    def set_dispute
      @dispute = Dispute.find(params[:id])
    end

    # Only allow a trusted parameter "white list" through.
    def dispute_params
      params.require(:dispute)
            .permit(:domain_name, :password, :starts_at, :comment)
            .with_defaults(starts_at: Time.zone.today)
    end
  end
end