Last Updated: February 25, 2016
·
310
· feliper

Hot folder in Ruby

Look into "dirin" watching files with valid extension "ext[ ]", process each file and save to "dirout"

https://gist.github.com/feliper/11330170

require "FileUtils"

# que hora es ?
def hora(start)
    "#{start.hour}:#{start.min}:#{start.sec}"
end

# este archivo tiene una extension válida ?
def valido?(file,ext)
    if dir?(file)
        return false
    elsif File.file?(file) == true
        name = File.basename(file)
        ext1 = name.split(".").last
            if ext.include?(ext1)               
                return true
            else
                return false
            end
    else
        return false
    end
end

# existe el directorio ?
def dir?(dir)
    if File.directory?(dir)
        true
    else
        false
    end
end

# De todos los archivos que hay en un directorio
# cuales tienen extrension válida ?, estos serán los que procese
def filter_ext(dir,ext)
    files=[]
    no_valido = "NO"
    if dir?(dir)
        files = Dir.entries(dir)
            files.each_with_index do |name,i|
                file = dir + name
                if valido?(file,ext) == false
                    files[i]=no_valido
                else
                    files[i]=file
                end
            end
            files.delete no_valido
            if files.length == 0
                "nada"
            else
                files
            end
    else
        "error1"
    end 
end



## DIRECTORIO de entrada de archivos
dir_in = "C:/Users/nombre_usuario/IN/"
## DIRECTORIO de salida de archivos
dir_out = "C:/Users/nombre_usuario/OUT/"
## extensiones que quieres VIGILAR
ext = ["doc","docx","DOC","DOCX"]


i = 1
count = 1
while i != 0
    salida = filter_ext(dir_in,ext)
    puts "#{count} #{hora(Time.now)}"
    if salida == "nada"
        puts "no hay archivos válidos"
    elsif salida == "error1"
        puts "Error el directorio no existe"
    else
        puts "hay #{salida.length} archivos válidos"

            salida.each do |file|

                ###############
                # aqui es donde procesas el archivo 
                ###############

                # guardas el archivo procesado en el direcotrio de salida
                output = dir_out + File.basename(file)
                File.rename(file,output)

            end     

    end
    sleep(5)
    count += 1
end