Class: PlateVolume
- Inherits:
- 
      ApplicationRecord
      
        - Object
- ActiveRecord::Base
- ApplicationRecord
- PlateVolume
 
- Extended by:
- DbFile::Uploader
- Defined in:
- app/models/plate_volume.rb
Constant Summary collapse
- ASSAY_TYPE =
- 'Volume Check'
- ASSAY_VERSION =
- '1.0'
Class Method Summary collapse
- .all_plate_volume_file_names(folder) ⇒ Object
- 
  
    
      .bugfix_filename_duplicate_back_to_normal(filename)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Given a .csv filename it removes the characters (2) that were appended to indicate the file was a duplicate. 
- 
  
    
      .find_for_filename(filename)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    rubocop:disable Metrics/MethodLength. 
- .handle_volume(filename, file) ⇒ Object
- .process_all_volume_check_files(folder = configatron.plate_volume_files) ⇒ Object
- .sanitized_filename(file) ⇒ Object
Instance Method Summary collapse
- #call(filename, file) ⇒ Object
- 
  
    
      #update_required?(modified_timestamp)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Is an update required given the timestamp specified. 
Methods included from DbFile::Uploader
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
Class Method Details
.all_plate_volume_file_names(folder) ⇒ Object
| 81 82 83 | # File 'app/models/plate_volume.rb', line 81 def all_plate_volume_file_names(folder) Dir.entries(folder).reject { |f| File.directory?(File.join(folder, f)) } end | 
.bugfix_filename_duplicate_back_to_normal(filename) ⇒ Object
Given a .csv filename it removes the characters (2) that were appended to indicate the file was a duplicate. This is currently happening to files handled by CarrierWave during the save() action.
An example of this method, suppose file1.csv –> file1(2).csv then the action of this method would revert file1(2).csv into file1.csv
| 130 131 132 133 134 | # File 'app/models/plate_volume.rb', line 130 def bugfix_filename_duplicate_back_to_normal(filename) matching_regexp = /\(\d*\)\.CSV/i filename.gsub!(matching_regexp, '.csv') if filename.match(matching_regexp) filename end | 
.find_for_filename(filename) ⇒ Object
rubocop:disable Metrics/MethodLength
| 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | # File 'app/models/plate_volume.rb', line 101 def find_for_filename(filename) find_by(uploaded_file_name: filename) or lambda do |filename, file| # TODO: After saving, the uploaded_file_name is renamed internally by CarrierWave to (2).CSV # This should be amended in future. instance = PlateVolume.new(uploaded_file_name: filename, updated_at: file.stat.mtime, uploaded: file) instance.save ensure unless instance.nil? ActiveRecord::Base.connection.execute( " UPDATE plate_volumes SET uploaded_file_name='#{bugfix_filename_duplicate_back_to_normal(instance.uploaded_file_name)}' WHERE plate_volumes.id=#{instance.id} " ) end end end | 
.handle_volume(filename, file) ⇒ Object
| 86 87 88 89 90 | # File 'app/models/plate_volume.rb', line 86 def handle_volume(filename, file) ActiveRecord::Base.transaction { find_for_filename(sanitized_filename(file)).call(filename, file) } rescue => e Rails.logger.warn("Error processing volume file #{filename}: #{e.}") end | 
.process_all_volume_check_files(folder = configatron.plate_volume_files) ⇒ Object
| 75 76 77 78 79 | # File 'app/models/plate_volume.rb', line 75 def process_all_volume_check_files(folder = configatron.plate_volume_files) all_plate_volume_file_names(folder).each do |filename| File.open(File.join(folder, filename), 'r') { |file| catch(:no_source_plate) { handle_volume(filename, file) } } end end | 
.sanitized_filename(file) ⇒ Object
| 94 95 96 97 98 | # File 'app/models/plate_volume.rb', line 94 def sanitized_filename(file) # We need to use the Carrierwave sanitized filename for lookup, else files with spaces are repetedly processed # Later versions of carrierwave expose this sanitization better, but for now we are forced to create an object CarrierWave::SanitizedFile.new(file).filename end | 
Instance Method Details
#call(filename, file) ⇒ Object
| 19 20 21 22 23 24 25 | # File 'app/models/plate_volume.rb', line 19 def call(filename, file) return unless update_required?(file.stat.mtime) db_files.map(&:destroy) reload update!(uploaded_file_name: filename, updated_at: file.stat.mtime, uploaded: file) end | 
#update_required?(modified_timestamp) ⇒ Boolean
Is an update required given the timestamp specified
| 15 16 17 | # File 'app/models/plate_volume.rb', line 15 def update_required?() updated_at.to_i < .to_i end |