SpeciesFileGroup/taxonworks

View on GitHub
app/models/biocuration_classification.rb

Summary

Maintainability
A
0 mins
Test Coverage
# A BiocurationClassification classifies a CollectionObject within
# a collection into some biologically-related category.  See BiocurationClass.
#
# @!attribute biocuration_class_id
#   @return [Integer]
#   the biocuration class ID
#
# @!attribute biocuration_classification_object_id
#   @return [Integer]
#   id of the object the classification is for
#
# @!attribute biocuration_classification_object_type
#   @return [String]
#      baseclass model name the classficiation is for
#
# @!attribute position
#   @return [Integer]
#     used with acts_as_list
#
# @!attribute project_id
#   @return [Integer]
#   the project ID
#
class BiocurationClassification < ApplicationRecord
  include Housekeeping
  include Shared::IsData

  acts_as_list scope: [:biocuration_classification_object_id, :biocuration_classification_object_type, :project_id]

  belongs_to :biocuration_class, inverse_of: :biocuration_classifications
  belongs_to :biocuration_classification_object, polymorphic: true, inverse_of: :biocuration_classifications

  validates_presence_of :biocuration_class, :biocuration_classification_object
  validates_uniqueness_of :biocuration_class, scope: [:biocuration_classification_object]

  # Janky, but here for now
  after_save :update_dwc_occurrence
  after_destroy :revert_dwc_occurrence

  protected

  def update_dwc_occurrence
    if biocuration_class.uri == DWC_FOSSIL_URI
      biocuration_classification_object.dwc_occurrence&.update_attribute(:basisOfRecord, 'FossilSpecimen')
    end
  end

  def revert_dwc_occurrence
    if biocuration_class.uri == DWC_FOSSIL_URI
      biocuration_classification_object.dwc_occurrence&.update_attribute(:basisOfRecord, 'PreservedSpecimen')
    end
  end

end