SpeciesFileGroup/taxonworks

View on GitHub
app/models/taxon_name_relationship/iczn/invalidating/usage/misspelling.rb

Summary

Maintainability
A
0 mins
Test Coverage
class TaxonNameRelationship::Iczn::Invalidating::Usage::Misspelling < TaxonNameRelationship::Iczn::Invalidating::Usage

  NOMEN_URI='http://purl.obolibrary.org/obo/NOMEN_0000275'.freeze

  soft_validate(
    :sv_no_citation,
    set: :no_citation,
    fix: :sv_fix_no_citation,
    name: 'Missing citation',
    description: 'Missing citation' )


  def self.disjoint_taxon_name_relationships
    self.parent.disjoint_taxon_name_relationships +
      self.collect_descendants_to_s(
        TaxonNameRelationship::Iczn::Invalidating::Usage::FamilyGroupNameForm,
        TaxonNameRelationship::Iczn::Invalidating::Usage::FamilyGroupNameOriginalForm,
        TaxonNameRelationship::Iczn::Invalidating::Usage::IncorrectOriginalSpelling)
  end

  def object_status
    'correct spelling'
  end

  def subject_status
    'misspelling'
  end

  def self.gbif_status_of_subject
    'nullum'
  end

  def self.assignment_method
    # bus.set_as_misspelling_of(aus)
    :iczn_set_as_misspelling_of
  end

  # as.
  def self.inverse_assignment_method
    # aus.misspelling = bus
    :iczn_misspelling
  end

  def self.assignable
    true
  end

  protected

  def sv_no_citation
    if self.citations.empty?
      soft_validations.add(:base, "Citation for misspelling is not provided", success_message: 'Citation is added', failure_message:  'Failed to add a citation')
    end
  end

  def sv_fix_no_citation
    c  = self.subject_taxon_name.origin_citation
    return false if c.nil?
    self.citations.create(source_id: c.source_id, pages: c.pages, is_original: true)
  end

  def sv_specific_relationship
    s = self.subject_taxon_name
    o = self.object_taxon_name
    if s.name == o.name
      soft_validations.add(:base, "Misspelled and correctly spelled names are identical: '#{s.cached_html}'")
    end
  end
end