smc/grandham

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

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class Admin::EditsController < AdminController
  load_and_authorize_resource :edit

  before_action :find_edit, except: [:index]

  def index
    @edits = current_language.edits.not_reviewed
  end

  def approve
    object = @edit.editable

    object.update_attribute(@edit.field, @edit.new_value)
    @edit.update state: "approved", reviewed_by_user_id: current_user.id

    path = if current_language.edits.not_reviewed.empty?
             language_admin_dashboard_index_path(current_language)
           else
             language_admin_edits_path(current_language)
           end

    redirect_to path
  end

  def discard
    @edit.update state: "discarded", reviewed_by_user_id: current_user.id

    path = if current_language.edits.not_reviewed.empty?
             language_admin_dashboard_index_path(current_language)
           else
             language_admin_edits_path(current_language)
           end

    redirect_to path
  end

  def replace
    old_object = @edit.editable
    old_object_class = old_object.class
    objects_collection = @edit.editable_type.downcase.pluralize

    @edit.book.send(objects_collection).delete(old_object)
    @edit.book.send(objects_collection) << old_object_class.where(name: @edit.new_value, language_id: @edit.book.language.id).first_or_create!

    @edit.update state: "replaced", reviewed_by_user_id: current_user.id

    redirect_to language_admin_edits_path(current_language)
  end

  private

  def find_edit
    @edit = current_language.edits.find(params[:id])
  end
end