Class: Heron::Factories::Sample
- Inherits:
- 
      Object
      
        - Object
- Heron::Factories::Sample
 
- Includes:
- ActiveModel::Model
- Defined in:
- app/models/heron/factories/sample.rb
Overview
Factory class to generate sample tubes inside a Heron rack
Instance Method Summary collapse
- #all_fields_are_existing_columns ⇒ Object
- #check_no_other_params_when_uuid ⇒ Object
- 
  
    
      #create  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Persists the material including the associated container. 
- #create_aliquot_at(container) ⇒ Object
- #create_sample! ⇒ Object
- #create_sanger_sample_id! ⇒ Object
- #handle_uuid_duplication(uuid) ⇒ Object
- 
  
    
      #initialize(params)  ⇒ Sample 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Sample. 
- #params_for_aliquot_creation ⇒ Object
- #params_for_sample_creation ⇒ Object
- #params_for_sample_metadata_table ⇒ Object
- #params_for_sample_table ⇒ Object
- #replace_uuid(sample) ⇒ Object
- #sample ⇒ Object
- #sample_already_present? ⇒ Boolean
- #sample_keys ⇒ Object
- #sanger_sample_id ⇒ Object
- #study ⇒ Object
- #unexisting_column_keys ⇒ Object
Constructor Details
#initialize(params) ⇒ Sample
Returns a new instance of Sample.
| 13 14 15 | # File 'app/models/heron/factories/sample.rb', line 13 def initialize(params) @params = params end | 
Instance Method Details
#all_fields_are_existing_columns ⇒ Object
| 97 98 99 100 101 | # File 'app/models/heron/factories/sample.rb', line 97 def all_fields_are_existing_columns return if unexisting_column_keys.empty? unexisting_column_keys.each { |col| errors.add(col, 'Unexisting field for sample or sample_metadata') } end | 
#check_no_other_params_when_uuid ⇒ Object
| 17 18 19 20 21 | # File 'app/models/heron/factories/sample.rb', line 17 def check_no_other_params_when_uuid return if sample_keys.empty? sample_keys.each { |key| errors.add(key, 'No other params can be added when sample uuid specified') } end | 
#create ⇒ Object
Persists the material including the associated container
| 29 30 31 32 33 34 | # File 'app/models/heron/factories/sample.rb', line 29 def create return unless valid? return @sample if @sample @sample = create_sample! end | 
#create_aliquot_at(container) ⇒ Object
| 36 37 38 39 40 41 42 43 44 | # File 'app/models/heron/factories/sample.rb', line 36 def create_aliquot_at(container) return unless create new_aliquot = container&.aliquots&.create(params_for_aliquot_creation) container.register_stock! if new_aliquot&.persisted? new_aliquot end | 
#create_sample! ⇒ Object
| 68 69 70 71 72 73 74 75 76 77 | # File 'app/models/heron/factories/sample.rb', line 68 def create_sample! return sample if sample @sample = ::Sample.create!(params_for_sample_creation) do |sample| replace_uuid(sample) if @params[:uuid] sample..update!() sample.studies << study end end | 
#create_sanger_sample_id! ⇒ Object
| 50 51 52 | # File 'app/models/heron/factories/sample.rb', line 50 def create_sanger_sample_id! SangerSampleId.generate_sanger_sample_id!(study.abbreviation) end | 
#handle_uuid_duplication(uuid) ⇒ Object
| 87 88 89 90 91 | # File 'app/models/heron/factories/sample.rb', line 87 def handle_uuid_duplication(uuid) msg = "Sample with uuid #{uuid} already exists" errors.add(:uuid, msg) raise StandardError, msg end | 
#params_for_aliquot_creation ⇒ Object
| 107 108 109 | # File 'app/models/heron/factories/sample.rb', line 107 def params_for_aliquot_creation { sample:, study: }.merge(@params[:aliquot] || {}) end | 
#params_for_sample_creation ⇒ Object
| 103 104 105 | # File 'app/models/heron/factories/sample.rb', line 103 def params_for_sample_creation { name: sanger_sample_id, sanger_sample_id: sanger_sample_id }.merge(params_for_sample_table) end | 
#params_for_sample_metadata_table ⇒ Object
| 115 116 117 | # File 'app/models/heron/factories/sample.rb', line 115 def @params.select { |k, _v| ::Sample::Metadata.column_names.include?(k.to_s) } end | 
#params_for_sample_table ⇒ Object
| 111 112 113 | # File 'app/models/heron/factories/sample.rb', line 111 def params_for_sample_table @params.select { |k, _v| ::Sample.column_names.include?(k.to_s) } end | 
#replace_uuid(sample) ⇒ Object
| 79 80 81 82 83 84 85 | # File 'app/models/heron/factories/sample.rb', line 79 def replace_uuid(sample) uuid = @params[:uuid] handle_uuid_duplication(uuid) if Uuid.with_external_id(uuid).count.positive? sample.lazy_uuid_generation = true sample.uuid_object = Uuid.new sample.uuid_object.update!(resource: sample, external_id: uuid) if uuid end | 
#sample ⇒ Object
| 58 59 60 61 62 | # File 'app/models/heron/factories/sample.rb', line 58 def sample return @sample if @sample @sample = ::Sample.with_uuid(@params[:sample_uuid]).first if @params[:sample_uuid] end | 
#sample_already_present? ⇒ Boolean
| 64 65 66 | # File 'app/models/heron/factories/sample.rb', line 64 def sample_already_present? sample.present? end | 
#sample_keys ⇒ Object
| 23 24 25 | # File 'app/models/heron/factories/sample.rb', line 23 def sample_keys (@params.keys.map(&:to_sym) - %i[sample_uuid study study_uuid aliquot uuid]) end | 
#sanger_sample_id ⇒ Object
| 54 55 56 | # File 'app/models/heron/factories/sample.rb', line 54 def sanger_sample_id @sanger_sample_id ||= @params[:sanger_sample_id] || create_sanger_sample_id! end | 
#study ⇒ Object
| 46 47 48 | # File 'app/models/heron/factories/sample.rb', line 46 def study @study ||= @params[:study] || Study.with_uuid(@params[:study_uuid]).first end | 
#unexisting_column_keys ⇒ Object
| 93 94 95 | # File 'app/models/heron/factories/sample.rb', line 93 def unexisting_column_keys (sample_keys - [params_for_sample_table.keys, .keys].flatten.map(&:to_sym)) end |