Class: Extract
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Extract
- Includes:
- Housekeeping, Shared::Containable, Shared::DataAttributes, Shared::Identifiers, Shared::IsData, Shared::Observations, Shared::OriginRelationship, Shared::ProtocolRelationships, Shared::Tags, SoftValidation
- Defined in:
- app/models/extract.rb
Overview
An Extract is the quantified physical entity that originated from a CollectionObject. Extracts are linked to their origin through an OriginRelationship.
Constant Summary
Constants included from SoftValidation
SoftValidation::ANCESTORS_WITH_SOFT_VALIDATIONS
Instance Attribute Summary collapse
-
#day_made ⇒ Integer
2 digit day the extract originated.
-
#is_made_now ⇒ Object
Returns the value of attribute is_made_now.
-
#month_made ⇒ Integer
2 digit month the extract originated.
-
#verbatim_anatomical_origin ⇒ String
Proxy for a OriginRelationship to an AnatomicalClass.
-
#year_made ⇒ Integer
4 digit year the extract originated.
Class Method Summary collapse
-
.select_optimized(user_id, project_id, target = nil) ⇒ Hash
protected
Otus optimized for user selection.
-
.used_recently(user_id, project_id, used_on = '') ⇒ Scope
protected
The max 10 most recently used collection_objects, as `used_on`.
Instance Method Summary collapse
-
#referenced_otus ⇒ Object
Array all inferred or asserted OTUs that this OTU came from.
- #set_made ⇒ Object protected
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 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::Tags
#reject_tags, #tag_with, #tagged?, #tagged_with?
Methods included from Shared::DataAttributes
#import_attributes, #internal_attributes, #keyword_value_hash, #reject_data_attributes
Methods included from Shared::Containable
#contain, #containable?, #contained?, #contained_by?, #contained_siblings, #enclosing_containers, #put_in_container
Methods included from Shared::OriginRelationship
#new_objects, #old_objects, #reject_origin_relationships, #set_origin
Methods included from Shared::ProtocolRelationships
#protocolled?, #reject_protocols
Methods included from Shared::Identifiers
#dwc_occurrence_id, #identified?, #next_by_identifier, #previous_by_identifier, #reject_identifiers
Methods included from Housekeeping
#has_polymorphic_relationship?
Methods inherited from ApplicationRecord
Instance Attribute Details
#day_made ⇒ Integer
Returns 2 digit day the extract originated.
20 21 22 23 24 25 26 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 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 |
# File 'app/models/extract.rb', line 20 class Extract < ApplicationRecord include Housekeeping include Shared::Identifiers include Shared::ProtocolRelationships include Shared::OriginRelationship include Shared::Containable include Shared::DataAttributes include Shared::Observations include Shared::Tags include SoftValidation include Shared::IsData is_origin_for 'Extract', 'Sequence' originates_from 'Extract', 'Specimen', 'Lot', 'RangedLot', 'Otu', 'CollectionObject' belongs_to :repository, inverse_of: :extracts has_many :extractor_roles, -> { order('roles.position ASC') }, class_name: 'Extractor', as: :role_object, dependent: :destroy, validate: true has_many :extractors, -> { order('roles.position ASC') }, through: :extractor_roles, source: :person, validate: true # Upstream - aliases of `origin_otus` and `origin_collection_objects` TODO remove has_many :otus, through: :related_origin_relationships, source: :old_object, source_type: 'Otu' has_many :collection_objects, through: :related_origin_relationships, source: :old_object, source_type: 'CollectionObject' # Downstresm - aliases of `derived_*`, TODO: remove has_many :sequences, through: :origin_relationships, source: :new_object, source_type: 'Sequence' has_many :extracts, through: :related_origin_relationships, source: :old_object, source_type: 'Extract' attr_accessor :is_made_now before_validation :set_made, if: -> {is_made_now} validates :year_made, date_year: { min_year: 1757, max_year: -> {Time.now.year} } validates :month_made, date_month: true validates :day_made, date_day: {year_sym: :year_made, month_sym: :month_made}, unless: -> {year_made.nil? || month_made.nil?} # @return Array # all inferred or asserted OTUs that this OTU came from def referenced_otus [ [otus], [collection_objects.collect{|o| o.current_otu} ] ].flatten.compact.uniq end protected def set_made write_attribute(:year_made, Time.now.year) write_attribute(:month_made, Time.now.month) write_attribute(:day_made, Time.now.day) end # @param used_on [String] required, one of `Protocol`, `OriginRelationship` # @return [Scope] # the max 10 most recently used collection_objects, as `used_on` def self.used_recently(user_id, project_id, used_on = '') return [] if used_on != 'TaxonDetermination' && used_on != 'BiologicalAssociation' t = case used_on when 'TaxonDetermination' TaxonDetermination.arel_table when 'BiologicalAssociation' BiologicalAssociation.arel_table end p = CollectionObject.arel_table # i is a select manager i = case used_on when 'BiologicalAssociation' t.project(t['biological_association_subject_id'], t['updated_at']).from(t) .where( t['updated_at'].gt(1.weeks.ago).and( t['biological_association_subject_type'].eq('CollectionObject') # !! note it's not biological_collection_object_id ) ) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) else t.project(t['biological_collection_object_id'], t['updated_at']).from(t) .where(t['updated_at'].gt( 1.weeks.ago )) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) end # z is a table alias z = i.as('recent_t') j = case used_on when 'BiologicalAssociation' Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new( z['biological_association_subject_id'].eq(p['id']) )) else Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(z['biological_collection_object_id'].eq(p['id']))) # !! note it's not biological_collection_object_id end CollectionObject.joins(j).pluck(:id).uniq end # @params target [String] one of `TaxonDetermination`, `BiologicalAssociation` , nil # @return [Hash] otus optimized for user selection def self.select_optimized(user_id, project_id, target = nil) r = used_recently(user_id, project_id, target) h = { quick: [], pinboard: Extract.pinned_by(user_id).where(project_id: project_id).to_a, recent: [] } if target && !r.empty? n = target.tableize.to_sym h[:recent] = Extract.where('"extracts"."id" IN (?)', r.first(10) ).to_a h[:quick] = (Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a + Extract.where('"extracts"."id" IN (?)', r.first(4) ).to_a).uniq else h[:recent] = Extract.where(project_id: project_id, updated_by_id: user_id).order('updated_at DESC').limit(10).to_a h[:quick] = Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a end h end end |
#is_made_now ⇒ Object
Returns the value of attribute is_made_now.
48 49 50 |
# File 'app/models/extract.rb', line 48 def is_made_now @is_made_now end |
#month_made ⇒ Integer
Returns 2 digit month the extract originated.
20 21 22 23 24 25 26 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 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 |
# File 'app/models/extract.rb', line 20 class Extract < ApplicationRecord include Housekeeping include Shared::Identifiers include Shared::ProtocolRelationships include Shared::OriginRelationship include Shared::Containable include Shared::DataAttributes include Shared::Observations include Shared::Tags include SoftValidation include Shared::IsData is_origin_for 'Extract', 'Sequence' originates_from 'Extract', 'Specimen', 'Lot', 'RangedLot', 'Otu', 'CollectionObject' belongs_to :repository, inverse_of: :extracts has_many :extractor_roles, -> { order('roles.position ASC') }, class_name: 'Extractor', as: :role_object, dependent: :destroy, validate: true has_many :extractors, -> { order('roles.position ASC') }, through: :extractor_roles, source: :person, validate: true # Upstream - aliases of `origin_otus` and `origin_collection_objects` TODO remove has_many :otus, through: :related_origin_relationships, source: :old_object, source_type: 'Otu' has_many :collection_objects, through: :related_origin_relationships, source: :old_object, source_type: 'CollectionObject' # Downstresm - aliases of `derived_*`, TODO: remove has_many :sequences, through: :origin_relationships, source: :new_object, source_type: 'Sequence' has_many :extracts, through: :related_origin_relationships, source: :old_object, source_type: 'Extract' attr_accessor :is_made_now before_validation :set_made, if: -> {is_made_now} validates :year_made, date_year: { min_year: 1757, max_year: -> {Time.now.year} } validates :month_made, date_month: true validates :day_made, date_day: {year_sym: :year_made, month_sym: :month_made}, unless: -> {year_made.nil? || month_made.nil?} # @return Array # all inferred or asserted OTUs that this OTU came from def referenced_otus [ [otus], [collection_objects.collect{|o| o.current_otu} ] ].flatten.compact.uniq end protected def set_made write_attribute(:year_made, Time.now.year) write_attribute(:month_made, Time.now.month) write_attribute(:day_made, Time.now.day) end # @param used_on [String] required, one of `Protocol`, `OriginRelationship` # @return [Scope] # the max 10 most recently used collection_objects, as `used_on` def self.used_recently(user_id, project_id, used_on = '') return [] if used_on != 'TaxonDetermination' && used_on != 'BiologicalAssociation' t = case used_on when 'TaxonDetermination' TaxonDetermination.arel_table when 'BiologicalAssociation' BiologicalAssociation.arel_table end p = CollectionObject.arel_table # i is a select manager i = case used_on when 'BiologicalAssociation' t.project(t['biological_association_subject_id'], t['updated_at']).from(t) .where( t['updated_at'].gt(1.weeks.ago).and( t['biological_association_subject_type'].eq('CollectionObject') # !! note it's not biological_collection_object_id ) ) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) else t.project(t['biological_collection_object_id'], t['updated_at']).from(t) .where(t['updated_at'].gt( 1.weeks.ago )) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) end # z is a table alias z = i.as('recent_t') j = case used_on when 'BiologicalAssociation' Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new( z['biological_association_subject_id'].eq(p['id']) )) else Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(z['biological_collection_object_id'].eq(p['id']))) # !! note it's not biological_collection_object_id end CollectionObject.joins(j).pluck(:id).uniq end # @params target [String] one of `TaxonDetermination`, `BiologicalAssociation` , nil # @return [Hash] otus optimized for user selection def self.select_optimized(user_id, project_id, target = nil) r = used_recently(user_id, project_id, target) h = { quick: [], pinboard: Extract.pinned_by(user_id).where(project_id: project_id).to_a, recent: [] } if target && !r.empty? n = target.tableize.to_sym h[:recent] = Extract.where('"extracts"."id" IN (?)', r.first(10) ).to_a h[:quick] = (Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a + Extract.where('"extracts"."id" IN (?)', r.first(4) ).to_a).uniq else h[:recent] = Extract.where(project_id: project_id, updated_by_id: user_id).order('updated_at DESC').limit(10).to_a h[:quick] = Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a end h end end |
#verbatim_anatomical_origin ⇒ String
Returns proxy for a OriginRelationship to an AnatomicalClass.
20 21 22 23 24 25 26 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 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 |
# File 'app/models/extract.rb', line 20 class Extract < ApplicationRecord include Housekeeping include Shared::Identifiers include Shared::ProtocolRelationships include Shared::OriginRelationship include Shared::Containable include Shared::DataAttributes include Shared::Observations include Shared::Tags include SoftValidation include Shared::IsData is_origin_for 'Extract', 'Sequence' originates_from 'Extract', 'Specimen', 'Lot', 'RangedLot', 'Otu', 'CollectionObject' belongs_to :repository, inverse_of: :extracts has_many :extractor_roles, -> { order('roles.position ASC') }, class_name: 'Extractor', as: :role_object, dependent: :destroy, validate: true has_many :extractors, -> { order('roles.position ASC') }, through: :extractor_roles, source: :person, validate: true # Upstream - aliases of `origin_otus` and `origin_collection_objects` TODO remove has_many :otus, through: :related_origin_relationships, source: :old_object, source_type: 'Otu' has_many :collection_objects, through: :related_origin_relationships, source: :old_object, source_type: 'CollectionObject' # Downstresm - aliases of `derived_*`, TODO: remove has_many :sequences, through: :origin_relationships, source: :new_object, source_type: 'Sequence' has_many :extracts, through: :related_origin_relationships, source: :old_object, source_type: 'Extract' attr_accessor :is_made_now before_validation :set_made, if: -> {is_made_now} validates :year_made, date_year: { min_year: 1757, max_year: -> {Time.now.year} } validates :month_made, date_month: true validates :day_made, date_day: {year_sym: :year_made, month_sym: :month_made}, unless: -> {year_made.nil? || month_made.nil?} # @return Array # all inferred or asserted OTUs that this OTU came from def referenced_otus [ [otus], [collection_objects.collect{|o| o.current_otu} ] ].flatten.compact.uniq end protected def set_made write_attribute(:year_made, Time.now.year) write_attribute(:month_made, Time.now.month) write_attribute(:day_made, Time.now.day) end # @param used_on [String] required, one of `Protocol`, `OriginRelationship` # @return [Scope] # the max 10 most recently used collection_objects, as `used_on` def self.used_recently(user_id, project_id, used_on = '') return [] if used_on != 'TaxonDetermination' && used_on != 'BiologicalAssociation' t = case used_on when 'TaxonDetermination' TaxonDetermination.arel_table when 'BiologicalAssociation' BiologicalAssociation.arel_table end p = CollectionObject.arel_table # i is a select manager i = case used_on when 'BiologicalAssociation' t.project(t['biological_association_subject_id'], t['updated_at']).from(t) .where( t['updated_at'].gt(1.weeks.ago).and( t['biological_association_subject_type'].eq('CollectionObject') # !! note it's not biological_collection_object_id ) ) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) else t.project(t['biological_collection_object_id'], t['updated_at']).from(t) .where(t['updated_at'].gt( 1.weeks.ago )) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) end # z is a table alias z = i.as('recent_t') j = case used_on when 'BiologicalAssociation' Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new( z['biological_association_subject_id'].eq(p['id']) )) else Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(z['biological_collection_object_id'].eq(p['id']))) # !! note it's not biological_collection_object_id end CollectionObject.joins(j).pluck(:id).uniq end # @params target [String] one of `TaxonDetermination`, `BiologicalAssociation` , nil # @return [Hash] otus optimized for user selection def self.select_optimized(user_id, project_id, target = nil) r = used_recently(user_id, project_id, target) h = { quick: [], pinboard: Extract.pinned_by(user_id).where(project_id: project_id).to_a, recent: [] } if target && !r.empty? n = target.tableize.to_sym h[:recent] = Extract.where('"extracts"."id" IN (?)', r.first(10) ).to_a h[:quick] = (Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a + Extract.where('"extracts"."id" IN (?)', r.first(4) ).to_a).uniq else h[:recent] = Extract.where(project_id: project_id, updated_by_id: user_id).order('updated_at DESC').limit(10).to_a h[:quick] = Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a end h end end |
#year_made ⇒ Integer
Returns 4 digit year the extract originated.
20 21 22 23 24 25 26 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 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 |
# File 'app/models/extract.rb', line 20 class Extract < ApplicationRecord include Housekeeping include Shared::Identifiers include Shared::ProtocolRelationships include Shared::OriginRelationship include Shared::Containable include Shared::DataAttributes include Shared::Observations include Shared::Tags include SoftValidation include Shared::IsData is_origin_for 'Extract', 'Sequence' originates_from 'Extract', 'Specimen', 'Lot', 'RangedLot', 'Otu', 'CollectionObject' belongs_to :repository, inverse_of: :extracts has_many :extractor_roles, -> { order('roles.position ASC') }, class_name: 'Extractor', as: :role_object, dependent: :destroy, validate: true has_many :extractors, -> { order('roles.position ASC') }, through: :extractor_roles, source: :person, validate: true # Upstream - aliases of `origin_otus` and `origin_collection_objects` TODO remove has_many :otus, through: :related_origin_relationships, source: :old_object, source_type: 'Otu' has_many :collection_objects, through: :related_origin_relationships, source: :old_object, source_type: 'CollectionObject' # Downstresm - aliases of `derived_*`, TODO: remove has_many :sequences, through: :origin_relationships, source: :new_object, source_type: 'Sequence' has_many :extracts, through: :related_origin_relationships, source: :old_object, source_type: 'Extract' attr_accessor :is_made_now before_validation :set_made, if: -> {is_made_now} validates :year_made, date_year: { min_year: 1757, max_year: -> {Time.now.year} } validates :month_made, date_month: true validates :day_made, date_day: {year_sym: :year_made, month_sym: :month_made}, unless: -> {year_made.nil? || month_made.nil?} # @return Array # all inferred or asserted OTUs that this OTU came from def referenced_otus [ [otus], [collection_objects.collect{|o| o.current_otu} ] ].flatten.compact.uniq end protected def set_made write_attribute(:year_made, Time.now.year) write_attribute(:month_made, Time.now.month) write_attribute(:day_made, Time.now.day) end # @param used_on [String] required, one of `Protocol`, `OriginRelationship` # @return [Scope] # the max 10 most recently used collection_objects, as `used_on` def self.used_recently(user_id, project_id, used_on = '') return [] if used_on != 'TaxonDetermination' && used_on != 'BiologicalAssociation' t = case used_on when 'TaxonDetermination' TaxonDetermination.arel_table when 'BiologicalAssociation' BiologicalAssociation.arel_table end p = CollectionObject.arel_table # i is a select manager i = case used_on when 'BiologicalAssociation' t.project(t['biological_association_subject_id'], t['updated_at']).from(t) .where( t['updated_at'].gt(1.weeks.ago).and( t['biological_association_subject_type'].eq('CollectionObject') # !! note it's not biological_collection_object_id ) ) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) else t.project(t['biological_collection_object_id'], t['updated_at']).from(t) .where(t['updated_at'].gt( 1.weeks.ago )) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) end # z is a table alias z = i.as('recent_t') j = case used_on when 'BiologicalAssociation' Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new( z['biological_association_subject_id'].eq(p['id']) )) else Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(z['biological_collection_object_id'].eq(p['id']))) # !! note it's not biological_collection_object_id end CollectionObject.joins(j).pluck(:id).uniq end # @params target [String] one of `TaxonDetermination`, `BiologicalAssociation` , nil # @return [Hash] otus optimized for user selection def self.select_optimized(user_id, project_id, target = nil) r = used_recently(user_id, project_id, target) h = { quick: [], pinboard: Extract.pinned_by(user_id).where(project_id: project_id).to_a, recent: [] } if target && !r.empty? n = target.tableize.to_sym h[:recent] = Extract.where('"extracts"."id" IN (?)', r.first(10) ).to_a h[:quick] = (Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a + Extract.where('"extracts"."id" IN (?)', r.first(4) ).to_a).uniq else h[:recent] = Extract.where(project_id: project_id, updated_by_id: user_id).order('updated_at DESC').limit(10).to_a h[:quick] = Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a end h end end |
Class Method Details
.select_optimized(user_id, project_id, target = nil) ⇒ Hash (protected)
Returns otus optimized for user selection.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'app/models/extract.rb', line 123 def self.select_optimized(user_id, project_id, target = nil) r = used_recently(user_id, project_id, target) h = { quick: [], pinboard: Extract.pinned_by(user_id).where(project_id: project_id).to_a, recent: [] } if target && !r.empty? n = target.tableize.to_sym h[:recent] = Extract.where('"extracts"."id" IN (?)', r.first(10) ).to_a h[:quick] = (Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a + Extract.where('"extracts"."id" IN (?)', r.first(4) ).to_a).uniq else h[:recent] = Extract.where(project_id: project_id, updated_by_id: user_id).order('updated_at DESC').limit(10).to_a h[:quick] = Extract.pinned_by(user_id).pinboard_inserted.where(project_id: project_id).to_a end h end |
.used_recently(user_id, project_id, used_on = '') ⇒ Scope (protected)
Returns the max 10 most recently used collection_objects, as `used_on`.
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 |
# File 'app/models/extract.rb', line 75 def self.used_recently(user_id, project_id, used_on = '') return [] if used_on != 'TaxonDetermination' && used_on != 'BiologicalAssociation' t = case used_on when 'TaxonDetermination' TaxonDetermination.arel_table when 'BiologicalAssociation' BiologicalAssociation.arel_table end p = CollectionObject.arel_table # i is a select manager i = case used_on when 'BiologicalAssociation' t.project(t['biological_association_subject_id'], t['updated_at']).from(t) .where( t['updated_at'].gt(1.weeks.ago).and( t['biological_association_subject_type'].eq('CollectionObject') # !! note it's not biological_collection_object_id ) ) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) else t.project(t['biological_collection_object_id'], t['updated_at']).from(t) .where(t['updated_at'].gt( 1.weeks.ago )) .where(t['updated_by_id'].eq(user_id)) .where(t['project_id'].eq(project_id)) .order(t['updated_at'].desc) end # z is a table alias z = i.as('recent_t') j = case used_on when 'BiologicalAssociation' Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new( z['biological_association_subject_id'].eq(p['id']) )) else Arel::Nodes::InnerJoin.new(z, Arel::Nodes::On.new(z['biological_collection_object_id'].eq(p['id']))) # !! note it's not biological_collection_object_id end CollectionObject.joins(j).pluck(:id).uniq end |
Instance Method Details
#referenced_otus ⇒ Object
Returns Array all inferred or asserted OTUs that this OTU came from.
57 58 59 60 61 62 |
# File 'app/models/extract.rb', line 57 def referenced_otus [ [otus], [collection_objects.collect{|o| o.current_otu} ] ].flatten.compact.uniq end |
#set_made ⇒ Object (protected)
66 67 68 69 70 |
# File 'app/models/extract.rb', line 66 def set_made write_attribute(:year_made, Time.now.year) write_attribute(:month_made, Time.now.month) write_attribute(:day_made, Time.now.day) end |