Class: TransferRequestCollection
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- TransferRequestCollection
- Includes:
- Uuid::Uuidable
- Defined in:
- app/models/transfer_request_collection.rb
Overview
A transfer request collection provides a means of bulk creating transfer requests between arbitrary sources and destinations. Used to provide a means of bulk creating transfer requests via the API
Defined Under Namespace
Classes: UuidCache
Instance Method Summary collapse
-
#extract_asset_ids(args) ⇒ Object
Args is an array of transfer request parameters (in hash format) We extract any referenced asset and target asset ids into an array.
-
#transfer_requests_attributes=(args) ⇒ Object
These are optimizations to reduce the number of queries that need to be performed while the transfer takes place.
-
#transfer_requests_io=(parameters) ⇒ Object
The api is terrible at handling nested has_many relationships This caches all our UUIDs in one query, and extracts the ids rubocop:todo Metrics/MethodLength.
Methods included from Uuid::Uuidable
included, #unsaved_uuid!, #uuid
Methods inherited from ApplicationRecord
alias_association, convert_labware_to_receptacle_for, find_by_id_or_name, find_by_id_or_name!
Methods included from Squishify
Instance Method Details
#extract_asset_ids(args) ⇒ Object
Args is an array of transfer request parameters (in hash format) We extract any referenced asset and target asset ids into an array.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'app/models/transfer_request_collection.rb', line 109 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
#transfer_requests_attributes=(args) ⇒ Object
These are optimizations to reduce the number of queries that need to be performed while the transfer takes place. Transfer requests rely both on the aliquots in an assets, and the transfer requests into the asset (used to track state). Here we eager load all necessary assets and associated records, and pass them to the transfer requests directly.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'app/models/transfer_request_collection.rb', line 91 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
#transfer_requests_io=(parameters) ⇒ Object
The api is terrible at handling nested has_many relationships This caches all our UUIDs in one query, and extracts the ids rubocop:todo Metrics/MethodLength
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'app/models/transfer_request_collection.rb', line 60 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |