Module: Shared::IsIndexedBiologicalAssociation
- Extended by:
- ActiveSupport::Concern
- Included in:
- BiologicalAssociation
- Defined in:
- app/models/concerns/shared/is_indexed_biological_association.rb
Overview
Shared code for BiologicalAssociation to maintain the biological_association_index table.
Instance Method Summary collapse
- #biological_association_citation_year ⇒ Object private
-
#biological_association_citations ⇒ Object
private
TODO: Should reference DOIs, Identifiers, or identifiers in lieu of short citations.
- #biological_association_established_date ⇒ Object private
-
#biological_association_index_attributes ⇒ Object
!! This is expensive, it recomputes values for every field.
- #biological_association_object_label ⇒ Object private
- #biological_association_object_properties ⇒ Object private
- #biological_association_object_taxonomy_field(rank) ⇒ Object private
- #biological_association_object_uuid ⇒ Object private
-
#biological_association_remarks ⇒ Object
private
TODO: Generic helper.
- #biological_association_subject_label ⇒ Object private
- #biological_association_subject_properties ⇒ Object private
- #biological_association_subject_taxonomy_field(rank) ⇒ Object private
- #biological_association_subject_uuid ⇒ Object private
- #biological_relationship_uri ⇒ Object private
-
#get_biological_association_index ⇒ BiologicalAssociationIndex
Does not rebuild if already built.
-
#set_biological_association_index ⇒ BiologicalAssociationIndex
!! always touches the database.
Instance Method Details
#biological_association_citation_year ⇒ Object (private)
147 148 149 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 147 def biological_association_citation_year ApplicationController.helpers.short_sources_year_tag(sources) end |
#biological_association_citations ⇒ Object (private)
TODO: Should reference DOIs, Identifiers, or identifiers in lieu of short citations.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 158 def biological_association_citations # Could be collectors (ORCID or ...) # Could be citation providers t = [biological_association_subject_type , biological_association_object_type] case t when %w{Otu Otu} ApplicationController.helpers.short_sources_tag(sources) when %w{CollectionObject Otu}, %w{FieldOccurrence Otu} # Assume exists on label biological_association_subject.dwc_recorded_by || ApplicationController.helpers.short_sources_tag(sources) when %w{Otu CollectionObject}, %w{Otu FieldOccurrence} # Assume exists on label biological_association_object.dwc_recorded_by || ApplicationController.helpers.short_sources_tag(sources) when %w{CollectionObject CollectionObject}, %w{FieldOccurrence FieldOccurrence}, %w{CollectionObject FieldOccurrence}, %w{FieldOccurrence CollectionObject} # Lots of assumptions behind this. What if specimens were marked as # collected in 2 different events, that would be odd but perhaps not # impossible. biological_association_subject.dwc_recorded_by || biological_association_object.dwc_recorded_by else 'BAD DATA: TYPE ERROR' end end |
#biological_association_established_date ⇒ Object (private)
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 180 def biological_association_established_date t = [biological_association_subject_type, biological_association_object_type] case t when %w{Otu Otu} ApplicationController.helpers.short_sources_year_tag(sources) when %w{CollectionObject Otu}, %w{FieldOccurrence Otu} biological_association_subject.dwc_event_date || ApplicationController.helpers.short_sources_year_tag(sources) when %w{Otu CollectionObject}, %w{Otu FieldOccurrence} biological_association_object.dwc_event_date || ApplicationController.helpers.short_sources_year_tag(sources) when %w{CollectionObject CollectionObject}, %w{FieldOccurrence FieldOccurrence}, %w{CollectionObject FieldOccurrence}, %w{FieldOccurrence CollectionObject} # Lots of assumptions behind this. What if specimens were marked as # collected in 2 different events, that would be odd but perhaps not # impossible. biological_association_subject.dwc_event_date || biological_association_object.dwc_event_date else 'BAD DATA: TYPE ERROR' end end |
#biological_association_index_attributes ⇒ Object
!! This is expensive, it recomputes values for every field.
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 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 51 def biological_association_index_attributes { biological_association_id: id, biological_association_uuid: uuid, biological_relationship_id: biological_relationship_id, project_id: project_id, created_by_id: created_by_id, updated_by_id: updated_by_id, # Subject fields subject_id: biological_association_subject_id, subject_type: biological_association_subject_type, subject_uuid: biological_association_subject_uuid, subject_label: biological_association_subject_label, subject_order: biological_association_subject_taxonomy_field('order'), subject_family: biological_association_subject_taxonomy_field('family'), subject_genus: biological_association_subject_taxonomy_field('genus'), subject_properties: biological_association_subject_properties, # Relationship fields biological_relationship_uri: biological_relationship_uri, relationship_name: biological_relationship.name, relationship_inverted_name: biological_relationship.inverted_name, # Object fields object_id: biological_association_object_id, object_type: biological_association_object_type, object_uuid: biological_association_object_uuid, object_label: biological_association_object_label, object_order: biological_association_object_taxonomy_field('order'), object_family: biological_association_object_taxonomy_field('family'), object_genus: biological_association_object_taxonomy_field('genus'), object_properties: biological_association_object_properties, # Citations and metadata citations: biological_association_citations, citation_year: biological_association_citation_year, established_date: biological_association_established_date, remarks: biological_association_remarks } end |
#biological_association_object_label ⇒ Object (private)
123 124 125 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 123 def biological_association_object_label ApplicationController.helpers.label_for(biological_association_object) end |
#biological_association_object_properties ⇒ Object (private)
139 140 141 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 139 def biological_association_object_properties object_biological_properties.pluck(:name).join(Shared::IsDwcOccurrence::DWC_DELIMITER).presence end |
#biological_association_object_taxonomy_field(rank) ⇒ Object (private)
131 132 133 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 131 def biological_association_object_taxonomy_field(rank) [biological_association_object.taxonomy[rank]].flatten.compact.join(' ').presence end |
#biological_association_object_uuid ⇒ Object (private)
112 113 114 115 116 117 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 112 def biological_association_object_uuid case biological_association_object.class.base_class.name when 'Otu', 'CollectionObject', 'FieldOccurrence' biological_association_object.uuid end end |
#biological_association_remarks ⇒ Object (private)
TODO: Generic helper
152 153 154 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 152 def biological_association_remarks Utilities::Strings.sanitize_for_csv(notes.collect { |n| n.text }.join(Shared::IsDwcOccurrence::DWC_DELIMITER)).presence end |
#biological_association_subject_label ⇒ Object (private)
119 120 121 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 119 def biological_association_subject_label ApplicationController.helpers.label_for(biological_association_subject) end |
#biological_association_subject_properties ⇒ Object (private)
135 136 137 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 135 def biological_association_subject_properties subject_biological_properties.pluck(:name).join(Shared::IsDwcOccurrence::DWC_DELIMITER).presence end |
#biological_association_subject_taxonomy_field(rank) ⇒ Object (private)
127 128 129 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 127 def biological_association_subject_taxonomy_field(rank) [biological_association_subject.taxonomy[rank]].flatten.compact.join(' ').presence end |
#biological_association_subject_uuid ⇒ Object (private)
105 106 107 108 109 110 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 105 def biological_association_subject_uuid case biological_association_subject.class.base_class.name when 'Otu', 'CollectionObject', 'FieldOccurrence' biological_association_subject.uuid end end |
#biological_relationship_uri ⇒ Object (private)
143 144 145 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 143 def biological_relationship_uri biological_relationship.uris.first&.cached end |
#get_biological_association_index ⇒ BiologicalAssociationIndex
Returns does not rebuild if already built.
95 96 97 98 99 100 101 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 95 def get_biological_association_index if biological_association_index_persisted? biological_association_index else set_biological_association_index end end |
#set_biological_association_index ⇒ BiologicalAssociationIndex
Returns !! always touches the database.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/models/concerns/shared/is_indexed_biological_association.rb', line 23 def set_biological_association_index retried = false begin if biological_association_index_persisted? biological_association_index.update_columns( biological_association_index_attributes.merge( rebuild_set: nil, updated_at: Time.zone.now) ) else create_biological_association_index!(biological_association_index_attributes) end rescue ActiveRecord::ActiveRecordError unless retried retried = true biological_association_index&.reload retry else raise end end biological_association_index end |