Module: Shared::Citations
- Extended by:
- ActiveSupport::Concern
- Included in:
- AssertedDistribution, BiologicalAssociation, BiologicalAssociationsGraph, BiologicalRelationship, CharacterState, CollectingEvent, CollectionObject, CommonName, Confidence, Content, DataAttribute, Descriptor, Extract, FieldOccurrence, Georeference, Image, Lead, Observation, ObservationMatrix, ObservationMatrixRow, ObservationMatrixRowItem, Otu, OtuRelationship, Protocol, TaxonDetermination, TaxonName, TaxonNameClassification, TaxonNameRelationship, TypeMaterial
- Defined in:
- app/models/concerns/shared/citations.rb
Overview
Shared code for Citations.
The default behaviour with order by youngest source and oldest source is to place records with NIL *last*
in the list.
When multiple citations exist the earliest or latest is used in the sort order.
Instance Method Summary collapse
- #cited? ⇒ Boolean
- #mark_citations_for_destruction ⇒ Object
-
#nomenclature_date ⇒ Date?
(also: #source_nomenclature_date)
!! Over-riden in various places, but it shouldn’t be See Source::Bibtex for context as to how this is built.
- #origin_citation_source_id ⇒ Object
- #reject_citations(attributed) ⇒ Object protected
-
#requires_citation? ⇒ Boolean
If at least one citation is required override this with true in including class.
- #sources_by_topic_id(topic_id) ⇒ Object
Instance Method Details
#cited? ⇒ Boolean
149 150 151 |
# File 'app/models/concerns/shared/citations.rb', line 149 def cited? self.citations.any? end |
#mark_citations_for_destruction ⇒ Object
153 154 155 |
# File 'app/models/concerns/shared/citations.rb', line 153 def mark_citations_for_destruction citations.map(&:mark_for_destruction) end |
#nomenclature_date ⇒ Date? Also known as: source_nomenclature_date
!! Over-riden in various places, but it shouldn’t be See Source::Bibtex for context as to how this is built.
124 125 126 127 128 129 |
# File 'app/models/concerns/shared/citations.rb', line 124 def nomenclature_date self.class.joins(citations: [:source]) .where(citations: {citation_object: self, is_original: true}) .select('sources.cached_nomenclature_date') .first&.cached_nomenclature_date end |
#origin_citation_source_id ⇒ Object
133 134 135 136 137 |
# File 'app/models/concerns/shared/citations.rb', line 133 def origin_citation_source_id if origin_citation && origin_citation.source_id.blank? errors.add(:base, 'the origin citation must have a source') end end |
#reject_citations(attributed) ⇒ Object (protected)
159 160 161 162 163 164 165 |
# File 'app/models/concerns/shared/citations.rb', line 159 def reject_citations(attributed) if (attributed['source_id'].blank? && attributed['source'].blank?) return true if new_record? return true if attributed['pages'].blank? end false end |
#requires_citation? ⇒ Boolean
Returns if at least one citation is required override this with true in including class.
145 146 147 |
# File 'app/models/concerns/shared/citations.rb', line 145 def requires_citation? false end |
#sources_by_topic_id(topic_id) ⇒ Object
139 140 141 |
# File 'app/models/concerns/shared/citations.rb', line 139 def sources_by_topic_id(topic_id) Source.joins(:citation_topics).where(citations: {citation_object: self}, citation_topics: {topic_id:}) end |