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
require_dependency Rails.root.to_s + ‘/app/models/observation.rb’ 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: 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
-
#observation_type ⇒ Object
String, nil the corresponding Observation STI class name.
- #presence_absence? ⇒ Boolean
-
#qualitative? ⇒ Boolean
TODO: these should be ‘is_` to follow design pattern.
- #short_name_is_shorter ⇒ Object protected
- #sv_short_name_is_short ⇒ Object protected
-
#target_name(target, language_id) ⇒ String
Name of the descriptor in a particular language.
-
#type_is_subclassed ⇒ Object
protected
TODO: get rid of this.
Methods included from SoftValidation
#clear_soft_validations, #fix_for, #fix_soft_validations, #soft_fixed?, #soft_valid?, #soft_validate, #soft_validated?, #soft_validations, #soft_validators
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
#dwc_occurrence_id, #identified?, #next_by_identifier, #previous_by_identifier, #reject_identifiers, #uri, #uuid
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
46 47 48 |
# File 'app/models/descriptor.rb', line 46 def self.human_name self.name.demodulize.humanize end |
Instance Method Details
#gene? ⇒ Boolean
95 96 97 |
# File 'app/models/descriptor.rb', line 95 def gene? type == 'Descriptor::Gene' end |
#observation_type ⇒ Object
Returns String, nil the corresponding Observation STI class name.
52 53 54 55 |
# File 'app/models/descriptor.rb', line 52 def observation_type return nil if type.blank? 'Observation::' + type.split('::').last end |
#presence_absence? ⇒ Boolean
91 92 93 |
# File 'app/models/descriptor.rb', line 91 def presence_absence? type == 'Descriptor::PresenceAbsence' end |
#qualitative? ⇒ Boolean
TODO: these should be ‘is_` to follow design pattern
87 88 89 |
# File 'app/models/descriptor.rb', line 87 def qualitative? type == 'Descriptor::Qualitative' end |
#short_name_is_shorter ⇒ Object (protected)
108 109 110 |
# File 'app/models/descriptor.rb', line 108 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)
112 113 114 |
# File 'app/models/descriptor.rb', line 112 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
Returns name of the descriptor in a particular language.
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 |
# File 'app/models/descriptor.rb', line 59 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). where("(alternate_values.alternate_value_object_attribute = 'key_name' OR alternate_values.alternate_value_object_attribute = 'name')"). order(:alternate_value_object_attribute).pluck(:value).first when :description a = AlternateValue::Translation. where(alternate_value_object: self, language_id: language_id). where("(alternate_values.alternate_value_object_attribute = 'description_name' OR alternate_values.alternate_value_object_attribute = 'name')"). order(:alternate_value_object_attribute).pluck(:value).first end end return a.nil? ? n : a end |
#type_is_subclassed ⇒ Object (protected)
TODO: get rid of this
102 103 104 105 106 |
# File 'app/models/descriptor.rb', line 102 def type_is_subclassed if !DESCRIPTOR_TYPES[type] errors.add(:type, 'type must be a valid subclass') end end |