class KonoUtils::TmpFile

Classe Funzionante prettamente con RAILS la classe si occupa dei files temporanei creando una cartella dentro a tmp del progetto crea una cartella random per ogni file per ovviare al problema di duplicazioni dei nomi Estende Tempfile, la root della struttura è quella di Rails.root e di default la classe scrive dentro a tmp non ha bisogno di essere cancellata, ci penserà in automatico la classe una la prossima volta che viene chiamata cancellando tutti i files con un TTL maggiore di 1.day di default

Utilizzo:

tmp = TmpFile.new('nomefile.ext') tmp.path -> path completa tmp.write.…. tmp.original_filename.…… tmp.unique_filename.……

Constants

PATH
TIME_LIMIT

Attributes

original_filename[RW]
root_dir[RW]
tmp_dir[RW]
tmp_file[RW]
unique_filename[RW]

Public Class Methods

new(name) click to toggle source

Generate a new file with a given name

  • Args :

    • name -> String of the name file

  • Returns :

    • Tempfile

# File lib/kono_utils/tmp_file.rb, line 39
def initialize(name)
  self.original_filename = name
  self.root_dir = controll_root
  clean_tmpdir
  #creo una nuova cartella per il file attuale
  self.tmp_dir = "#{self.root_dir.path}/#{Time.now.to_f}"
  Dir.mkdir(self.tmp_dir)
  ext = File.extname(name)
  name = [File.basename(name), ext] unless ext.blank?

  @tmp_file = Tempfile.create(name, self.tmp_dir)

  self.unique_filename= File.basename(self.path)
end

Public Instance Methods

Private Instance Methods

clean_tmpdir() click to toggle source

Clean the directory

# File lib/kono_utils/tmp_file.rb, line 89
def clean_tmpdir
  self.root_dir.each do |d|
    # controlliamo il nome del file. in quanto il nome del file coincide al Time.now
    if d != '..' and d != '.'
      if d.to_i < Time.now.to_i - TIME_LIMIT
        FileUtils.rm_rf(File.join(self.root_dir.path, d))
      end
    end
  end
end
controll_root() click to toggle source

controll presence of root dir if not exists create it

  • Returns :

    • Dir

# File lib/kono_utils/tmp_file.rb, line 72
def controll_root
  root = '/'
  if defined?("::Rails")
    if Rails.respond_to?(:root)
      root = ::Rails.root
    end
  end
  root = File.join(root, PATH)
  unless File.exist?(root)
    Dir.mkdir(root)
  end
  Dir.open(root)
end