Module: Shared::Citations

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

Instance Method Details

#cited?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'app/models/concerns/shared/citations.rb', line 149

def cited?
  self.citations.any?
end

#mark_citations_for_destructionObject



153
154
155
# File 'app/models/concerns/shared/citations.rb', line 153

def mark_citations_for_destruction
  citations.map(&:mark_for_destruction)
end

#nomenclature_dateDate? 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.

Returns:

  • (Date, nil)


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_idObject



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.

Returns:

  • (Boolean)

    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