Class: TaxonNameRelationship::Iczn::Invalidating::Synonym::Objective

Inherits:
TaxonNameRelationship::Iczn::Invalidating::Synonym show all
Defined in:
app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb

Defined Under Namespace

Classes: ReplacedHomonym, SynonymicHomonym, UnjustifiedEmendation, UnnecessaryReplacementName

Constant Summary collapse

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

Constants included from SoftValidation

SoftValidation::ANCESTORS_WITH_SOFT_VALIDATIONS

Instance Attribute Summary

Attributes inherited from TaxonNameRelationship

#no_cached, #object_taxon_name_id, #project_id, #subject_taxon_name_id, #type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from TaxonNameRelationship::Iczn::Invalidating::Synonym

disjoint_object_classes, #object_status_connector_to_subject, #subject_status_connector_to_object, #sv_fix_not_specific_relationship, #sv_synonym_relationship

Methods inherited from TaxonNameRelationship::Iczn::Invalidating

assignable, disjoint_object_classes, disjoint_subject_classes, gbif_status_of_subject, nomenclatural_priority, #object_status_connector_to_subject, #similar_homonym_string, #subject_properties, #subject_status_connector_to_object, #sv_synonym_relationship

Methods inherited from TaxonNameRelationship::Iczn

disjoint_object_classes, disjoint_subject_classes, #sv_validate_priority, valid_object_ranks, valid_subject_ranks

Methods inherited from TaxonNameRelationship

assignable, collect_descendants_and_itself_to_s, collect_descendants_to_s, collect_to_s, descendants, disjoint_object_classes, disjoint_subject_classes, gbif_status_of_object, gbif_status_of_subject, #is_combination?, #is_invalidating?, nomen_uri, nomenclatural_priority, #nomenclature_date, #object_properties, #object_status_connector_to_subject, #object_status_tag, parent, required_taxon_name_relationships, #set_cached_names_for_taxon_names, #subject_and_object_in_same_project, #subject_invalid_statuses, #subject_properties, #subject_status_connector_to_object, #subject_status_tag, #sv_coordinated_taxa, #sv_coordinated_taxa_object, #sv_fix_combination_relationship, #sv_fix_coordinated_object_taxa, #sv_fix_coordinated_subject_taxa, #sv_fix_not_specific_relationship, #sv_fix_subject_parent_update, #sv_specific_relationship, #sv_synonym_linked_to_valid_name, #sv_synonym_relationship, #sv_validate_disjoint_object, #sv_validate_disjoint_relationships, #sv_validate_disjoint_subject, #sv_validate_priority, #sv_validate_required_relationships, #sv_validate_seniority, #type_class, #type_class=, #type_name, valid_object_ranks, valid_subject_ranks, #validate_object_and_subject_both_protonyms, #validate_object_must_equal_subject_for_uncertain_placement, #validate_rank_group, #validate_subject_and_object_are_not_identical, #validate_subject_and_object_ranks, #validate_subject_and_object_share_code, #validate_type, #validate_uniqueness_of_typification_object

Methods included from SoftValidation

#clear_soft_validations, #fix_for, #fix_soft_validations, #soft_fixed?, #soft_valid?, #soft_validate, #soft_validated?, #soft_validations, #soft_validators

Methods included from Shared::IsData

#errors_excepting, #full_error_messages_excepting, #identical, #is_community?, #is_destroyable?, #is_editable?, #is_in_use?, #is_in_users_projects?, #metamorphosize, #similar

Methods included from Shared::Notes

#concatenated_notes_string, #reject_notes

Methods included from Shared::Citations

#cited?, #mark_citations_for_destruction, #nomenclature_date, #origin_citation_source_id, #reject_citations, #requires_citation?, #sources_by_topic_id

Methods included from Housekeeping

#has_polymorphic_relationship?

Methods inherited from ApplicationRecord

transaction_with_retry

Class Method Details

.assignment_methodObject



19
20
21
22
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 19

def self.assignment_method
  # bus.set_as_iczn_objective_synonym_of(aus)
  :iczn_set_as_objective_synonym_of
end

.disjoint_taxon_name_relationshipsObject



5
6
7
8
9
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 5

def self.disjoint_taxon_name_relationships
  self.parent.disjoint_taxon_name_relationships +
      self.collect_descendants_and_itself_to_s(TaxonNameRelationship::Iczn::Invalidating::Synonym::Suppression) +
      self.collect_to_s(TaxonNameRelationship::Iczn::Invalidating::Synonym)
end

.inverse_assignment_methodObject

as.



25
26
27
28
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 25

def self.inverse_assignment_method
  # aus.iczn_objective_synonym = bus
  :iczn_objective_synonym
end

Instance Method Details

#object_statusObject



11
12
13
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 11

def object_status
  'senior objective synonym'
end

#subject_statusObject



15
16
17
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 15

def subject_status
  'objective synonym'
end

#sv_fix_objective_synonym_relationshipObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 38

def sv_fix_objective_synonym_relationship
  fixed = false
  s = self.subject_taxon_name
  o = self.object_taxon_name
  if s.get_primary_type.empty?
    t2 = s
    t1 = o
  elsif o.get_primary_type.empty?
    t2 = o
    t1 = s
  else
    return false
  end
  types2 = t1.get_primary_type
  tnr2 = t1.type_taxon_name_relationship
  unless types2.empty?
    new_type_material = []
    types2.each do |t|
      new_type_material.push({type_type: t.type_type, protonym_id: t2.id, collection_object_id: t.collection_object_id, source: t.source})
    end
    t2.type_materials.build(new_type_material)
    fixed = true
  end

  unless tnr2.nil?
    tnr = t2.related_taxon_name_relationships.build(type: tnr2.type, subject_taxon_name_id: tnr2.subject_taxon_name_id)
    c2 = tnr2.citations.where(is_original: true).first
    tnr.citations.build(source_id: c2.source_id, pages: c2.pages) unless c2.nil?
    fixed = true
  end

  if fixed
    begin
      Protonym.transaction do
        t2.save
      end
      return true
    rescue
      return false
    end
  end
end

#sv_not_specific_relationshipObject



81
82
83
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 81

def sv_not_specific_relationship
  true
end

#sv_objective_synonym_relationshipObject



30
31
32
33
34
35
36
# File 'app/models/taxon_name_relationship/iczn/invalidating/synonym/objective.rb', line 30

def sv_objective_synonym_relationship
  s = self.subject_taxon_name
  o = self.object_taxon_name
  if (s.type_taxon_name != o.type_taxon_name ) || !s.has_same_primary_type(o)
    soft_validations.add(:type, "Objective synonyms #{s.cached_html} and #{o.cached_html} should have the same type")
  end
end