lib/txt_timesheet.rb in txt_timesheet-1.1.10 vs lib/txt_timesheet.rb in txt_timesheet-1.1.11

- old
+ new

@@ -1,7 +1,7 @@ # frozen_string_literal: true - +require 'time' # Treat past files as a parameter and calculate total hours worked class TxtTimesheet def initialize @can_parse = false @@ -25,84 +25,76 @@ else @can_parse = true if line.start_with? '## Timesheet' end end - def run + def process_file(filename) time_regex = /(?<hours>\d+)\:(?<minutes>\d+)/ - total_time = 0 + sum_time = 0 + index = 0 + content_file = File.open(filename) + time = [] + time_in_sec = [] - puts 'REPORT:' - #### Receive all files indicated on the command line - ARGV.each do |a| - sum_time = 0 - index = 0 - files = a - file = a.to_s - content_file = File.open(file) - input_count = 0 - time = [] - time_in_min = [] + ### Read all lines from the input file to extract data + until content_file.eof? + line = content_file.gets.chomp + set_can_parse(line) - ### Read all lines from the input file to extract data - until content_file.eof? - line = content_file.gets.chomp - set_can_parse(line) + next unless can_parse? - next unless can_parse? + next unless time_regex.match(line) - next unless time_regex.match(line) + time << time_regex.match(line) + time_in_sec << Time.parse(time.last.to_s) + end - hours = time_regex.match(line)[:hours] - minutes = time_regex.match(line)[:minutes] - time.push(hours + ':' + minutes) - index += 1 - end - input_count = time.count - input_count # count records in each file - content_file.close - ### + while index < time.count - ### iterates over string array and converts to integers - index = 0 - integer = [] - i_parse_int = input_count * 2 - time.each do |entry_time| - entry_time = entry_time.split(':') - entry_time.each do |entry_time_to_integer| - integer.push(entry_time_to_integer.to_i) - end - end - ### + sum_time = time_in_sec[index + 1] - time_in_sec[index] + sum_time + index +=2 + end + ### + total_sec = sum_time - ### Converts to minutes - while index < i_parse_int - time_to_min = integer[index] - time_to_min *= 60 - time_to_min += integer[index + 1] - time_in_min.push(time_to_min) - index += 2 - end - ### + # phrase = 'xixixococo' - ### Calculates worked time in minutes - index = 0 - while index < input_count - sum_time = time_in_min[index + 1] - time_in_min[index] + sum_time - index += 2 - end - ### + { + file_name: filename, + file_time: total_sec, + # phrase: phrase + } + end - time_file = convert(sum_time) - print "#{files}: #{time_file} hours\n" - ### + def process_results(results=[]) + output = [] + total = [] + total_time = 0 + output << 'REPORT:' - total_time += sum_time # Acumulates the worked time of each file + results.each do |result| + file_name = result[:file_name] + time_file = result[:file_time] + total_time += time_file + # phrase = result[:phrase] + time_file = Time.at(time_file).utc + output << "#{file_name}: #{time_file.strftime("%H:%M")} hours \n" + + # total_time = result[:file_time] end + total = total_time.divmod(3600) + total[1] /= 60 + total[1] = total.last.to_i + output << "Total Hours: #{total.join(":")} hours\n" - time_file = convert(total_time) + output + end - puts "Total Hours: #{time_file} hours\n" - ### - - #### + def run + results = [] + ARGV.each do |arg| + results << process_file(arg) + end + output = process_results(results) + puts output.join "\n" end end