Sha256: f4c0519daafe0713e789f837d4828b5a4d8868db2178c220c3e1b0b9f690884b

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

# typed: strict
# frozen_string_literal: true

require_relative "git"

module Spoom
  class Timeline
    extend T::Sig

    sig { params(from: Time, to: Time, path: String).void }
    def initialize(from, to, path: ".")
      @from = from
      @to = to
      @path = path
    end

    # Return one commit for each month between `from` and `to`
    sig { returns(T::Array[String]) }
    def ticks
      commits_for_dates(months)
    end

    # Return all months between `from` and `to`
    sig { returns(T::Array[Time]) }
    def months
      d = Date.new(@from.year, @from.month, 1)
      to = Date.new(@to.year, @to.month, 1)
      res = [d.to_time]
      while d < to
        d = d.next_month
        res << d.to_time
      end
      res
    end

    # Return one commit for each date in `dates`
    sig { params(dates: T::Array[Time]).returns(T::Array[String]) }
    def commits_for_dates(dates)
      dates.map do |t|
        result = Spoom::Git.log(
          "--since='#{t}'",
          "--until='#{t.to_date.next_month}'",
          "--format='format:%h'",
          "--author-date-order",
          "-1",
          path: @path,
        )
        next if result.out.empty?
        result.out
      end.compact.uniq
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spoom-1.1.11 lib/spoom/timeline.rb
spoom-1.1.10 lib/spoom/timeline.rb
spoom-1.1.9 lib/spoom/timeline.rb