lib/frecli/cli.rb

Summary

Maintainability
A
35 mins
Test Coverage
require 'fuzzy_match'

class Frecli
  module Cli
    def self.status
      timer = Frecli.timer_current

      if timer
        puts "Timer running on #{timer.project.name} (#{timer.formatted_time})."
      else
        puts 'No timer running.'
      end
    end

    def self.time(project_query)
      project = FuzzyMatch
                .new(Frecli.projects, read: :name)
                .find(project_query)

      timer = Frecli.timer_start(project)

      puts "Now timing #{project.name} (#{timer.formatted_time})."
    end

    def self.pause
      timer = Frecli.timer_current

      unless timer
        puts 'No timer running.'
        return
      end

      if Frecli.timer_pause(timer)
        puts "Paused #{timer.project.name} (#{timer.formatted_time})."
      else
        puts 'Could not pause timer.'
      end
    end

    def self.log(description = '')
      timer = Frecli.timer_current

      return puts 'No timer running.' unless timer

      if Frecli.timer_log(timer, description)
        puts "Logged #{timer.project.name} (#{timer.formatted_time})."
        puts %("#{description}") unless description.empty?
      else
        puts 'Could not log timer.'
      end
    end

    def self.projects(refresh: false)
      projects = Frecli
                 .projects(refresh: refresh)
                 .map(&:name)

      if projects.empty?
        puts 'No projects found.'
      else
        projects.each(&method(:puts))
      end
    end
  end
end