Sha256: 531cc7310253f22960585bfb1e1cab3f826120e37edc5d746d97d99a9b25fbef

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

require "work_timer/version"

module WorkTimer
  class Work
    def initialize(fileName)
      @fileName = fileName
    end

    def start_work(startTime=nil)
      @startTime ||= Time.now
    end

    def end_work(endTime=nil)
      @endTime ||= Time.now
      stop_view
    end

    # 戻り値はString
    def total_time
      totalTime = 0
      begin
        f = File.open(@fileName, "r")
      rescue
        return sec2seq(totalTime)
      end
      f.each_line do |line|
        next if line =~ /^\d{4}-\d{2}-\d{2}/
        # **:**:**表示を秒に変換
        line.chomp.split(":").each_with_index do |time, i|
          totalTime += time.to_i*60**(2-i)
        end
      end
      f.close
      sec2seq(totalTime)
    end

    def record_time
      File.open(@fileName, "a+") do |f|
        workTime = (@endTime.gmtime-@startTime.gmtime.to_i).strftime("%T")
        f.puts @startTime.localtime, @endTime.localtime, workTime
      end
    end

    def view
      @view_thread = Thread.new do
        loop do
          workingTime = Time.now - @startTime.to_i
          print "\r\033[32m#{(workingTime+60*60*15).strftime("%T")}\033[0m"
          sleep 1
        end
      end
      true
    end

    private

    def sec2seq(sec)
      hours = (sec/3600.0).to_i.to_s
      minutes = ((sec-(sec/3600.0).to_i*3600.0)/60).to_i.to_s
      seconds = (sec%60).to_i.to_s
      "#{two_digits(hours)}:#{two_digits(minutes)}:#{two_digits(seconds)}"
    end

    # 1桁の数字(実際はStringクラス)を2桁にする (e.g.: 0:0:47 -> 00:00:47)
    def two_digits(time)
      time.size==1 ? "0"+time : time
    end

    def stop_view
      @view_thread.kill if @view_thread && @view_thread.alive?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
work_timer-0.2.2 lib/work_timer.rb