Class: Descriptor
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Descriptor
- Includes:
- Housekeeping, Shared::AlternateValues, Shared::Citations, Shared::Confidences, Shared::DataAttributes, Shared::Depictions, Shared::Documentation, Shared::Identifiers, Shared::IsData, Shared::Notes, Shared::Tags, SoftValidation
- Defined in:
- app/models/descriptor.rb
Overview
Descriptors are the general mechanism for describing CollectionObjects (individual specimens) or Otus (taxa).
They come in various types, reflecting the approaches commonly used to describe specimens and OTUs:
Working - raw notes or images, "primal" observations, not yet refined to states or measurements
Qualitative - Represents character/character_state expressions as traditionally understood.
Quantitative - Single measurements.
Sample - Summaries of multiple observations recorded in a statistical manner. Only valid for Otus. For example "length 42-77mm (n=5, min: 42, max:Only valid for Otus."
Direct Known Subclasses
Continuous, Gene, Media, PresenceAbsence, Qualitative, Sample, Working
Defined Under Namespace
Classes: Autocomplete, Continuous, Gene, Media, PresenceAbsence, Qualitative, Sample, Working
Constant Summary collapse
- ALTERNATE_VALUES_FOR =
[:name, :short_name, :description_name, :key_name].freeze
Constants included from SoftValidation
SoftValidation::ANCESTORS_WITH_SOFT_VALIDATIONS
Class Method Summary collapse
Instance Method Summary collapse
- #gene? ⇒ Boolean
- #presence_absence? ⇒ Boolean
- #qualitative? ⇒ Boolean
- #short_name_is_shorter ⇒ Object protected
- #sv_short_name_is_short ⇒ Object protected
-
#target_name(target, language_id) ⇒ String
TODO: This should be a helper method, not a model method.
-
#type_is_subclassed ⇒ Object
protected
TODO: get rid of this.
Methods included from SoftValidation
#clear_soft_validations, #fix_soft_validations, #soft_fixed?, #soft_valid?, #soft_validate, #soft_validated?, #soft_validations
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::Documentation
#document_array=, #documented?, #reject_documentation, #reject_documents
Methods included from Shared::Confidences
Methods included from Shared::AlternateValues
#all_values_for, #alternate_valued?
Methods included from Shared::DataAttributes
#import_attributes, #internal_attributes, #keyword_value_hash, #reject_data_attributes
Methods included from Shared::Depictions
#has_depictions?, #image_array=, #reject_depictions, #reject_images
Methods included from Shared::Notes
#concatenated_notes_string, #reject_notes
Methods included from Shared::Tags
#reject_tags, #tag_with, #tagged?, #tagged_with?
Methods included from Shared::Identifiers
#identified?, #next_by_identifier, #previous_by_identifier, #reject_identifiers
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
Class Method Details
.human_name ⇒ Object
45 46 47 |
# File 'app/models/descriptor.rb', line 45 def self.human_name self.name.demodulize.humanize end |
Instance Method Details
#gene? ⇒ Boolean
82 83 84 |
# File 'app/models/descriptor.rb', line 82 def gene? type == 'Descriptor::Gene' end |
#presence_absence? ⇒ Boolean
78 79 80 |
# File 'app/models/descriptor.rb', line 78 def presence_absence? type == 'Descriptor::PresenceAbsence' end |
#qualitative? ⇒ Boolean
74 75 76 |
# File 'app/models/descriptor.rb', line 74 def qualitative? type == 'Descriptor::Qualitative' end |
#short_name_is_shorter ⇒ Object (protected)
95 96 97 |
# File 'app/models/descriptor.rb', line 95 def short_name_is_shorter errors.add(:short_name, 'is longer than name!') if short_name && name && (short_name.length > name.length) end |
#sv_short_name_is_short ⇒ Object (protected)
99 100 101 |
# File 'app/models/descriptor.rb', line 99 def sv_short_name_is_short soft_validations.add(:short_name, 'should likely be less than 12 characters long') if short_name && short_name.length > 12 end |
#target_name(target, language_id) ⇒ String
TODO: This should be a helper method, not a model method
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/models/descriptor.rb', line 52 def target_name(target, language_id) n = self.name a = nil case target when :key n = self.key_name.nil? ? n : self.key_name when :description n = self.description_name.nil? ? n : self.description_name end unless language_id.nil? case target when :key a = AlternateValue::Translation.where(alternate_value_object: self, language_id: language_id, alternate_value_object_attribute: 'key_name').first when :description a = AlternateValue::Translation.where(alternate_value_object: self, language_id: language_id, alternate_value_object_attribute: 'description_name').first end a = AlternateValue::Translation.where(alternate_value_object: self, language_id: language_id, alternate_value_object_attribute: 'name').first if a.nil? n = a.value unless a.nil? end return n end |
#type_is_subclassed ⇒ Object (protected)
TODO: get rid of this
89 90 91 92 93 |
# File 'app/models/descriptor.rb', line 89 def type_is_subclassed if !DESCRIPTOR_TYPES[type] errors.add(:type, 'type must be a valid subclass') end end |