Class: ControlledVocabularyTerm
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- ControlledVocabularyTerm
- Includes:
- Housekeeping, Shared::AlternateValues, Shared::HasPapertrail, Shared::IsData, SoftValidation
- Defined in:
- app/models/controlled_vocabulary_term.rb
Overview
A controlled vocabulary term is a user defineable attribute, a name and definition is required.
Direct Known Subclasses
BiocurationClass, BiologicalProperty, ConfidenceLevel, Keyword, Predicate, Topic
Constant Summary collapse
- ALTERNATE_VALUES_FOR =
[:name, :definition].freeze
Constants included from SoftValidation
SoftValidation::ANCESTORS_WITH_SOFT_VALIDATIONS
Instance Attribute Summary collapse
-
#definition ⇒ String
The term definition, required.
-
#name ⇒ String
The term name.
-
#project_id ⇒ Integer
the project ID.
-
#type ⇒ String
The subclass of the CVT.
-
#uri ⇒ String
A URI for an external concept that matches this CVT.
-
#uri_relation ⇒ String
A SKOS relationship that defines/describes the relationship between the concept identified by the URI and the concept defined in the definition.
Instance Method Summary collapse
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::HasPapertrail
#attribute_updated, #attribute_updater
Methods included from Shared::AlternateValues
#all_values_for, #alternate_valued?
Methods included from Housekeeping
#has_polymorphic_relationship?
Methods inherited from ApplicationRecord
Instance Attribute Details
#definition ⇒ String
Returns The term definition, required.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
#name ⇒ String
Returns The term name.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
#project_id ⇒ Integer
the project ID
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
#type ⇒ String
Returns The subclass of the CVT.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
#uri ⇒ String
Returns A URI for an external concept that matches this CVT.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
#uri_relation ⇒ String
Returns A SKOS relationship that defines/describes the relationship between the concept identified by the URI and the concept defined in the definition.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/controlled_vocabulary_term.rb', line 27 class ControlledVocabularyTerm < ApplicationRecord # ControlledVocabularyTerms are NOT Taggable (with 'Tag') include Housekeeping include Shared::AlternateValues include Shared::HasPapertrail include Shared::IsData include SoftValidation acts_as_list scope: [:project_id, :type] ALTERNATE_VALUES_FOR = [:name, :definition].freeze validates_presence_of :name, :definition, :type validates_length_of :definition, minimum: 20 validates_uniqueness_of :name, scope: [:type, :project_id] validates_uniqueness_of :definition, scope: [:project_id] validates_uniqueness_of :uri, scope: [:project_id, :uri_relation], allow_blank: true validates_presence_of :uri, unless: -> {uri_relation.blank?}, message: 'must be provided if uri_relation is provided' validate :uri_relation_is_a_skos_relation, unless: -> {uri_relation.blank?} has_many :observation_matrix_row_items, as: :observation_object, inverse_of: :observation_object, class_name: 'ObservationMatrixRowItem::Dynamic::Tag', dependent: :destroy has_many :observation_matrix_column_items, inverse_of: :controlled_vocabulary_term, class_name: 'ObservationMatrixColumnItem::Dynamic::Tag', dependent: :destroy # TODO: this needs to come through columns rows has_many :observation_matrices, through: :observation_matrix_row_items scope :of_type, -> (type) { where(type: type.to_s.capitalize) } # TODO, capitalize is not the right method for things like `:foo_bar` protected # @return [Object] def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end end |
Instance Method Details
#uri_relation_is_a_skos_relation ⇒ Object (protected)
61 62 63 |
# File 'app/models/controlled_vocabulary_term.rb', line 61 def uri_relation_is_a_skos_relation errors.add(:uri_relation, 'is not a valid uri relation') if !SKOS_RELATIONS.keys.include?(uri_relation) end |