# frozen_string_literal: true # Trata arquivos passados como parametro e calcula o total de horas trabalhadas class TxtTimesheet def convert(par) ### Converte o tempo trabalhado para o formato hh:mm hours = par / 60 hours = hours.to_i minutes = par - hours * 60 ## Adiciona o 0 para manter o formato hh:mm hours = "0#{hours}" if hours < 10 minutes = "0#{minutes}" if minutes < 10 time = "#{hours}:#{minutes}" time end def run time_regex = /(?<hours>\d{2})\:(?<minutes>\d{2})/ total_time = 0 puts 'REPORT:' #### Percorre todos os arquivos na linha de comando ARGV.each do |a| sum_time = 0 i = 0 files = a file = "assets/#{a}" content_file = File.open(file) i_count = 0 time = [] time_to_min = [] ### Percorre todas as linhas do arquivo de entrada para extrair os dados until content_file.eof? line = content_file.gets.chomp next unless time_regex.match(line) hours = time_regex.match(line)[:hours] minutes = time_regex.match(line)[:minutes] time.push(hours + ':' + minutes) i += 1 end i_count = time.count - i_count # Conta registros em cada arquivo content_file.close ### ### itera pelo array de strings e converte para inteiros i = 0 inteiro = [] i_parse_int = i_count * 2 time.each do |a| a = a.split(':') a.each do |b| inteiro.push(b.to_i) end end ### ### Converte para minutos while i < i_parse_int hrs = inteiro[i] hrs *= 60 hrs += inteiro[i + 1] time_to_min.push(hrs) i += 2 end ### ### Calcula o tempo trabalhado em minutos i = 0 while i < i_count sum_time = time_to_min[i + 1] - time_to_min[i] + sum_time i += 2 end ### time_file = convert(sum_time) print "#{files}: #{time_file} hours\n" ### total_time += sum_time # Acumulates the worked time of each file end time_file = convert(total_time) puts "Total Hours: #{time_file} hours\n" ### #### end end