SpeciesFileGroup/taxonworks

View on GitHub
lib/export/coldp/files/name_relation.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# nameID
# relatedNameID
# type
# referenceID
# remarks
#
module Export::Coldp::Files::NameRelation

  # Documentation: http://api.checklistbank.org/vocab/nomreltype

  # These concepts do not really fit with the CoL Name/NameRelation data model or are represented in a different way
  # TODO: SupressedSynony misspelled in TW models, which probably should be SupressedSynonym
  BLOCKED = %w[TaxonNameRelationship::CurrentCombination
               TaxonNameRelationship::Combination
               TaxonNameRelationship::Combination::Family
               TaxonNameRelationship::Combination::Genus
               TaxonNameRelationship::Combination::Subgenus
               TaxonNameRelationship::Combination::Species
               TaxonNameRelationship::Combination::Subspecies
               TaxonNameRelationship::Combination::Variety
               TaxonNameRelationship::Combination::Subvariety
               TaxonNameRelationship::Combination::Series
               TaxonNameRelationship::Combination::Subseries
               TaxonNameRelationship::Combination::Section
               TaxonNameRelationship::Combination::Subsection
               TaxonNameRelationship::Combination::Form
               TaxonNameRelationship::Combination::Subform
               TaxonNameRelationship::OriginalCombination
               TaxonNameRelationship::OriginalCombination::Original
               TaxonNameRelationship::OriginalCombination::OriginalGenus
               TaxonNameRelationship::OriginalCombination::OriginalSubgenus
               TaxonNameRelationship::OriginalCombination::OriginalSpecies
               TaxonNameRelationship::OriginalCombination::OriginalSubspecies
               TaxonNameRelationship::OriginalCombination::OriginalVariety
               TaxonNameRelationship::OriginalCombination::OriginalSubvariety
               TaxonNameRelationship::OriginalCombination::OriginalForm
               TaxonNameRelationship::OriginalCombination::OriginalSubform
               TaxonNameRelationship::SourceClassifiedAs
               TaxonNameRelationship::Iczn::Invalidating
               TaxonNameRelationship::Iczn::Invalidating::Suppression::Total
               TaxonNameRelationship::Iczn::Invalidating::Misapplication
               TaxonNameRelationship::Iczn::Invalidating::Synonym
               TaxonNameRelationship::Iczn::Invalidating::Synonym::Subjective
               TaxonNameRelationship::Iczn::Invalidating::Usage
               TaxonNameRelationship::Iczn::PotentiallyValidating
               TaxonNameRelationship::Iczn::Validating
               TaxonNameRelationship::Iczn::Validating::UncertainPlacement
               TaxonNameRelationship::Icnp::Accepting
               TaxonNameRelationship::Icnp::Unaccepting
               TaxonNameRelationship::Icnp::Unaccepting::Synonym
               TaxonNameRelationship::Icnp::Unaccepting::SupressedSynonym
               TaxonNameRelationship::Icnp::Unaccepting::Usage
               TaxonNameRelationship::Icn::Accepting
               TaxonNameRelationship::Icn::Unaccepting
               TaxonNameRelationship::Icn::Unaccepting::Synonym
               TaxonNameRelationship::Icn::Unaccepting::Synonym::Heterotypic
               TaxonNameRelationship::Icn::Unaccepting::Usage
               TaxonNameRelationship::Icvcn::Accepting
               TaxonNameRelationship::Icvcn::Accepting::UncertainPlacement
               TaxonNameRelationship::Icvcn::Unaccepting
               TaxonNameRelationship::Hybrid].freeze

  def self.type(tnr)
    if tnr.type.include? "TaxonNameRelationship::Typification"  # There are no nomen_uri's for Typification
      type = "type"
    else
      type = tnr.type.constantize.nomen_uri
    end
    type
  end


  def self.generate(otus, project_members, reference_csv = nil )
    ::CSV.generate(col_sep: "\t") do |csv|

      csv << %w{
        nameID
        relatedNameID
        type
        referenceID
        modified
        modifiedBy
        remarks
      }

      otus.each do |o|
        o.taxon_name.taxon_name_relationships.each do |tnr|

          # Combinations and OriginalCombinations are already handled in the Name module
          unless BLOCKED.include? tnr.type

            sources = tnr.sources.load
            reference_ids = sources.collect{|a| a.id}
            reference_id = reference_ids.first

            csv << [
              tnr.subject_taxon_name_id,                                       # nameID
              tnr.object_taxon_name_id,                                        # relatedNameID
              type(tnr),                                                       # type
              reference_id,                                                    # referenceID
              Export::Coldp.modified(tnr[:updated_at]),                         # modified
              Export::Coldp.modified_by(tnr[:updated_by_id], project_members), # modified_by
              nil,                                                             # remarks
            ]

            Export::Coldp::Files::Reference.add_reference_rows(sources, reference_csv, project_members) if reference_csv
          end
        end
      end
    end
  end
end