class Done::Log

Attributes

date[R]
dir[R]
git[R]
log_file[R]

Public Class Methods

config(config_file = default_config_file) click to toggle source
# File lib/done_log.rb, line 115
def config config_file = default_config_file
  if File.exist? config_file
    begin
      JSON.parse(File.read(config_file), symbolize_names: true)
    rescue JSON::ParserError => e
      warn "Unable to parse config file: #{e.inspect}"
      {}
    end
  else
    FileUtils.mkdir_p(default_dir)

    config = default_config
    puts "What Git URL (e.g. git@github.com:user_name/example_log.git) should we use?\nLeave blank to skip."
    print "? "
    url = gets.strip

    unless url.empty?
      config[:git_repo] = url
    end

    File.open(config_file, "w") do |f|
      f.puts(JSON.pretty_generate(config))
    end

    config
  end
end
default_config() click to toggle source
# File lib/done_log.rb, line 143
def default_config
  {
    git_repo: nil,
    date_color: :cyan
  }
end
default_config_file() click to toggle source
# File lib/done_log.rb, line 150
def default_config_file
  File.join(default_dir, "config")
end
default_dir() click to toggle source
# File lib/done_log.rb, line 103
def default_dir
  File.join(Dir.home, ".done").freeze
end
default_log_dir() click to toggle source
# File lib/done_log.rb, line 107
def default_log_dir
  File.join(Dir.home, ".done", "log").freeze
end
edit_logs(time_period) click to toggle source
# File lib/done_log.rb, line 154
def edit_logs time_period
  if time_period.is_a? Date
    Done::Log.new(date: time_period).log
  else
    time_period.each do |d|
      Done::Log.new(date: d).log
    end
  end
end
logs() click to toggle source
# File lib/done_log.rb, line 111
def logs
  Dir[self.default_dir].sort
end
new(date:, date_color: nil) click to toggle source
# File lib/done_log.rb, line 14
def initialize date:, date_color: nil
  @date = date
  @dir = Done::Log.default_log_dir
  year = date.year.to_s
  month = date.month.to_s.rjust(2, "0")
  @log_file = File.join(dir, year, month, date_string)

  config = Done::Log.config
  @git = GitRepo.new(config[:git_repo], dir, log_file)
  @date_color = date_color || config[:date_color]
end
show_logs(time_period, date_color = nil) click to toggle source
# File lib/done_log.rb, line 164
def show_logs time_period, date_color = nil
  if time_period.is_a? Date
    Done::Log.new(date: time_period, date_color: date_color).show
  else
    pull = true
    time_period.each do |d|
      Done::Log.new(date: d, date_color: date_color).show(pull)
      pull = false
    end
  end
end

Public Instance Methods

create_log() click to toggle source
# File lib/done_log.rb, line 66
    def create_log
      unless File.exist? log_file
        File.open(log_file, "w") do |f|
          f.puts <<~LOG
          #{date_string}

          LOG
        end

        git.add
      end
    end
date_string() click to toggle source
# File lib/done_log.rb, line 98
def date_string
  date.iso8601.freeze
end
ensure_directory() click to toggle source
# File lib/done_log.rb, line 60
def ensure_directory
  FileUtils.mkdir_p(dir)
  git.init
  FileUtils.mkdir_p(File.dirname(log_file))
end
log() click to toggle source
# File lib/done_log.rb, line 26
def log
  ensure_directory
  git.pull
  create_log
  vim_edit
  strip_log
  git.add
  git.commit
  git.push
end
show(pull = true) click to toggle source
# File lib/done_log.rb, line 37
    def show pull = true
      ensure_directory
      git.pull if pull

      if File.exist? log_file
        log = File.read(log_file)
        if $stdout.tty?
          puts log.sub(/^(\d{4}-\d{2}-\d{2})$/) { |date| Done::ANSIColors.colorize(date, @date_color) }
        else
          puts log
        end

        puts
      else
        puts <<~LOG
      #{Done::ANSIColors.colorize(date_string, @date_color)}

      [No log]

        LOG
      end
    end
strip_log() click to toggle source
# File lib/done_log.rb, line 79
def strip_log
  log = File.read(log_file).strip

  if log.empty?
    File.delete(log_file)
  else
    File.open(log_file, "w") do |f|
      f.puts log
    end
  end
end
vim_edit() click to toggle source
# File lib/done_log.rb, line 91
def vim_edit
  system 'vim',
    '+ normal Go', # Move to end of file, start new line
    '+startinsert', # Switch to insert mode
    log_file
end