Class: ObservationMatrixRowItem::Dynamic::TaxonName

Inherits:
ObservationMatrixRowItem::Dynamic show all
Defined in:
app/models/observation_matrix_row_item/dynamic/taxon_name.rb

Overview

The intent is to capture all OTUs, CollectionObjects (via Determinations), and Extracts (via taxon_name_id) linked through a TaxonName Hierarchy

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ObservationMatrixRowItem::Dynamic

#is_dynamic?

Class Method Details

.cleanup(taxon_name_id, otu_id) ⇒ Object



28
29
30
31
32
33
# File 'app/models/observation_matrix_row_item/dynamic/taxon_name.rb', line 28

def self.cleanup(taxon_name_id, otu_id)
  to_check = ::TaxonName.find(observation_object_id).self_and_ancestors.pluck(:id)
  self.where(taxon_name_id: to_check).each do |mri|
    mri.update_matrix_rows
  end
end

Instance Method Details

#observation_objectsObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/models/observation_matrix_row_item/dynamic/taxon_name.rb', line 7

def observation_objects
  a = ::Otu.joins(:taxon_name).where(taxon_name: observation_object.self_and_descendants)
  b = ::Queries::CollectionObject::Filter.new(
    taxon_name_id: observation_object_id,
    descendants: true,
    project_id:).all
  c = ::Queries::Extract::Filter.new(
    taxon_name_id: observation_object_id,
    descendants: true,
    project_id:).all

  if a.count > 10000 or b.count > 10000 or c.count > 10000
    return []
  end

  a.to_a + b.to_a + c.to_a
end

#taxon_name_is_uniqueObject (private)



37
38
39
40
41
42
43
# File 'app/models/observation_matrix_row_item/dynamic/taxon_name.rb', line 37

def taxon_name_is_unique
  errors.add(:observation_object, 'is already taken') if ObservationMatrixRowItem::Dynamic::TaxonName.where.not(id:)
    .where(
      observation_object:,
      observation_matrix_id:,
    ).any?
end

#value_of_observation_object_typeObject (private)



45
46
47
# File 'app/models/observation_matrix_row_item/dynamic/taxon_name.rb', line 45

def value_of_observation_object_type
  errors.add(:observation_object) if observation_object_type != 'TaxonName'
end