Sha256: 9d80235adc4121a63c42420e02f1e006dd68a10fae977f7405e322cfcfa8a8b2

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

require "obst/group_by_days"

module Obst
  class TouchedFiles
    def initialize(**opts)
      @path = opts[:C]
      @buffer = []
    end

    def to_s
      last_7_days
      @buffer << ''
      last_4_weeks_without_last_7_days
      @buffer << ''
      last_3_months_without_last_4_weeks
      @buffer.join("\n")
    end

    def last_7_days
      @buffer << "# Last 7 days\n"

      GroupByDays.new(C: @path).take(7).each do |record|
        wday = Time.parse(record.time).strftime('%a')
        @buffer << "- #{record.time} #{wday} (#{record.statuses.size})"
        list_files(record)
      end
    end

    def last_4_weeks_without_last_7_days
      before = (Time.now - (60 * 60 * 24 * 7)).strftime('%FT23:59:59')

      @buffer << "# 3 weeks earlier\n"

      GroupByDays.new(C: @path, before: before, days: 7).take(3).each do |record|
        @buffer << "- #{record.time} (#{record.statuses.size})"
        list_files(record)
      end
    end

    def last_3_months_without_last_4_weeks
      before = (Time.now - (60 * 60 * 24 * 28)).strftime('%FT23:59:59')

      @buffer << "# 1 month earlier\n"

      GroupByDays.new(C: @path, before: before, days: 28).take(2).each do |record|
        @buffer << "- #{record.time} (#{record.statuses.size})"
        list_files(record)
      end
    end

    def list_files(record)
      group_by_final_status = Hash.new{ |h, k| h[k] = [] }
      record.statuses.each_pair{ |name, status| group_by_final_status[status.final] << name }

      [
        [:new, :a, '#2db7b5'],
        [:mod, :m, '#d3be03'],
        [:del, :d, '#c71585']
      ].each do |long, short, color|
        files = group_by_final_status[short]
        next if files.empty?
        inline_str = inline(files)
        @buffer << "\t- <font color='#{color}'>#{long} #{files.count}:</font> #{inline_str}"
      end
    end

    def inline(files)
      files.sort!.map{ |name| "[[#{name}]]" }.join(' / ')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
obst-0.1.4 lib/obst/touched_files.rb