Class: BiologicalAssociation
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- BiologicalAssociation
- Includes:
- DwcExtensions, GlobiExtensions, Housekeeping, Shared::AutoUuid, Shared::Citations, Shared::Confidences, Shared::DataAttributes, Shared::Depictions, Shared::Identifiers, Shared::IsData, Shared::Notes, Shared::QueryBatchUpdate, Shared::Tags, SoftValidation
- Defined in:
- app/models/biological_association.rb
Overview
A BiologicalAssociation defines a (biological) relationship between two entities. It is an edge in the graph of biological relationships. The relationship can be between two Otus, an Otu and a Collection Object, or between two Collection Objects. For example ‘Species Aus bus is the host_of individual A.’
Defined Under Namespace
Modules: DwcExtensions, GlobiExtensions
Constant Summary
Constants included from SoftValidation
SoftValidation::ANCESTORS_WITH_SOFT_VALIDATIONS
Instance Attribute Summary collapse
-
#biological_association_object_id ⇒ Integer
Rails polymorphic, id of the object.
-
#biological_association_object_type ⇒ String
Rails polymorphic, type of the object (e.g. CollectionObject).
-
#biological_association_subject_id ⇒ Integer
Rails polymorphic, id of the subject of the relationship.
-
#biological_association_subject_type ⇒ String
Rails polymorphic, type fo the subject (e.g. Otu).
-
#biological_relationship_id ⇒ Integer
The BiologicalRelationship id.
-
#object_global_id ⇒ Object
TODO: this is badly named.
-
#project_id ⇒ Integer
the project ID.
-
#rotate ⇒ Object
Returns the value of attribute rotate.
-
#subject_global_id ⇒ Object
Returns the value of attribute subject_global_id.
Class Method Summary collapse
Instance Method Summary collapse
-
#dwc_extension_select ⇒ ActiveRecord::Relation
def self.collection_objects_subject_join a = arel_table b = ::CollectionObject.arel_table j = a.join(b).on(a.eq(‘CollectionObject’).and(a.eq(b))) joins(j.join_sources) end.
-
#object ⇒ Object
!! You can not set with this method.
-
#object_class_name ⇒ Object
TODO: Why?! this is just biological_association.biological_association_object_type.
-
#subject ⇒ Object
!! You can not set with this method.
-
#subject_class_name ⇒ Object
TODO: Why?! this is just biological_association.biological_association_subject_type.
- #targeted_join(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
- #targeted_join2(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
-
#targeted_left_join(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
Not used.
Methods included from Shared::QueryBatchUpdate
Methods included from DwcExtensions
#darwin_core_extension_json, #darwin_core_extension_row, #dwc_related_resource, #dwc_related_resource_id, #dwc_relationship_according_to, #dwc_relationship_established_date, #dwc_relationship_of_resource, #dwc_relationship_of_resource_id, #dwc_relationship_remarks, #dwc_resource, #dwc_resource_id, #dwc_resource_relationship_id, #globi_extension_json
Methods included from GlobiExtensions
#globi_extension_json, #globi_extension_row, #globi_interaction_type_id, #globi_interaction_type_name, #globi_source_catalog_number, #globi_source_collection_code, #globi_source_institution_code, #globi_source_life_stage_id, #globi_source_life_stage_name, #globi_source_occurrence_id, #globi_source_sex_id, #globi_source_sex_name, #globi_source_taxon_name, #globi_source_taxon_path, #globi_source_taxon_rank, #globi_target_catalog_number, #globi_target_collection_code, #globi_target_institution_code, #globi_target_life_stage_id, #globi_target_life_stage_name, #globi_target_occurrence_id, #globi_target_sex_id, #globi_target_sex_name, #globi_target_taxon_name, #globi_target_taxon_path, #globi_target_taxon_rank
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::AutoUuid
#create_object_uuid, #generate_uuid_if_required
Methods included from Shared::Depictions
#has_depictions?, #image_array=, #reject_depictions, #reject_images
Methods included from Shared::Confidences
Methods included from Shared::Notes
#concatenated_notes_string, #reject_notes
Methods included from Shared::DataAttributes
#import_attributes, #internal_attributes, #keyword_value_hash, #reject_data_attributes
Methods included from Shared::Identifiers
#dwc_occurrence_id, #identified?, #next_by_identifier, #previous_by_identifier, #reject_identifiers, #uri, #uuid
Methods included from Shared::Tags
#reject_tags, #tag_with, #tagged?, #tagged_with?
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 SoftValidation
#clear_soft_validations, #fix_for, #fix_soft_validations, #soft_fixed?, #soft_valid?, #soft_validate, #soft_validated?, #soft_validations, #soft_validators
Methods included from Housekeeping
#has_polymorphic_relationship?
Methods inherited from ApplicationRecord
Instance Attribute Details
#biological_association_object_id ⇒ Integer
Returns Rails polymorphic, id of the object.
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#biological_association_object_type ⇒ String
Returns Rails polymorphic, type of the object (e.g. CollectionObject).
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#biological_association_subject_id ⇒ Integer
Returns Rails polymorphic, id of the subject of the relationship.
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#biological_association_subject_type ⇒ String
Returns Rails polymorphic, type fo the subject (e.g. Otu).
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#biological_relationship_id ⇒ Integer
Returns the BiologicalRelationship id.
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#object_global_id ⇒ Object
TODO: this is badly named
70 71 72 |
# File 'app/models/biological_association.rb', line 70 def object_global_id @object_global_id end |
#project_id ⇒ Integer
the project ID
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'app/models/biological_association.rb', line 29 class BiologicalAssociation < ApplicationRecord include Housekeeping include SoftValidation include Shared::Citations include Shared::Tags include Shared::Identifiers include Shared::DataAttributes include Shared::Notes include Shared::Confidences include Shared::Depictions include Shared::AutoUuid include Shared::IsData include BiologicalAssociation::GlobiExtensions include BiologicalAssociation::DwcExtensions include Shared::QueryBatchUpdate belongs_to :biological_relationship, inverse_of: :biological_associations has_many :subject_biological_relationship_types, through: :biological_relationship has_many :object_biological_relationship_types, through: :biological_relationship has_many :subject_biological_properties, through: :subject_biological_relationship_types, source: :biological_property has_many :object_biological_properties, through: :object_biological_relationship_types, source: :biological_property belongs_to :biological_association_subject, polymorphic: true belongs_to :biological_association_object, polymorphic: true has_many :biological_associations_biological_associations_graphs, inverse_of: :biological_association, dependent: :destroy has_many :biological_associations_graphs, through: :biological_associations_biological_associations_graphs, inverse_of: :biological_associations validates :biological_relationship, presence: true validates :biological_association_subject, presence: true validates :biological_association_object, presence: true validates_uniqueness_of :biological_association_subject_id, scope: [:biological_association_subject_type, :biological_association_object_id, :biological_association_object_type, :biological_relationship_id] validate :biological_association_subject_type_is_allowed validate :biological_association_object_type_is_allowed attr_accessor :subject_global_id attr_accessor :object_global_id # TODO: this is badly named attr_accessor :rotate def rotate=(value) s = self.biological_association_subject o = self.biological_association_object self.biological_association_subject = o self.biological_association_object = s end def subject_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_subject_id, o.id) write_attribute(:biological_association_subject_type, o..class.name) end def object_global_id=(value) o = GlobalID::Locator.locate(value) write_attribute(:biological_association_object_id, o.id) write_attribute(:biological_association_object_type, o..class.name) end # TODO: Why?! this is just biological_association.biological_association_subject_type def subject_class_name biological_association_subject.try(:class).base_class.name end # TODO: Why?! this is just biological_association.biological_association_object_type def object_class_name biological_association_object.try(:class).base_class.name end # !! You can not set with this method def subject biological_association_subject end # !! You can not set with this method def object biological_association_object end class << self def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end end # @return [ActiveRecord::Relation] #def self.collection_objects_subject_join # a = arel_table # b = ::CollectionObject.arel_table # j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id]))) # joins(j.join_sources) #end def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end # @return [ActiveRecord::Relation] def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end # @return [ActiveRecord::Relation] def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end # Not used # @return [ActiveRecord::Relation] def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end end |
#rotate ⇒ Object
Returns the value of attribute rotate.
72 73 74 |
# File 'app/models/biological_association.rb', line 72 def rotate @rotate end |
#subject_global_id ⇒ Object
Returns the value of attribute subject_global_id.
69 70 71 |
# File 'app/models/biological_association.rb', line 69 def subject_global_id @subject_global_id end |
Class Method Details
.batch_update(params) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'app/models/biological_association.rb', line 138 def batch_update(params) request = QueryBatchRequest.new( klass: 'BiologicalAssociation', object_filter_params: params[:biological_association_query], object_params: params[:biological_association], async_cutoff: (params[:async_cutoff] || 26), preview: params[:preview] ) set_batch_cap(request) query_batch_update(request) end |
.set_batch_cap(request) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/models/biological_association.rb', line 116 def set_batch_cap(request) a = request.filter total = a.all.pluck(:biological_relationship_id).uniq cap = 0 case total.size when 1 cap = 5000 request.cap_reason = 'Maximum allowed.' when 2 cap = 2000 request.cap_reason = 'Maximum allowed when 2 biological relationships present.' else cap = 25 request.cap_reason = 'Maximum allowed when 3 or more biological relationships present.' end request.cap = cap request end |
Instance Method Details
#dwc_extension_select ⇒ ActiveRecord::Relation
def self.collection_objects_subject_join
a = arel_table
b = ::CollectionObject.arel_table
j = a.join(b).on(a[:biological_association_subject_type].eq('CollectionObject').and(a[:biological_association_subject_id].eq(b[:id])))
joins(j.join_sources)
end
161 162 163 164 165 166 |
# File 'app/models/biological_association.rb', line 161 def dwc_extension_select BiologicalAssociation .joins("LEFT JOIN identifiers id_s ON id_s.identifier_object_type = biological_associations.biological_associations_subject_type AND ids_s.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_o ON id_o.identifier_object_type = biological_associations.biological_associations_object_type AND ids_o.type = 'Identifier::Global::Uuid'" ) .joins("LEFT JOIN identifiers id_r ON id_o.identifier_object_type = 'BiologicalRelationship' AND idr_.identifier_object_id = biological_associations.biological_relationship_id AND ids_r.type = 'Identifier::Global::Uri'" ) end |
#object ⇒ Object
!! You can not set with this method
110 111 112 |
# File 'app/models/biological_association.rb', line 110 def object biological_association_object end |
#object_class_name ⇒ Object
TODO: Why?! this is just biological_association.biological_association_object_type
100 101 102 |
# File 'app/models/biological_association.rb', line 100 def object_class_name biological_association_object.try(:class).base_class.name end |
#subject ⇒ Object
!! You can not set with this method
105 106 107 |
# File 'app/models/biological_association.rb', line 105 def subject biological_association_subject end |
#subject_class_name ⇒ Object
TODO: Why?! this is just biological_association.biological_association_subject_type
95 96 97 |
# File 'app/models/biological_association.rb', line 95 def subject_class_name biological_association_subject.try(:class).base_class.name end |
#targeted_join(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
169 170 171 172 173 174 175 |
# File 'app/models/biological_association.rb', line 169 def targeted_join(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end |
#targeted_join2(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
178 179 180 181 182 183 |
# File 'app/models/biological_association.rb', line 178 def targeted_join2(target: 'subject', target_class: ::Otu) a = arel_table b = target_class.arel_table j = a.join(b).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) end |
#targeted_left_join(target: 'subject', target_class: ::Otu) ⇒ ActiveRecord::Relation
Not used
187 188 189 190 191 192 193 |
# File 'app/models/biological_association.rb', line 187 def targeted_left_join(target: 'subject', target_class: ::Otu ) a = arel_table b = target_class.arel_table j = a.join(b, Arel::Nodes::OuterJoin).on(a["biological_association_#{target}_type".to_sym].eq(target_class.name).and(a["biological_assoication_#{target}_id".to_sym].eq(b[:id]))) joins(j.join_sources) end |